我试图在HTML5网页上提供Raspberry相机的直播。由于树莓在防火墙内部,我想将其流式传输到外部服务器,并且该服务器应该能够将流提供给网页。
我能够从Raspberry获取流并使用Gstreamer将其流式传输到外部服务器,如下所示:
莓:
sudo raspivid -t 0 -b 5500000 -n -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink port=5000 host=EXT_SERVER_IP
或使用videotest信号代替Raspberry:
gst-launch-1.0 -v videotestsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink port=5000 host=EXT_SERVER_IP
外部服务器(显示在显示器上):
gst-launch-1.0 -v udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink
或,外部服务器(在端口5001上使用tcpserver使流可用):
gst-launch-1.0 -v udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! avdec_h264 ! videoconvert ! tcpserversink host=EXT_SERVER_IP port=5001
现在我有一些问题:
我需要将流作为兼容不同浏览器的格式(但我很乐意让它在Chrome中开始工作)。
我需要在某些指定端口上使用某些http请求/响应将流提供给网页。 Gstreamer似乎无法做到这一点。
使用Raspberry中的gstreamer到外部服务器的传输速度很快,几乎没有滞后,这也是Web演示的情况。此应用程序的滞后时间必须低于0.5秒(因为语音通过其他媒体传输而没有任何延迟)。
我的网页目前看起来像这样:
<video id="video" autoplay="autoplay" controls>
<source src="http://EXT_SERVER_IP:5005" type="video/webm" codecs="vp8.0, vorbis">
<source src="http://EXT_SERVER_IP:5006" type="video/ogg" codecs="theora, vorbis">
<source src="http://EXT_SERVER_IP:5007" type="video/mp4" codecs="avc1.4D401E, mp4a.40.2">
<source src="http://EXT_SERVER_IP:5008" type="html" codecs="vp8.0, vorbis">
You browser doesn't support element video.
</video>
任何帮助将不胜感激!
- 更新 -
这个项目似乎是一个良好的开端。
https://github.com/jacksonliam/mjpg-streamer
但是我仍然需要在路由器/防火墙之外提供流,并且希望通过将流传输到外部服务器来实现。 我知道portforwarding是一个选项,但是这需要摄像机具有静态内部ip和路由器配置,而且我不确定这是否可行。