【问题标题】:Speed up video playback from a networked device with camera or IP camera使用摄像头或 IP 摄像头加快网络设备的视频播放速度
【发布时间】:2017-07-28 06:25:50
【问题描述】:

我正在尝试在 python 中使用 flask api 从我的 raspberry pi 流式传输视频。这样我就可以在我的工作站上处理单个帧。就数据传输而言,它运行良好。然而,在客户端,读取帧的过程引入了 1-3 秒的延迟,这在实时应用程序中是不希望的。我可以在我的网络浏览器中观看视频播放,没有任何延迟,这证明我的树莓派和网络是无辜的。问题在于从字节流中读取单个帧的方法。关于在此类应用程序中消除延迟的任何想法。下面是我的客户端应用程序代码。可以在此处找到示例应用程序的完整源代码:https://github.com/shehzi-khan/video-streaming

import cv2
import urllib
import numpy as np

stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
bytes = ''
while True:
    bytes += stream.read(1024)
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\xff\xd9')
    if a != -1 and b != -1:
        jpg = bytes[a:b+2]
        bytes = bytes[b+2:]
        img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('Video', img)
        if cv2.waitKey(1) == 27:
            exit(0)

【问题讨论】:

    标签: python opencv flask raspberry-pi video-streaming


    【解决方案1】:

    主要建议:

    • 搜索结束标记,然后搜索开始标记

    • 读取更多数据(例如 64kb)

    • 丢弃其他帧并仅显示最后一个

    我无法测试,但这里是通用代码:

    import cv2
    import urllib
    import numpy as np
    
    stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
    bytes = ''
    while True:
        buff = stream.read(64 * 1024)
        bytes += buff
        if buff.rfind(b'\xff\xd9') != -1: # buff is smaller than bytes
            endmark = bytes.rfind(b'\xff\xd9') + 2
            startmark = bytes[:endmark - 2].rfind(b'\xff\xd8')
    
            jpg = bytes[startmark:endmark] # please, check indexes! I could mess up with them.
            bytes = bytes[endmark:]
    
            img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
            cv2.imshow('Video', img)
            if cv2.waitKey(1) == 27:
                exit(0)
    

    我找不到 stream.read 的行为方式。如果他等到缓冲区已满,则需要减少缓冲区大小。如果他只读取 N 个字节 OR 直到流结束,那么它将起作用。

    【讨论】:

    • 让我试试这个。
    • 嘿,我已经转移到项目的其他部分,现在我的对象检测和电机驱动部分完成了,我回到视频流部分。好吧,我尝试增加或减少缓冲区大小,但没有任何效果。另一方面,视频流可以从浏览器流畅播放。
    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多