【问题标题】:Streaming video from raspberri pi to the internet将视频从树莓派流式传输到互联网
【发布时间】:2019-12-26 00:27:54
【问题描述】:

我正在处理我的第一个大型树莓派项目,但遇到了无法逾越的障碍。我正在使用 REST API 通过互联网从网站远程控制我的树莓派,现在我想添加一个视频流功能(没什么花哨的),但我在互联网上找不到关于这个的信息。我遇到的问题是我无法弄清楚如何传输帧(据我所知,它必须是 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 来做,因为我不能(也不想)使用端口转发。

【问题讨论】:

    标签: python rest raspberry-pi video-streaming webcam


    【解决方案1】:

    据我所知,它必须是 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。

    【讨论】:

    • 嗨,我已经到了可以将视频从我的网络摄像头流式传输到网站的地步,但它仍然无法播放。在tring hls(延迟太长和太不稳定)之后,我决定简单地将.mov 或.mp4 或.mpeg 文件流式传输到ftp,然后播放它,因为它是由在我的计算机上运行的ffmpeg“创建”的。问题在于浏览器中无法播放的视频。当我下载它时它会播放,但不会在浏览器中播放。错误消息告诉我不支持 mime 类型。有什么建议吗?
    • @Muhaha 跳过 FTP,跳过 HLS,直接将输出流通过管道传输到客户端。这就是您需要做的所有事情。
    • 但是怎么做呢?什么管子我没听说过。 ffmpeg 文档中提到了它,但没有详细说明。
    • 在您的 Python 应用程序中,我不确定,我不是 Python 人。您需要做的就是从 STDOUT 读取。当您以- 作为输出文件名运行ffmpeg 时,您可以获取该STDOUT 流并在您的Python 应用程序中,将其通过管道传输到您发送回客户端的流中。或者,只是读写块......同样的事情。我不知道你是如何在 Python 中做到这一点的,但你肯定可以。
    • 我没有在 python 应用程序中流式传输。我正在使用 REST API。 python 应用程序只是向远程网站(客户端)发送 POST 和 GET 请求。如果我理解正确,Rest API 并不会真正做视频流。我认为通过将视频文件从 ffmpeg 保存到 ftp 服务器(客户端)上,然后将其从那里放置,因为它的创建不会让我不必学习 websockets。
    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多