Python免费的家庭视频监控系统(2) 之 用Python来代替ffmpeg来推送视频流?

本文介绍了使用ffmpeg和nginx搭建的树莓派家庭视频监控系统,但存在3-5秒延迟问题。作者建议,若追求低延迟,购买IP摄像头更为合适,而非投入大量时间和精力优化现有方案。目前系统已完成,但延迟问题限制了其实时性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import subprocess as sp
import cv2 as cv
import subprocess

rtmpUrl = "rtmp://localhost:1935/live/home"
camera_path = 0
cap = cv.VideoCapture(camera_path)

# Get video information
fps = int(cap.get(cv.CAP_PROP_FPS))
width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))

# ffmpeg command
command = ['ffmpeg',
        '-y',
        '-f', 'rawvideo',
        '-vcodec','rawvideo',
        '-pix_fmt', 'bgr24',
        '-s', "{}x{}".format(width, height),
        '-r', str(fps),
        '-i', '-',
        '-c:v', 'libx264',
        '-pix_fmt', 'yuv420p',
        '-preset', 'ultrafast',
        '-f', 'flv',
        rtmpUrl]

# 管道配置
p = sp.Popen(command, stdin=sp.PIPE)

# read webcamera
while(cap.isOpened()):
    ret, frame = cap.read()
    frame_queue.put(frame)
    if not ret:
        print("Opening camera is failed")
        break

    # process frame
    # your code
    # process frame

    # write to pipe
    if frame_queue.empty() != True:
        frame_new = frame_queue.get()
    p.stdin.write(frame_new.tostring())

总结

初始目的:构建一套家用的视屏监控系统
可以支持如下功能:

  • 录像
  • 拍照
  • 手机端、电脑端实时查看视频
  • 外网可以实时查看视屏、已存储视频

现状:
用ffmpeg、nginx推rtmp视屏流,用vlc软件、手机app去看rtmp视频流。
1、会有3~5秒的卡顿,还是在局域网、性能较好的笔记本上运行,如果是树莓派延迟估计会更多。
2、如果继续优化延迟,估计要投入更多的时间和精力。

如果想实现初始目的,完全可以通过购买一个100多块钱的IP 摄像头来解决这个需求。
如果要是我自己搞的话:
树莓派 + 摄像头 : 会有延迟、需要自己写摄像头的存储、推流代码。
说白了吧,延迟太严重了,与其花时间解决难搞的延迟问题,不如买个IP摄像头。

【综上所述】:
1、已经完成整套系统,但是会有3~5秒的延迟。
2、不再花时间和精力解决延迟问题,如果后期真的需要,购买IP摄像头。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值