2015-08-28 348 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