我尝试从一个带有相机模块的Raspberry 3到一个视频标签生成一个H264 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=trueans接收UDP数据包。所以我研究了一下,发现:
https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/
现在很明显,我需要两个端口,一个来流数据,并建立RTP控制协议。但是,我不知道如何使用gstreamer来实现它。
最糟糕的是当我跑的时候:
gst-inspect-1.0 | grep -i rtcp我什么也得不到。
如何使用gstreamer-1.0启动视频流到使用RTP协议的网页内的视频标记?
更新
使用视频this作为gstreamer视频caused并删除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发布于 2016-07-11 07:30:27
首先,您需要提供更多的信息:哪个浏览器(尝试chrome,也可以说safari有更好的流支持)。
对于SDP,我认为您错过了它的h264的信息吗?是的,gdppay仅适用于内部"GStreamer专用“流(gdp意味着"GStreamer数据协议”,其他人没有人理解:)。
如果您真的希望GStreamer流RTSP,您可以使用gstreamer rtsp服务器实现 -这是在单独的回购,并被纳入一些包在Ubuntu中,例如。
如果您只想要rtp,那么您正在正确地执行它--正如您所看到的,这种方法适用于例如vlc。但是,是什么使您认为sdp将在HTML5中工作(我只是问我没有关于这方面的最新信息)?
您也可以用netcat来测试它--这对于这种调试是很好的。您可以这样伪造rtp客户端:
nc -u -l 5000 这会把交通倒掉。
我读过这里,HTML5中的rtp/rtsp有问题,但是谁知道现在它可能已经起作用了。
您可以尝试hls -它通常用于流,并有更好的支持int GStreamer现在1.6和进一步的版本..。(提示:使用hlssink)。
这里有一些js用于处理hls:https://github.com/dailymotion/hls.js
你也可以尝试ogg/vorbis/theora之类的东西(听起来很疯狂,但你可以试一试,我在某个地方读到它适合流媒体)。
https://stackoverflow.com/questions/38287334
复制相似问题