Как включить один и тот же сегмент в список воспроизведения m3u8 несколько раз? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть несколько файлов .ts, сгенерированных ffmpeg из прямой трансляции.Все они имеют одинаковую длину (ну примерно).В идеале они генерируются постоянно, а имена представляют дату и время, когда они были записаны (например, «2019-04-11_10-51-40.ts»).Но может случиться так, что по каким-либо техническим причинам запись была на некоторое время остановлена ​​и файлы не были сгенерированы.

Теперь у меня есть задача создать список воспроизведения этих файлов для определенного диапазона времени и даты -и если для части этого диапазона нет файлов, мне нужно показать только черный экран.Для этого у меня есть черное видео такой же длины, что и другие файлы.Итак, я пытаюсь вручную создать файл .m3u8 и вставить это черное видео во все промежутки между обычными видео, которые у меня есть.Например:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:34
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-51-40.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-52-15.ts
#EXTINF:25.00,
http://example.com/2019-04-11_10-52-48.ts
#EXT-X-ENDLIST

Проблема в том, что когда я пытаюсь воспроизвести этот плейлист, он воспроизводится некорректно: в зависимости от игрока воспроизводится только одна черная часть, независимо от того, сколько их там.находятся в последовательности (VLC), или проигрыватель застревает после первого черного видео (расширение "Play HLS M3u8" для Chrome или проигрыватель на нашем собственном сервисе, основанном на hls.js).

Я также пыталсяиспользуйте #EXT-X-DISCONTINUITY;в этом случае воспроизводятся все видео, но индикатор прогресса падает до самого начала после каждого появления #EXT-X-DISCONTINUITY, что также является нежелательным поведением.Пример:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:34
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:30.07,
http://example.com/black_video.ts
#EXT-X-DISCONTINUITY
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-51-40.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-52-15.ts
#EXTINF:25.00,
http://example.com/2019-04-11_10-52-48.ts
#EXT-X-ENDLIST

Что касается самих черных видео, я пробовал несколько вариантов: каждая ссылка была на один и тот же файл;каждая ссылка была на другую символическую ссылку на один и тот же файл;каждая ссылка была на отдельно сгенерированное черное видео - ни одна из них не работала.

На данный момент единственный способ, который я нашел, - это собрать все нормальные видео для временного диапазона, заполнить пробелы черными видеофайлами, а затем объединитьих в один файл с ffmpeg -f concat и разбить объединенный файл обратно на части.Но этот подход работает дольше, чем ручное создание файла m3u8, поэтому я бы хотел его избежать.

Итак, что может быть причиной того, что сформированный вручную плейлист не работает правильно, и как я могу это исправить?Может ли быть проблема с самим плейлистом, или плейлист технически исправен, но игроки, которые я использовал, возможно, не полностью реализуют спецификацию?

TLDR : я создаю плейлист m3u8 вручную и хочувставить одно и то же видео несколько раз в этот плейлист.К сожалению, такой список воспроизведения воспроизводится неправильно: в зависимости от проигрывателя это вставленное видео воспроизводится только один раз, независимо от того, сколько раз оно было включено, или воспроизведение застревает после первой вставленной части видео.Может быть, что-то не так с плейлистом и как это можно исправить?

1 Ответ

0 голосов
/ 12 апреля 2019

Добавьте тег # EXT-X-DISCONTINUITY до и после файла black_video.ts и измените тег # EXT-X-VERSION на 5. Это должно решить проблему. Это решение работало для меня на плеере VLC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...