本地n外的树莓视频流

2024-05-14 00:57:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有我的树莓皮3B流式视频到我的本地网络。在

我的问题是:我想从任何地方访问流,而现在我只能在连接到同一网络的情况下从浏览器观看。在

这是我使用的代码。在

class Streamer:
   app = Flask(__name__, template_folder='../resources/templates')
    stream = None

    @staticmethod
    @app.route('/')
    def index():
        return render_template('streaming.html')

    @staticmethod
    def gen():
        while True:
            frame = Camara.get_frame()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

    @staticmethod
    @app.route('/video_feed')
    def video_feed():
        return Response(Streamer.gen(),
                        mimetype='multipart/x-mixed-replace; boundary=frame')

    @staticmethod
    def start():
        Camara.set_stream()
        Streamer.stream = Process(target=Streamer.app.run, args=('0.0.0.0', 5000))
        Streamer.stream.start()

    @staticmethod
    def shutdown():
        if Streamer.stream:
            Streamer.stream.terminate()
            Streamer.stream.join()
            Streamer.stream = None
            return True
        else:
            return False

相机类

^{pr2}$

html模板

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>YoloDoor Stream</title>
    </head>
    <body>
        <img id="bg" src="{{ url_for('video_feed') }}">
    </body>
</html>

Tags: nonetrueappstreamreturndefhtmlvideo
2条回答

我同意邦马特的观点。。如果您在网络之外,则需要将其添加到防火墙中。在

在本地网络上,如果转到http://192.168.1.1,则会转到路由器的管理页。从那里你可以设置一个规则来向外界公开这个应用程序/端口。 然后要访问它,你需要在浏览器中输入你房子的IP,然后通过这种方式访问它。在

另一种方法(如果您无法访问路由器管理页面)是使用Ngrok:https://ngrok.com/,它处理代理内容,并将通过http或https公开它。。在

一句警告。。暴露网络外部的端口会使您受到攻击。在你开始改变路由器的很多设置之前,一定要多做一点谷歌搜索。在

祝你好运!在

如果像router modelserver (Apache/NginX/Node)这样的信息,您将收到非常准确的信息。收集的信息只是RPi3和实现语言(与此问题无关)。在

正如其他人所指出的,您正在寻找的解决方案是将您的本地端口公开给公众。在

假设您的流可以在本地网络上的http://192.168.0.1:8080访问。您需要为端口转发/虚拟服务器配置路由器。在

你的目标是。。在

  • 分配静态IP并确定端口号到端口转发
  • 将基本身份验证添加到根目录(read on Apache Basic Auth添加基本登录提示)
  • 通过DNS将IP(和端口号,如果与port 80不同)公开给public

Solution below is via noip.com (DNS provider) - free version require confirmation every 30 days.

  1. 创建no-ip.com帐户以拥有主机名(例如:mycam.ddns.net)在
  2. 设置no-ip DUC (Dynamic Update Client)以便主机名与本地网络IP相符。在
  3. 成功的安装将允许示例场景通过访问mycam.ddns.net:8080工作
  4. 完成

是否需要DNS?

您的本地网络IP到外部世界(由您的路由器产生)间歇性更改。DNS允许今天使用175.143.141.29这样的奇怪的数字,明天就不同了(例如:mycam.ddns.net

是否需要本地静态IP?

当您的DHCP被更新(路由器重新启动,不同的设备注销和登录),您的RPi今天使用的IP(例如:192.168.0.1)可能在下一次更新时192.168.0.9。在

静态IP允许将192.168.0.1保留给device MAC address (another form of network identity),因此在将来的更新中它总是指向同一个设备。在

虽然较新的路由器更聪明地为这种设备保留这样的IP更长的时间。然而,没有ip DUC可以为您这样做,因为它告诉服务器它当前连接的ip。在

安全

如果你可以公开访问它,其他人也可以这样做。从常识出发。在

替代设置

由于各种设置可能性,请阅读有关端口转发/虚拟服务器的更多信息。
更多RPi设置示例:https://pimylifeup.com/raspberry-pi-port-forwarding/

相关问题 更多 >