簡體   English   中英

使用攝像頭或IP攝像頭加快從聯網設備播放視頻的速度

[英]Speed up video playback from a networked device with camera or IP camera

我正在嘗試使用python 中的flask API樹莓派中流式傳輸視頻。 這樣我就可以在工作站上處理單個框架。 就數據傳遞而言,它工作正常。 但是,在客戶端,讀取幀的過程會導致1-3秒的延遲,這在實時應用程序中是不希望的。 我可以在Web瀏覽器中查看視頻播放, 而沒有任何延遲 ,這證明我的樹莓派和網絡是無辜的 問題在於從字節流讀取單個幀的方法。 關於消除此類應用程序中的延遲的任何想法。 下面是我的客戶端應用程序代碼。 示例應用程序的完整源代碼可以在這里找到: 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)

主要建議:

  • 搜索結束標記,然后搜索開始標記

  • 讀取更多數據(例如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個字節直到流的結尾,那么它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM