找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 90|回复: 0

树莓派摄像头视频如何在局域网电脑的浏览器上实时查看?

[复制链接]

48

主题

0

回帖

376

积分

管理员

积分
376
发表于 2026-4-30 11:55:43 | 显示全部楼层 |阅读模式

默认已经连接好摄像头,并测试摄像头已经能正常工作.   摄像头设置参考链接:树莓派系列摄像头使用介绍 - 树莓派平台 - 微象电子

方案一:MediaMTX(最均衡、零代码方案)
1、安装:在Pi上分别执行以下命令,下载并解压MediaMTX。
  1. # 前往GitHub Releases页面,找到最新的linux_armv7版本,留意最新的版本号(例如 v1.12.2),替换下方代码中的 1.12.2 为自己获取到的最新版本号
  2. wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_armv7.tar.gz
  3. tar -xzvf mediamtx_v1.12.2_linux_armv7.tar.gz
复制代码
2、配置:编辑解压出的 mediamtx.yml 文件,在文件末尾添加以下配置,开启低延迟的WebRTC模式及相应的API功能。
  1. # 在文件末尾添加
  2. paths:
  3.   cam:
  4.     source: rpiCamera
  5.     rpiCameraBitrate: 5000000 # 5Mbps码率,可按需调整
复制代码
3、运行:执行 ./mediamtx。浏览器输入 http://<你的树莓派IP地址>:8889/cam 即可看到你的低延迟视频流。

方案二:PiCamera2 Web Stream(Python灵活方案)
如果你希望用Python来控制摄像头逻辑,这是一个不错的选择。它基于PiCamera2库,能提供一个轻量级的HTTP视频流,延迟也相对较低
1、安装依赖:
  1. sudo apt install -y python3-libcamera python3-picamera2 python3-opencv python3-numpy python3-flask
复制代码
2、编写代码:创建一个Python脚本,例如 web_stream.py,并粘贴以下代码。这是一个简单的MJPEG流服务器。
  1. import io
  2. import picamera2
  3. import time
  4. import libcamera
  5. from flask import Flask, Response, render_template_string

  6. app = Flask(__name__)

  7. # HTML 页面,直接嵌入在Python中
  8. HTML_PAGE = """
  9. <!DOCTYPE html>
  10. <html>
  11. <head><title>PiCamera2 Stream</title></head>
  12. <body>
  13.     <img src="{{ url_for('video_feed') }}" style="width:100%;">
  14. </body>
  15. </html>
  16. """

  17. class VideoStream:
  18.     def __init__(self):
  19.         self.picam2 = picamera2.Picamera2()
  20.         video_config = self.picam2.create_video_configuration(
  21.             main={"size": (1280, 720)},
  22.             controls={"FrameRate": 30}
  23.         )
  24.         self.picam2.configure(video_config)
  25.         self.picam2.start()
  26.         time.sleep(1) # 给摄像头一点启动时间

  27.     def get_frame(self):
  28.         data = io.BytesIO()
  29.         self.picam2.capture_file(data, format='jpeg')
  30.         data.seek(0)
  31.         return data.read()

  32. stream = VideoStream()

  33. def gen_frames():
  34.     while True:
  35.         frame = stream.get_frame()
  36.         yield (b'--frame\r\n'
  37.                b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
  38.         time.sleep(0.03) # 大约30fps

  39. @app.route('/')
  40. def index():
  41.     return render_template_string(HTML_PAGE)

  42. @app.route('/video_feed')
  43. def video_feed():
  44.     return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

  45. if __name__ == '__main__':
  46.     app.run(host='0.0.0.0', port=5000, threaded=True)
复制代码
3、运行与访问:执行 python3 web_stream.py,在浏览器输入 http://<你的树莓派IP地址>:5000 即可看到画面。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们|东莞市微象电子 ( 粤ICP备2023103692号-2 )

GMT+8, 2026-6-2 13:58 , Processed in 0.068551 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表