FFMPEG - RTMP в HLS без аудиовыхода

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

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

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 секунд! Моя единственная проблема заключается в том, что аудиопоток не распознается, а также не помещается в файлы HLS (это означает, что я получил только видео, но без звука вообще):

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

Я думал, что флаг -c:a ac также должен выполнять работу по мультиплексированию звука.

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

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

Обновить:

Некоторые результаты команды 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 НЕ работает.

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

Обновление 2:
Кажется, что есть проблема, когда я запускаю команду ffmpeg после того, как поток уже опубликован.
Если я следую за этими шагами, все работает отлично:
1. Start Stream (nc Соединение с AMS установлено)
2. Запустите команду FFMPEG (она будет простаивать до публикации потока)
3. Начать публикацию

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

1 ответ

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

Я выяснил, что проблема связана с исследованием.

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

На работающем прямом эфире я должен установить это около 1000 Кб, чтобы правильно выбрать аудиопоток.

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

Другие вопросы по тегам