2016-07-04 549 views
0

我有一臺服務器廣播通過GStream具有以下GST-launch命令一個USB攝像頭所生成的視頻:VLC - 如何發揮MJPEG流

gst-launch-1.0 v4l2src ! video/x-raw,width=352,height=288 ! jpegenc! rtpjpegpay ! udpsink host=239.255.12.52 port=5004 

現在我需要一個客戶端播放廣播與VLC。我試着打了以下內容:

rtsp://239.255.12.52:5004 

但我只得到了以下錯誤:

SDP required: 
A description in SDP format is required to receive the RTP stream. Note that rtp:// URIs cannot work with dynamic RTP payload format (96). 

隨後我試圖找到一個SDP文件,可以幫助我播放流。我試過這個:

v=0 
c=IN IP4 239.255.12.52 
t=0 
m=video 5004 RTP/AVP 96 
a=rtpmap:96 JPEG/90000 

但它沒有工作。可見光通信日誌只是說:

es error: cannot peek 
es error: cannot peek 
... 

我知道流工作,因爲我可以使用的GStreamer用下面的命令來播放:

gst-launch-1.0 udpsrc uri="udp://239.255.12.52:5004" ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink 

但我需要它不VLC播放的GStreamer。有任何想法嗎? 謝謝!

+0

這不是rtsp,但rtp流..但你可以在mpeg ts中存儲元數據,因此不需要sdp - 檢查[this](http://stackoverflow.com/a/35148868/3876138)回答..但你需要使用h264 ..然後你會打開在vlc'udp://@239.255.12.52:5004' – nayana

+0

嗨@otopolsky!我也嘗試使用rtp://239.255.12.52:5004播放流。它也沒有工作。問題是使用h264,正如我們在你提到的答案中所討論的,在流中產生2-3秒的延遲是不可接受的。我發現使用gstreamer並使用mjpeg流,相機的延遲時間不到一秒鐘。但那是如果我使用gst-launch命令在客戶端播放該流。我不能使用。如果我使用mjpeg,用vlc播放流是不可能的?謝謝! – DaveCode

+0

你需要適當的sdp文件,它應該工作 - 如果你有懷疑將gstreamer管道保存到文件中(將它複製到mp4和filesrc中)並檢查它是否可在vlc中播放..並且它的rtp .. rtsp非常複雜,而你將需要有rtsp服務器(有gstreamer變種[這裏](https://gstreamer.freedesktop.org/modules/gst-rtsp-server.html)).. – nayana

回答

0

如何對這種做法:

服務器(GStreamer的):

gst-launch-1.0 v4l2src ! image/jpeg,width=1280,height=720 ! tcpserversink host=###.###.###.### 

客戶端(VLC):

tcp://###.###.###.###:4953 

此外,在VLC GUI,緩存設置爲0毫秒。 (:network-caching = 0)

在這種方法中,服務器端沒有額外的編碼(jpegenc不需要),因爲相機本身可以生成.jpg圖像(這在網絡攝像機中很常見)。也沒有muxing需要。

在客戶端,延遲很小。

它不是組播,但也許這對你沒問題?