LINUX.ORG.RU

Как подменить изображение в процессе трансляции видеопотока c помощью FFmpeg?

 , ,


0

3

Хочу наложить на поток с камеры прозрачное png-изображение с логотипом вверху и показаниями термометра внизу.

ffmpeg -rtsp_transport tcp -i "rtsp://admin:12345@xx.xxx.xx.x/h264"  -i "/home/cam/iptv_broadcast/logo.png" -filter_complex "[0:v][1:v] overlay=25:25" -vcodec libx264 -b:v 3000k  -f mpegts "udp://@xxx.xxx.x.xxx:xxxx"

Показания с термометра хочу менять каждые 15 минут. Только если подменить файл logo.png во время вещания - трансляция происходит без изменений. Помогает только перезапуск трансляции. Один раз удалось сделать подмену, хотя возникла ошибка Error while decoding stream #1:0: Invalid data found when processing input. Справедливо, ибо нельзя писать в файл, с которого постоянно происходит чтение. Но больше этого не было, хотя что только не перепробовал. В этой теме fopen указывает, что нельзя на лету менять источники, хотя потом отказывается от этого.



Последнее исправление: CYB3R (всего исправлений: 1)

- файл подменять через mv

- перед -i logo.png добавить -loop 1 . Хотите знать, почему - читайте доки по демуксеру image2 на сайте ffmpeg.org

Krieger_Od ★★
()
Ответ на: комментарий от Krieger_Od

Обязательно почитаю, хотя я уже дошел до этого (специально не стал указывать, что использовал этот параметр, чтобы удостоверится в решении)

-loop 1 - использую. Вот прямо сейчас с пылу с жару.

ffmpeg -rtsp_transport tcp -i "rtsp://admin:12345@xx.xxx.xx.x/h264" -loop 1 -i "/home/cam/iptv_broadcast/logo.png" -filter_complex "[0:v][1:v] overlay=25:25" -vcodec libx264 -b:v 3000k  -f mpegts "udp://@xxx.xxx.x.xxx:xxxx"
Гененириую новую подложку в файл logo1.png Подменяю файл.
mv -f logo1.png logo.png
Никаких изменений.

Версия FFmpeg

ffmpeg version N-67512-g73f74f6 Copyright (c) 2000-2014 the FFmpeg developers built on Nov 11 2014 09:23:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) configuration: --enable-gpl --enable-libx264 libavutil 54. 11.100 / 54. 11.100 libavcodec 56. 12.100 / 56. 12.100 libavformat 56. 12.103 / 56. 12.103 libavdevice 56. 2.100 / 56. 2.100 libavfilter 5. 2.103 / 5. 2.103 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100

crossassembler
() автор топика
... -filter_complex "[0:v][1:v] overlay=25:25, drawtext=textfile=/path/to/temperature:reload=1" ...

/path/to/temperature - файл с текстом надписи. reload=1 - файл перечитывается каждый кадр. Писать в файл нужно атомарно.

fopen ★★
()
Последнее исправление: fopen (всего исправлений: 1)
8 мая 2015 г.
Ответ на: комментарий от crossassembler

Наложение картинки на поток

Добрый день! Столкнулся с такой же проблемой. Можно всё таки на лету накладывать png-картинку, а не текст на эту картинку? То есть своеобразная заглушка на некоторые куски потока (которые определяются на лету) - картинка то прозрачная, то нет. Спасибо.

Tween
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.