У меня есть плейлисты HLS, которые выглядят так:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-TARGETDURATION:10
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts
Они имеют тип EVENT
, что означает, что куски добавляются по мере их появления, и когда все куски присутствуют, в конце добавляется тег #EXT-X-ENDLIST
.
Итак, когда все куски загружаются, мы получаем список воспроизведения, который выглядит примерно так:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-TARGETDURATION:10
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence4.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence5.ts
#EXT-X-ENDLIST
Мы видим странное поведение у всех наших клиентов. Если вы откроете плейлист m3u8 в iOS и Safari, когда загрузится первый фрагмент (или даже, скажем, 3 куска), плеер начнет воспроизводить видео, как следует. Иногда оно прекращается и не может возобновиться. Чаще всего он даже не начнет играть.
Полностью сформированные плейлисты (т.е. с тегом #EXT-X-ENDLIST
) отлично воспроизводятся. Это просто, когда плейлист частично выполнен.
Мы опробовали множество игроков: Quicktime, Safari, iOS, VLC, Flowplayer и т.д. У всех есть множество проблем, но это наиболее актуально.
Было бы очень полезно понять, где искать решение этой проблемы.
Изменить: мы пробовали HLS.js, и он отлично играет. Такой приятный пользовательский опыт.
Изменить 2: Чтобы воспроизвести, я рекомендую иметь какой-то локальный HTTP-сервер (я использую python -m SimpleHTTPServer
, обслуживающий список воспроизведения выше. Затем буквально добавляйте файлы в список воспроизведения, чтобы имитировать загрузку файлов и смотреть игроки сломаются.
Изменить 3: Хорошо, я создал простой инструмент для проверки поведения. https://github.com/dbousamra/m3u8-example Запустите node app.js
, а затем попробуйте и open http://localhost:3001/playlist.m3u8
в Safari или любом другом проигрывателе. Он должен играть нормально, поскольку это полный список воспроизведения. **
Если, однако, вы добавляете параметр запроса ?start=<some unix timestamp>
, он будет имитировать добавление событий, 1 кусок каждые 6 секунд, с этой отметки времени, пока все куски не будут выполнены, и в этот момент она добавит строку #EXT-X-ENDLIST
.
Пример URL: http://localhost:3001/playlist.m3u8?start=1460092250872
Изменить 5: теперь я получил это на Heroku: http://guarded-mesa-71212.herokuapp.com/playlist.m3u8?start=