2016-02-11 3 views
0

В настоящее время я разрабатываю динамический селектор HLS для нашего приложения livecam. Для этого я поймаю внешний RTMP-поток и преобразую его в сегменты с помощью ffmpeg.FFMPEG - RTMP to HLS нет аудиовыхода

Следующая команда работа:

ffmpeg -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v -c:v libx264 -profile:v baseline -level 5.1 \ 
-c:a aac -strict experimental -flags +global_header -f mpegts - | ffmpeg -i - -c copy -map 0 -f segment \ 
-segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_format libmp3lame -segment_time 10 \ 
-segment_wrap 4 /tmp/hls/"$id"/"$stream_name"%03d.ts 

Но с этой командой у меня есть огромная задержка между прямой трансляцией и выходом HLS (около 1-2 минут).

Итак, я попробовал другую команду, которая приводит к задержке в 20-30 секунд! Моя единственная проблема в том, что звуковой поток не распознается, а также не ставить на ЗОЖ файлы (означает, что я получил только видео, но нет ни одной на всех):

ffmpeg -probesize 50k -i rtmp://"$serverip"/"$application"/mp4:"$stream_name".f4v \ 
-c:v libx264 -b:v 128k -g 90 -c:a aac -strict experimental -flags -global_header -map 0 \ 
-f segment -segment_time 3 -segment_list /tmp/hls/"$id"/"$stream_name".m3u8 -segment_list_flags +live \ 
-segment_list_type m3u8 -segment_list_size 5 -segment_format mpegts /tmp/hls/"$id"/"$stream_name"%d.ts 

Я думал, на -с: а ААС Флаг должен выполнять работу и для мультиплексирования звука.

Есть ли у вас какие-либо предложения, что пошло не так во второй команде? Я определенно должен также отрезать аудиопоток!

Заранее спасибо

Update:

Некоторые выходы команды FFMPEG:

Я начал команду (2) одни и получили аудио выход, но это, кажется, не работает каждый раз ,

Выход из рабочей команды 2, аудио работает: http://pastebin.com/bhxfNQBg

Выход из рабочего команды 2, аудио не работает (ничего не изменилось): http://pastebin.com/engEuSdn

Что странно для меня, это линия:

[flv @ 0x1eed900] New audio stream 0:1 at pos:716680 and DTS:0s 

Это происходит только в том случае, если звук на стороне hls не работает.

Любая помощь будет оценена

Update 2:
Похоже, существует проблема, когда я запускаю команду FFmpeg после того, как поток уже опубликован.
Если я следую за этими шагами, все работает отлично:
1. Запустите поток (н.д. Подключение к AMS установлен)
команда 2. Запустите FFMPEG (он будет все время, пока поток не публикует)
3. Начало публикации

Но если я это так (что нам потребуется), звук не будет присутствовать:
1. Запустите поток присоединиться
2. Пользователь, начать публикацию
3. Запуск команды FFmpeg

+0

Что такое консольный выход 2-й команды? – Mulvya

+0

@Mulvya Это странно. Чтобы получить ваши выходы, я снова начал свою вторую команду, и, наконец, я получил звук! Непосредственно запустив команду, я не получил звука. На выходе вы можете видеть, что во второй раз Stream # 0: 0 не является аудиопотоком, как раньше. Однако я не знаю, почему это работает иногда. Мой поток всегда работает в потоковом режиме (я слышу звук на стороне клиента, который воспроизводит потоки, которые я пытаюсь извлечь с помощью ffmpeg). – DerHighland

ответ

0

Поскольку все больше людей должны внедрять функции HLS, я быстро хочу опубликовать свой «ответ» на мой вопрос о происхождении.

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

Как вы можете видеть в документации, probesize определяет, как долго ffmpeg ждет информацию о потоке перед началом сегментации.

В бегущем потоке в реальном времени я должен установить это около 1000k для правильной передачи аудиопотока.

Не все работает должным образом. Но обратите внимание, что более высокий уровень вероятности приведет к более высоким задержкам!

+0

можете ли вы добавить пример использования метода probesize? – chovy

+0

@chovy просто посмотрел на моем исходном посту второй оператор ffmpg и заменил ffmpeg -probesize 50k с помощью ffmpeg -probesize 1000k – DerHighland

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