簡體   English   中英

從列表中讀取視頻URL一段時間並發布流,OpenCV Python

[英]Read video URLs from a list for a period of time and release streams, OpenCV Python

我有一個視頻 URL 列表,我想使用 OPenCV 打開/處理。 下面的示例列表

cam_name,address
Cam_01,vid1.mp4
Cam_02,vid1.mp4
Cam_03,vid1.mp4

我想打開第一個相機/地址,stream 60秒,釋放並啟動第二個,釋放等等。 當到達列表中的最后一個 stream 例如 Cam_03 時,再次啟動列表,回到 Cam_01。

我不需要線程,我只需要啟動 stream 並在一段時間后停止等。

到目前為止的代碼:

# this calls the OpenCV stream
def main(cam_name, camID):
    main_bret(cam_name, camID)

df = 'cams_list.txt'
df = pd.read_csv(df)

for index, row in df.iterrows():
    main(row['cam_name'], row['address'])

########################################
main_bret(cam_name, camID):
    vid = cv2.VideoCapture(camID)

    while(True):   
        ret, frame = vid.read()
        cv2.imshow(cam_name, frame)
      

       if cv2.waitKey(1) & 0xFF == ord('q'):
           break
  
   vid.release()
   cv2.destroyAllWindows()

如何構建到 stream 的循環 60 秒,釋放並移至列表中的下一個..並在完成列表時重復?

現在發生的事情,例如,如果只是流式傳輸 mp4,將完成視頻,然后開始下一個。 只需要它在 60 秒后停止流式傳輸。

我嘗試在 cv2.waitKey(1) 周圍添加 sleep() 等,但它運行該期間的所有內容,而不是單個流。 我想我沒有把睡眠放在正確的地方。

tks

我不確定我是否了解您程序的每個細節,但這就是我所擁有的:

df = 'cams_list.txt'
df = pd.read_csv(df)

def main_bret(cam_name, camID):
    vid = cv2.VideoCapture(camID)

    ret, frame = vid.read()
    cv2.imshow(cam_name, frame)

    cv2.waitKey(60_000)

    vid.release()
    cv2.destroyAllWindows()
    
index = 0
upper_index = df.shape[0]

while True:
    main_bret(df.iloc[index]["cam_name"], df.iloc[index]["address"])
    index = index + 1
    if index >= upper_index:
        index = 0
  • 在一段時間內一遍又一遍地遍歷列表更容易,所以我擺脫了 for 循環。
  • “waitKey” function 等待 60 秒(60000 毫秒),然后刪除 window。

我希望我是有幫助的。

暫無
暫無

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

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