2016-07-09 115 views
1

我嘗試使用相機模塊將Raspberry Pi 3中的H264 RTP流製作爲視頻標籤。H264與gstreamer-1.0的RTP流

使用下面的代碼來啓動流

raspivid -t 0 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | \ 

gst-launch-1.0 -v fdsrc \ 
      ! h264parse \ 
      ! rtph264pay \ 
      ! gdppay \ 
      ! udpsink host="192.168.0.11" port=5000 

然後我提供了一個簡單的網頁與視頻標籤:

<video id="videoTag" src="h264.sdp" autoplay> 
     <p class="warning">Your browser does not support the video tag.</p> 
</video> 

在src引用以下SDP文件:

v=0 
m=video 5000 RTP/AVP 96 
c=IN IP4 192.168.0.51 
a=rtpmap:96 H264/90000 

當我加載網頁沒有任何反應,並且js控制檯完全是空的。

於是,我就查看與VLC流,並得到了以下錯誤:

[00007efd80c03ea8] es demux error: cannot peek 
[00007efd80c03ea8] es demux error: cannot peek 
[00007efd80c03ea8] live555 demux error: no data received in 10s, aborting 

我認爲沒有當年UDP通信可言,所以我從遠程計算機進行了測試:

gst-launch-1.0 udpsrc port=5000 \ 
       caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \ 
       ! fakesink dump=true 

ans收到UDP數據包。所以,我研究着,發現這個:

https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/

現在很顯然,我需要2個端口一個數據流,並建立RTP控制協議。然而,我不知道如何用gstreamer做到這一點。

最糟糕的是,當我運行:

gst-inspect-1.0 | grep -i rtcp 

我什麼也沒得到。

如何用gstreamer-1.0將視頻流啓動到使用RTP協議的網頁內的視頻標籤?

更新

使用videotestsrc作爲gstreamer的videosoruce和除去gdppay(它引起無效RTP有效載荷的錯誤),我能夠從遠程客戶端與VLC查看視頻流和與此gstreamer的代碼:

gst-launch-1.0 udpsrc port=5000 \ 
       caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \ 
       ! rtph264depay \ 
       ! avdec_h264 \ 
       ! autovideosink 
+0

你爲什麼認爲瀏覽器將播放RTP流? HTML5視頻的支持格式範圍有限,H.264 over RTP不是其中之一。 –

回答

0

首先,你需要提供更多的信息:該瀏覽器(Chrome的嘗試,也Safari是說有更好的流支持)..

對於SDP我想你錯過了它的h264的信息? 是的,gdppay僅適用於內部「僅限GStreamer」流(gdp表示「GStreamer數據協議」,其他人不瞭解:))。

如果您真的想讓GStreamer傳輸RTSP,您可以使用gstreamer rtsp server implementation - 這是單獨的回購,並且包含在Ubuntu的某些軟件包中。

如果你只需要rtp,你正在做的正確 - 正如你看到這種方法適用於例如vlc ..但是什麼讓你認爲sdp將在HTML5中工作(我只是問我沒有及時更新在這方面的信息)?

你也可以用netcat測試它 - 它適用於這類調試。 你可以僞造一個RTP客戶這樣說:

nc -u -l 5000 

這將傾倒交通的。

我讀here有與HTML5 RTP/RTSP的問題,但誰知道也許現在已經工作..

你可以嘗試HLS - 這通常用於流媒體,並具有更好的支持INT GStreamer這幾天1.6和更多版本..(提示:使用hlssink)。

這裏有一些JS處理HLS: https://github.com/dailymotion/hls.js

您也可以嘗試OGG/Vorbis格式/ Theora格式和這樣的東西(聽起來很瘋狂,但你可以給它一個鏡頭,我讀的地方,它適合流媒體)..