2010-06-28 226 views
7

如果您可以幫我解決H264流式傳輸問題,並且我一直在努力解決數週,我將非常感激。通過從Live555到VLC的RTP流式傳輸H.264視頻

我需要從Live555(在Linux機器上)將H264視頻流傳輸到VLC媒體播放器(在Windows機器上)。 使用RTSP它可以很好地工作,但我需要使用RTP而不使用RTSP,而使用RTP我不會看到視頻。 VLC甚至不認識到該流是H264。

這是通過RTSP(配置的作品)傳送的SDP文件:

v=0 
o=- 1277647151953158 1 IN IP4 190.40.14.100 
s=Session streamed by "testH264VideoAudioStreamer" 
i=test-h264-mux.mpg 
t=0 0 
a=tool:LIVE555 Streaming Media v2007.05.24 
a=type:broadcast 
a=control:* 
a=source-filter: incl IN IP4 * 190.40.14.100 
a=rtcp-unicast: reflection 
a=range:npt=0- 
a=x-qt-text-nam:Session streamed by "testH264VideoAudioStreamer" 
a=x-qt-test-inf:test-h264=mux.mpg 
m=video 8554 RTP/AVP 96 
c=IN IP4 190.40.15.63/7 
a=rtpmap:96 H264/90000 
a=fmtp:96 packetization-mode=1;profile-level-id=000042;sprop-parameter-sets=H264 
a=control:track1 

但是,如果我從RTSP切換到RTP,這是行不通的。我已經嘗試在VLC播放器中加載上述SDP文件,但它沒有幫助。

下面是一些VLC播放器0.8.6d的調試輸出:

main input debug: thread 4016 (input) created at priority 1 (input/input.c:265) 
main input debug: `rtp://@190.40.15.63:8554' gives access `rtp demux' `' path `@190.40.15.63:8554' 
main input debug: creating demux: access='rtp' demux='' path='@190.40.15.63:8554' 
main demuxer debug: looking for access_demux module: 0 candidates 
main demuxer warning: no access_demux module matched "rtp" 
main input debug: creating access 'rtp' path='@190.40.15.63:8554' 
main access debug: looking for access2 module: 6 candidates 
access_udp access debug: opening server=:0 local=190.40.15.63:8554 
main access debug: net: connecting to '[]:[email protected][190.40.15.63]:8554 
main access debug: looking for netrowk module: 1 candidate 
ipv6 access debug: 190.40.15.63: Host or service not found 
main access debug: using network module "ipv6" 
main access debug: removing network module "ipv6" 
main access debug: looking for netrowk module: 1 candidate 
ipv4 access debug: resolving 190.40.15.63:8554... 
ipv4 access debug: resolving :0... 
main access debug: using network module "ipv4" 
main access debug: removing network module "ipv4" 
main access debug: using access2 module "access_udp" 
main private debug: pre buffering 
access_udp access debug: no RTP header detected 
main input debug: creating demux: access='rtp' demux='' path='@190.40.15.63:8554' 
main demuxer debug: looking for demux2 module: 45 candidates 
ts demuxer warning: TS module discarded (lost sync) 
ffmpeg demuxer debug: detected format: mp3 

(可能有錯別字,因爲我不得不手動將它複製 - 不要問:))

在VLC 1.0.5我得到一個未知有效負載類型錯誤,並且由於未知的網絡堆棧錯誤,SDP無法加載。顯示的其他錯誤是不支持SDP連接信息液體分離器警告:無效的SDP

任何幫助將不勝感激!

謝謝

伊利亞

+1

一個快速評論:您的SDP文件在技術上是無效的。您應該使用base-64編碼SPS和PPS信息,用逗號分隔它,並將其附加到sprop參數集。你將它設置爲字符串「H264」,這肯定是錯誤的(儘管很常見,不幸的是)。 – kidjan 2010-11-19 15:33:05

回答

8

我不得不做的是使用,而不是直接打開流SDP文件。結果是隻有在使用RTSP時才傳輸SDP數據。在傳輸RTP時,我必須自己提供SDP文件。

所以我所做的就是:

  1. 流與RTSP(其工作方式方法),
  2. 使用Wireshark來
  3. 保存SDP記錄超過RTSP傳輸的SDP文件爲文本文件擴展名爲.sdp,
  4. 在VLC中,打開SDP文件而不是直接打開網絡流。

它做到了神奇!