|
|
默认已经连接好摄像头,并测试摄像头已经能正常工作. 摄像头设置参考链接:树莓派系列摄像头使用介绍 - 树莓派平台 - 微象电子
方案一:MediaMTX(最均衡、零代码方案)
1、安装:在Pi上分别执行以下命令,下载并解压MediaMTX。
- # 前往GitHub Releases页面,找到最新的linux_armv7版本,留意最新的版本号(例如 v1.12.2),替换下方代码中的 1.12.2 为自己获取到的最新版本号
- wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_armv7.tar.gz
- tar -xzvf mediamtx_v1.12.2_linux_armv7.tar.gz
复制代码 2、配置:编辑解压出的 mediamtx.yml 文件,在文件末尾添加以下配置,开启低延迟的WebRTC模式及相应的API功能。
- # 在文件末尾添加
- paths:
- cam:
- source: rpiCamera
- rpiCameraBitrate: 5000000 # 5Mbps码率,可按需调整
复制代码 3、运行:执行 ./mediamtx。浏览器输入 http://<你的树莓派IP地址>:8889/cam 即可看到你的低延迟视频流。
方案二:PiCamera2 Web Stream(Python灵活方案)
如果你希望用Python来控制摄像头逻辑,这是一个不错的选择。它基于PiCamera2库,能提供一个轻量级的HTTP视频流,延迟也相对较低
1、安装依赖:
- sudo apt install -y python3-libcamera python3-picamera2 python3-opencv python3-numpy python3-flask
复制代码 2、编写代码:创建一个Python脚本,例如 web_stream.py,并粘贴以下代码。这是一个简单的MJPEG流服务器。
- import io
- import picamera2
- import time
- import libcamera
- from flask import Flask, Response, render_template_string
- app = Flask(__name__)
- # HTML 页面,直接嵌入在Python中
- HTML_PAGE = """
- <!DOCTYPE html>
- <html>
- <head><title>PiCamera2 Stream</title></head>
- <body>
- <img src="{{ url_for('video_feed') }}" style="width:100%;">
- </body>
- </html>
- """
- class VideoStream:
- def __init__(self):
- self.picam2 = picamera2.Picamera2()
- video_config = self.picam2.create_video_configuration(
- main={"size": (1280, 720)},
- controls={"FrameRate": 30}
- )
- self.picam2.configure(video_config)
- self.picam2.start()
- time.sleep(1) # 给摄像头一点启动时间
- def get_frame(self):
- data = io.BytesIO()
- self.picam2.capture_file(data, format='jpeg')
- data.seek(0)
- return data.read()
- stream = VideoStream()
- def gen_frames():
- while True:
- frame = stream.get_frame()
- yield (b'--frame\r\n'
- b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
- time.sleep(0.03) # 大约30fps
- @app.route('/')
- def index():
- return render_template_string(HTML_PAGE)
- @app.route('/video_feed')
- def video_feed():
- return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port=5000, threaded=True)
复制代码 3、运行与访问:执行 python3 web_stream.py,在浏览器输入 http://<你的树莓派IP地址>:5000 即可看到画面。
|
|