#ffmpeg #encode #http-live-streaming
#ffmpeg #кодировать #http-прямая трансляция
Вопрос:
Я пытаюсь использовать ffmpeg для создания прямой трансляции из видеофайла, закодированного «на лету», который можно приостанавливать и возобновлять (как это делает Plex). Приостановка процесса ffmpeg приостанавливает кодирование, но его возобновление приводит к тому, что ffmpeg пытается догнать, где он был бы в потоке. Я предполагаю, что существует какая-то внутренняя временная метка, на которую смотрит ffmpeg, чтобы отслеживать время. Я бы хотел, чтобы ffmpeg продолжил кодирование с того места, на котором он остановился.
Я использую переключатель «-re» для чтения файла с его собственной частотой кадров. Я пробовал форматы hls и dash; насколько я могу судить, они оба ведут себя одинаково. Сегментировать весь файл заранее — это не вариант, я хотел бы иметь возможность транслировать, используя только временные файлы, созданные «на лету».
Вот упрощенные команды, которые я использовал.
HLS: ffmpeg -y -re -i «input.mkv» -movflags frag_keyframe empty_moov faststart -f hls -hls_time 2 -hls_list_size 10 -hls_delete_threshold 1 -hls_flags split_by_time delete_segments second_level_segment_index -strftime плейлист.m3u8
DASH: ffmpeg -повторный ввод.mkv» -f dash -seg_duration 2 -window_size 5 -extra_window_size 0 -remove_at_exit 1 плейлист.m3u8