MPEG-TS сегментирует потоковую передачу по HTTP - PullRequest
2 голосов
/ 26 декабря 2011

Я пытаюсь чередовать сегменты MPEG-TS, но не удается. Один набор сегментов был фактически захвачен встроенной камерой ноутбука, а затем закодирован с помощью FFMPEG с помощью следующей команды:

ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

А другой - это avi-файл, который был закодирован с помощью следующей команды:

fmpeg -er 4 -y -f avi -s 640x480 -r 30 -i ./DSCF2021.AVI -vbsf dump_extra -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

Затем выходные данные сегментируются на сегменты ts с использованием сегментатора с открытым исходным кодом.

Если оба исходят из одного источника (оба из камеры), они работают нормально. Однако в этом случае второй набор сегментов зависает. Время идет, но видео не двигается .. Так что я думаю, что это проблема кодирования. Поэтому мой вопрос: как мне изменить команду ffmpeg, чтобы это работало?

Под чередованием я подразумеваю наличие списка воспроизведения с первым набором сегментов и другого списка воспроизведения с другим набором сегментов и наличие вызова клиентом одного, а затем другого (HTTP Live Streaming)

Вывод ffprobe одного из первого набора сегментов:

Input #0, mpegts, from 'live1.ts':
  Duration: 00:00:09.76, start: 1.400000, bitrate: 281 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 29.92 fps, 29.92 tbr, 90k tbn, 59.83 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 111 kb/s

Вывод ffprobe одного из второго набора сегментов:

Input #0, mpegts, from 'ad1.ts':
  Duration: 00:00:09.64, start: 1.400000, bitrate: 578 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 22 kb/s

Спасибо,

1 Ответ

3 голосов
/ 27 декабря 2011

Я видел довольно много вопросов в теме - См .:

  1. HTTP Live Streaming MPEG TS сегмент и
  2. Обновление .m3u8Файл списка воспроизведения для потоковой передачи по протоколу HTTP?

Я не уверен, что именно проблема, но я думаю, что большинство людей жалуются на то, что при смешивании контента из обоих источников происходит зависание.

Я думаю, что такая ситуация может возникнуть, если PTS и / или PCR прерывисты, и игрок не распознает это или не очищает его.Вероятно, вы можете определить последовательность меток времени и посмотреть, решает ли это исправление проблемы.

Также см. 3.3.11.из http://tools.ietf.org/html/draft-pantos-http-live-streaming-07: EXT-X-DISCONTINUITY

Тег EXT-X-DISCONTINUITY указывает на разрыв кодирования
между последующим сегментом мультимедиа и предшествующим ему
Это.МОЖЕТ изменить набор характеристик:

o формат файла
o количество и тип дорожек
o параметры кодирования
o последовательность кодирования
o последовательность меток времени

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

...