Как проверить канал HLS еще жив или нет - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть m3u8 фид, я ищу способ определить, работает ли он по-прежнему или не использует Javascript.когда я получаю URL, я все еще получаю список всех кусков, но прямая трансляция давно остановлена.и игрок не играет в нее.поэтому мне интересно, есть ли способ проверить, работает ли канал m3u8, пока он не запущен на плеере.

1 Ответ

0 голосов
/ 12 декабря 2018

Обычное поведение в прямом эфире заключается в том, что каждые x секунд становится доступным новый сегмент, то есть добавляется в конце списка воспроизведения.

Итак, вы можете загрузить список воспроизведения один раз, а затем ждатьx секунды и загрузите его снова.Если прямой эфир все еще выполняется, последний сегмент в списке воспроизведения должен был измениться (т. Е. Сместиться вверх).

Относительно того, как долго ждать: При начальной загрузке списка воспроизведения вы увидите тег EXT-X-TARGETDURATION всписок воспроизведения, указывающий максимальную продолжительность сегмента.Поэтому, если мы подождем хотя бы одну целевую длительность, прежде чем перезагрузить, то должен быть добавлен хотя бы один новый сегмент.

Пример:

  1. Начальная загрузка:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:8
    #EXT-X-MEDIA-SEQUENCE:0
    
    #EXTINF:8.0,
    https://priv.example.com/0.ts
    #EXTINF:8.0,
    https://priv.example.com/1.ts
    #EXTINF:8.0,
    https://priv.example.com/2.ts
    
  2. Подождите 8 секунд, следовательно #EXT-X-TARGETDURATION:8

  3. Вторая загрузка:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:8
    #EXT-X-MEDIA-SEQUENCE:1
    
    #EXTINF:8.0,
    https://priv.example.com/1.ts
    #EXTINF:8.0,
    https://priv.example.com/2.ts
    #EXTINF:8.0,
    https://priv.example.com/3.ts
    

Sidenote

Приведенный выше пример представляет собой живой поток со скользящим окном, то есть сегменты в верхней части списка воспроизведения выпадают, и EXT-X-MEDIA-SEQUENCE увеличивается.В этом случае проверка, если EXT-X-MEDIA-SEQUENCE изменений будет вариант.Однако, если в списке воспроизведения указано EXT-X-PLAYLIST-TYPE из EVENT, то ни один сегмент не выпадет вверху [1] EXT-X-MEDIA-SEQUENCE не изменится.Однако метод проверки последнего сегмента работает в любом случае.

[1] https://tools.ietf.org/html/rfc8216#section-4.3.3.5

EDIT

Спецификация HLS дополнительно гласит:

Если список воспроизведения мультимедиа не содержит тег EXT-X-ENDLIST, сервер ДОЛЖЕН сделать доступной новую версию файла списка воспроизведения, которая содержит хотя бы один новый сегмент мультимедиа.Он ДОЛЖЕН быть сделан доступным относительно времени, когда была сделана доступной предыдущая версия файла списка воспроизведения: не ранее, чем половина целевой длительности после этого времени и не позднее, чем в 1,5 раза больше целевой продолжительности после этого времени.Это позволяет клиентам эффективно использовать сеть.

Так что на самом деле нам нужно подождать как минимум в 1,5 раза больше целевого времени, пока мы не перезагрузим.

...