#ffmpeg #http-live-streaming
#ffmpeg #http-прямая трансляция
Вопрос:
Я экспериментировал с использованием FFMPEG для приема входящего потока RTMP, перекодирования в выбранные битрейты и вывода его как HLS. Это работает.
Я хотел сохранить прямую трансляцию в виде VOD. И, найденный путем добавления -hls_list_size 0
флага, конечно же, все сегменты находятся в .m3u8. Что упрощает последующее превращение в VOD. Пока все хорошо.
Но очевидным следствием использования -hls_list_size 0
является то, что теперь m3u8 огромен во время прямой трансляции. Это нормально для VOD, где оно запрашивается только один раз, но менее хорошо во время прямой трансляции, где оно запрашивается снова и снова.
Итак… мой вопрос: может ли FFMPEG без повторного перекодирования выводить как все сегменты all.m3u8 (чтобы сохранить внутри для последующего создания VOD, т. Е. Используя -hls_list_size 0
) , так и также выводить последнюю версию в стиле скользящего окна.m3u8 (только из последних X сегментов, т. Е. Используя -hls_list_size 3
)?
Таким образом, зрителям прямой трансляции может быть предоставлен этот маленький файл latest.m3u8 в виде крошечного файла, содержащего только несколько последних сегментов. И после завершения события я бы отказался от этого небольшого файла latest.m3u8 и сохранил только all.m3u8, чтобы создать VOD-версию потока?
Спасибо!
Комментарии:
1. Используйте мультиплексор tee: ffmpeg.org/ffmpeg-formats.html#tee-1
2. @Gyan Ah… интересно. Я не знал об этом. Это может сработать. Я посмотрю, смогу ли я разобраться с командой
3. Привет @coder_uk, не могли бы вы, пожалуйста, помочь мне добиться того же, если это сработает для вас?
Ответ №1:
Вот мои два цента. Как @Gyan предложил в комментариях выше, я использовал команду tee. Это требует ввода за один раз, и производительность моей системы остается почти такой же, если бы я делал только Live. Единственным недостатком является то, что он создает дублирующую копию того множества сегментов, которые используются в сегментах HLS для live.
ffmpeg -y
-hide_banner
-i $input_url
-preset veryfast -g 48 -sc_threshold 0
-map 0:1 -map 0:2 -map 0:1 -map 0:2 -map 0:1 -map 0:2
-filter:v:1 "scale=-2:360" -c:v:1 libx264 -b:v:1 365k
-filter:v:2 "scale=-2:480" -c:v:2 libx264 -b:v:2 1600k
-c:v:4 copy
-f hls -hls_time 10 -hls_list_size 10
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2"
-hls_segment_filename "$stream_key-v%v/%d.ts"
-f hls -f tee
"[var_stream_map='v:0,a:0 v:1,a:1 v:2,a:2 ':
master_pl_name='master-live.m3u8':
hls_flags=delete_segments:
hls_list_size=60]$master-live%v/live.m3u8|
[var_stream_map='v:0,a:0 v:1,a:1 v:2,a:2':
master_pl_name='master-record.m3u8':
hls_playlist_type=vod]$master-record%v/record.m3u8"