#encoding #ffmpeg #streaming #vlc
#кодирование #ffmpeg #потоковая передача #vlc
Вопрос:
У меня есть скрипт на python, который записывает изображения (массивы numpy) на стандартный вывод. Я хочу сохранить эти кадры и закодировать их h264 с помощью FFMPEG, используя графический процессор, а затем передать его vlc для передачи потока по http.
Здесь есть рабочий пример моего приложения, без части кодировки h264:
python3 script.py | ffmpeg -r 24 -s 1920x1080 -f rawvideo -i - -vcodec copy -f avi - | cvlc --demux=rawvideo --rawvid-fps=25
--rawvid-width=1920 --rawvid-height=1080 --rawvid-chroma=RV24 - --no-audio --sout '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:standard{access=http{user=pippo,pwd=pluto,mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:10001/}'
Теперь у меня возникли проблемы с написанием рабочих каналов, чтобы делать то, что мне нужно.
Здесь канал, над которым я на самом деле работаю, процесс FFMPEG управляется графическим процессором, но VLC не может правильно управлять потоком, я полагаю, на самом деле я могу подключиться к VLC из другого экземпляра VLC, используемого в качестве клиента, но затем я получил сообщение об ошибке, при котором VLC-клиент не может открыть MRL.
Здесь канал:
python3 script.py | ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -f rawvideo -s 1920x1080 -i - -c:a copy -c:v h264_nvenc -f h264 - | cvlc --demux=rawvideo --rawvid-fps=25 --rawvid-width=1920 --rawvid-height=1080 --rawvid-chroma=RV24 - --no-audio --sout '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:standard{access=http{user=pippo,pwd=pluto,mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:10001/}'
Я не понимаю, как установить параметры vlc для управления входящим потоком. Я также мог допустить ошибки в канале ffmpeg, любое предложение приветствуется.
Комментарии:
1. пожалуйста, поделитесь журналами / сообщениями об ошибках
2. У меня нет ошибок на стороне сервера, но на стороне клиента, когда я пытаюсь подключиться, я получаю это сообщение
Your input can't be opened: VLC is unable to open the MRL 'http://x.x.x.x:10001/'. Check the log for details.
, однако оно завершается с ошибкой после ввода имени пользователя и пароля3. С помощью этого канала
python3 script.py | ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -f rawvideo -pix_fmt rgb24 -s:v 1920x1080 -r 24 -i - -c:v h264_nvenc -f h264 - | cvlc stream:///dev/stdin --sout "#transcode{vcodec=mjpg,vb=2500,fps=24,acodec=none}:standard{access=http{user=pippo,pwd=pluto,mime=multipart/x-mixed-replace;boundary=7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:8554/}" :demux=h264
я также могу считывать кадры с клиента. Последний шаг — удалить перекодировку vlc, которая вызывает у меня ту же проблему при подключении