我正在做我的第一个大覆盆子pi项目,遇到了我无法逾越的障碍。我正在使用REST API从Internet上的网站远程控制我的树莓派,现在我想添加视频流功能(没什么花哨的功能),但是我在互联网上找不到有关此内容的信息。我的问题是我无法弄清楚如何传输帧(据我了解,它必须是jpeg图像而不是真正的视频)以及如何在网页上实际显示它们。到目前为止,我只能在localhost中查看流,并且我不知道如何将其发布到Internet虚拟主机上的网页。
我尝试使用python这样的请求库发送帧:
img_for_post = stream.read()
data = {'image': img_for_post, 'name':'webcan_stream'}
response = requests.post(url='http://my-website-on-the-internet.com/index.php?stream', data=data)
但是它似乎没有发送图像。我正在尝试使用rest api,因为我不能(也不想)使用端口转发。
根据我的了解,它必须是jpeg图像而不是真实的视频
不,相反。你在哪里读的?发送JPEG帧的效率非常低。如果由于某种原因必须使用JPEG,请至少发送MJPEG流。
根据您的需求,实际上很简单,只需启动FFmpeg并通过HTTP直接将其通过管道传输到您的浏览器客户端即可。我不记得我曾经使用过的确切命令行,而是尝试如下操作:
ffmpeg -i [your source] -f webm -
这将从STDOUT输出WebM视频,然后在您的Python脚本中,将数据通过管道传输到HTTP客户端。
在客户端上,他们只能使用普通的视频标签:
<video src="https://example.com/stream" preload="none"></video>
其他执行此操作的方法包括DASH / HLS,它对更多用户或使用CDN很有用,如果需要低延迟,则可以使用WebRTC。