2015-08-28 90 views
3

我使用RTP和ffmpeg的流媒体视频直播使用此命令可以打开SDP文件H265:VLC:无法使用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上传输。有什么建议么?

+0

支持'HEVC'了'在这两个FFmpeg的(https://ffmpeg.org/pipermail/ffmpeg-devel/2014-September/163213.html)和VLC显然加入RTP'(HTTPS ://patches.videolan.org/patch/4313/)。 'ffmpeg'输出不能用'ffplay'来播放,所以也许会有某种回归。我删除了我的答案,因为很明显版本不是问题。 – aergistal

+0

您是否尝试使用我发布的命令?并复制该场景。 – Anakooter

+0

是的,'ffplay'失败,出现'[hevc @ 0x7fe4f80049e0]解析NAL单元#0时出错。 [hevc @ 0x7fe4f80049e0] PPS ID超出范围:00KB sq = 0B f = 0/0 [sdp @ 0x7fb1a40008c0]流0解码失败 [sdp @ 0x7fb1a40008c0]找不到流0的编解码参数(视频:hevc,无):未指定大小 考虑增加“分析”和“探针大小”选项的值 ffmpeg。SDP:找不到编解码器参数 ' – aergistal

回答

1

我猜问题是因为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.sdpVLC ffmpeg.sdp(除去第一线的ffmpeg.sdpSDP:

+0

V = 0 O = - 0 0 IN IP4 127.0.0.1 S =序号名称 c = IN IP4 127.0.0.1 T = 0 0 A =工具:libavformat流56.36。 100 m = video 49170 RTP/AVP 96 a = rtpmap:96 H265/90000 – Anakooter

+0

我仍然无法播放它。 – Anakooter

+0

无论如何我都没有为我工作,并且从文件中移除“SDP:”。你可以与我分享你的VLC版本吗? – Anakooter

1

不要拍我得一无是处,因为我不使用Vlc的这种类型的东西,但我记得,得到的Gstreamer与H265的工作,我有要安装:
libde265gstreamer1.0-libde265
还有一个vlc-plugin-libde265列在ubuntu存储库中。
见:https://github.com/strukturag/libde265

+0

我已经在使用这个版本。谢谢:) – Anakooter