VLC: невозможно открыть файл SDP для H265 с помощью FFMPEG

Я транслирую видео в реальном времени, используя rtp и ffmpeg, используя эту команду:

ffmpeg -re -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx265 -tune zerolatency -s 320x240 -preset ultrafast -pix_fmt yuv420p -r 10 -strict experimental -f rtp rtp://127.0.0.1:49170 > ffmpeg.sdp

Сгенерированный файл sdp:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 56.36.100
m=video 49170 RTP/AVP 96
a=rtpmap:96 H265/9000

VLC дает следующую ошибку:

Формат 'file:///home/username/ffmpeg.sdp' не может быть обнаружен. Посмотрите на журнал для деталей.

Терминал выдает следующую ошибку:

[0xaf801010] ps demux error: cannot peek
[0xaf801010] mjpeg demux error: cannot peek
[0xaf801010] mpgv demux error: cannot peek
[0xaf801010] ps demux error: cannot peek
[0xb6d00618] main input error: no suitable demux module for `file/:///home/username/ffmpeg.sdp'

Если я просто изменю libx265 -> libx264 в команде и H265 -> H264, поток будет работать отлично.

Однако мне нужно для потоковой передачи на H265. Какие-либо предложения?

2 ответа

Я предполагаю, что проблема в том, что VLC (или ffplay) не получает VPS,SPS,PPS фреймы. Чтобы начать декодирование потока H265, вам нужны VPS,SPS,PPS и кадр IDR.

Чтобы попросить libx265 повторять эти фреймы конфигурации перед каждым фреймом IDR, вы можете добавить его в свою потоковую команду:

-x265-params keyint=30:repeat-headers=1

Тогда команда становится:

ffmpeg -re -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx265 -tune zerolatency -x265-params keyint=30:repeat-headers=1 -s 320x240 -preset ultrafast -pix_fmt yuv420p -r 10 -strict experimental -f rtp rtp://127.0.0.1:49170 > ffmpeg.sdp

Он генерирует следующий файл ffmpeg.sdp:

SDP: 
v=0 
o=- 0 0 IN IP4 127.0.0.1 
s=No Name c=IN IP4 127.0.0.1 
t=0 0 
a=tool:libavformat 56.36.100 
m=video 49170 RTP/AVP 96 
a=rtpmap:96 H265/90000

Я смог отобразить поток с ffplay ffmpeg.sdp а также VLC ffmpeg.sdp (удаление первой строки SDP: из ffmpeg.sdp)

Не стреляйте в меня в огне, так как я не использую VLC для этого типа вещей, но я напоминаю, что для того, чтобы Gstreamer работал с H265, мне пришлось установить:
libde265 а также gstreamer1.0-libde265
Также есть vlc-plugin-libde265 перечислены в репозиториях Ubuntu.
Смотрите: https://github.com/strukturag/libde265

Другие вопросы по тегам