我将Raspberry Pi 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
Camera类
class Camara:
cap = None
out = None
@staticmethod
def set_stream():
try:
if Camara.cap:
logging.debug("Camera busy")
Camara.cap.release()
Camara.cap = cv2.VideoCapture(0)
except Exception as exception:
logging.error("Error setting up camera: " + exception)
@staticmethod
def get_frame():
ret1, frame = Camara.cap.read()
ret2, jpeg = cv2.imencode('.jpg', frame)
return jpeg.tobytes()
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>
答案 0 :(得分:0)
我同意bunnmatt ..如果您不在网络中,那么您需要将其添加到防火墙。
在本地网络上,如果您转到http://192.168.1.1,则会转到路由器的管理页面。从那里,您可以设置规则,将此应用程序/端口公开给外部世界。 然后,要访问它,您可以在浏览器中输入您家的IP,然后以这种方式访问它。
另一种方法(如果您无法访问路由器管理员页面)是使用Ngrok:https://ngrok.com/,这会处理代理内容,并通过http或https公开它。
警告。在网络外部暴露端口会让您受到攻击。在开始更改路由器中的大量设置之前,一定要多做一些谷歌搜索。
祝你好运!答案 1 :(得分:0)
如果router model
,server (Apache/NginX/Node)
等信息您将收到更准确的信息。收集的信息仅为RPi3和实施语言(与此问题无关)。
正如其他人指出的那样,您正在寻找的解决方案是将您的本地端口暴露给公众。
假设您的流可以在本地网络的http://192.168.0.1:8080
访问。您需要为路由转发/虚拟服务器配置路由器。
你的目标是......
port 80
)公开给公众
以下解决方案是通过noip.com(DNS提供商) - 免费版本每30天需要确认一次。
mycam.ddns.net:8080
您的本地网络IP到外部世界(由路由器生成)会间歇性地发生变化。 DNS允许奇怪的数字,例如今天的175.143.141.29
和明天的不同,就像域名一样使用(例如:mycam.ddns.net
)
当您的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。但是,no-ip DUC可能会为您执行此操作,因为它会告诉服务器当前连接的IP。
如果您可以公开访问它,其他人也可以这样做。继续常识。
由于各种设置可能性,请阅读有关端口转发/虚拟服务器的更多信息 此处有更多RPi设置示例:https://pimylifeup.com/raspberry-pi-port-forwarding/