我尝试从带有摄像头模块的 Raspberry Pi 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=true
ans收到UDP数据包。所以我向前研究并发现了这一点:
https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/ https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/
现在很明显,我需要 2 个端口,其中一个用于传输数据并建立 RTP 控制协议。但是我不知道如何使用 gstreamer 做到这一点。
最糟糕的是当我跑步时:
gst-inspect-1.0 | grep -i rtcp
我什么也没得到。
如何使用 RTP 协议使用 gstreamer-1.0 启动视频流到网页内的视频标签?
update
Using 视频测试源作为 gstreamer videosouce 并删除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