Использование 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-сервер без разрывов соединения
Ответы
Ответ 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>
-
Получить преследуемые и названные имена сердитым системным администратором