Использование FFMPEG для непрерывного воспроизведения видеофайлов на RTMP-сервере - программирование
Подтвердить что ты не робот

Использование FFMPEG для непрерывного воспроизведения видеофайлов на RTMP-сервере

ffmpeg обрабатывает потоки RTMP как входные или выходные данные, и он хорошо работает.

Я хочу передать некоторые видео (динамический список воспроизведения, управляемый python script) на RTMP-сервер, и сейчас я делаю что-то довольно простое: потоковое видео по одному с FFMPEG на RTMP-сервере, однако это вызывает разрыв соединения каждый раз, когда заканчивается видео, и поток готов к работе, когда начинается следующее видео.

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

Я использую эту команду для потоковой передачи видео по одному на сервер

ffmpeg -re -y -i myvideo.mp4 -vcodec libx264 -b:v 600k -r 25 -s 640x360 \
-filter:v yadif -ab 64k -ac 1 -ar 44100 -f flv \
"rtmp://mystreamingserver/app/streamName"

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

Есть ли способ сделать это? (поток динамического списка воспроизведения видео с ffmpeg на RTMP-сервер без разрывов соединения

4b9b3361

Ответ 1

Обновить (поскольку я не могу удалить принятый ответ): правильное решение - реализовать пользовательский демультиплекс, похожий на concat. В настоящее время нет другого чистого пути. Вы должны замарать руки и код!

Ниже приведен уродливый хак. Это очень плохой способ сделать это, просто не делайте этого!

В решении используется concat demuxer и предполагается, что все исходные медиафайлы используют один и тот же кодек. Пример основан на MPEG-TS, но то же самое можно сделать для RTMP.

  • Создайте файл списка воспроизведения, содержащий огромный список точек входа для динамического списка воспроизведения в следующем формате:

    file 'item_1.ts' file 'item_2.ts' file 'item_3.ts' [...] file 'item_[ENOUGH_FOR_A_LIFETIME].ts'

    Эти файлы являются просто заполнителями.

  • Сделайте script, который отслеживает текущий индекс плейлиста и создает символические ссылки "на лету" для current_index + 1

    ln -s /path/to/what/to/play/next.ts item_1.ts

    ln -s /path/to/what/to/play/next.ts item_2.ts

    ln -s /path/to/what/to/play/next.ts item_3.ts

    [...]

  • Начните играть ffmpeg -f concat -i playlist.txt -c copy output -f mpegts udp://<ip>:<port>

  • Получить преследуемые и названные имена сердитым системным администратором