我尝试使用相机模块将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
你为什么认为浏览器将播放RTP流? HTML5视频的支持格式范围有限,H.264 over RTP不是其中之一。 –