2011-12-26 2 views
2

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

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 

Спасибо,

+0

Хм, похоже, должно быть все в порядке. Вы можете показать вывод ffprobe из каждого потока? – vipw

+0

Другим возможным решением может быть объединение захваченного видео и AVI-файла в одно видео, прежде чем делать кодирование и сегментирование. – vipw

+0

@vipw Спасибо за ваш ответ. Я не могу их комбинировать, потому что захваченный поток является живым. Что касается ffprobe. Я добавлю его сейчас – user1069624

ответ

3

Я видел немало вопросов в этой теме - Смотрите:

  1. HTTP Live Streaming MPEG TS segment и
  2. Update .m3u8 playlist file for HTTP Live streaming?

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

Я думаю, что такая ситуация может возникнуть, если ПТС и/или ПЦР прерываются, и игрок не распознает это или не смывает его. Вероятно, вы можете определить последовательность временных меток и посмотреть, устраняет ли это проблемы.

Также см. 3.3.11. из http://tools.ietf.org/html/draft-pantos-http-live-streaming-07: EXT-X-прерывность

доб-Х-прерывность метка указывает на разрыв, кодирующий
между сегментом носителя, который следует за ним и тот, который предшествовал
его.Набор характеристик, которые могут изменить это:

Формат о файле
число и тип дорожек
O параметры кодирования O
о кодирующая
о временной метки последовательности

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

+0

Большое спасибо за ваши усилия, к сожалению, тег Discontinuity не работал для меня .. Единственное, что сработало, это изменение частоты кадров. Однако раньше у меня была эта проблема последовательности, где экран замораживать, если я проигрываю сегменты не в порядке. Я решил это, имея отдельный плейлист для каждого нового потока. Итак, если бы я хотел сыграть сегменты 1,2,3 из потока x, тогда сегменты 21,22 из потока y, я создал отдельный плей-лист только с 21 и 22. Еще раз спасибо! – user1069624

Смежные вопросы