我有以下代碼創建 gstreamer 管道來處理 HLS 流。cap = cv2.VideoCapture( f"souphttpsrc is_live=true location={hls_stream_link} ! hlsdemux ! queue ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! videoconvert ! appsink max-buffers=1 drop=true sync=false",cv2.CAP_GSTREAMER)我現在像這樣閱讀流:while True: success, frame = cap.read() time.sleep(1.0)請注意,我以 1 FPS 讀取流并具有max-buffers=1 drop=true sync=false. 通過這樣做,我總是從緩沖區必須提供的流中獲取最新的幀。問題是 CPU 使用率非常高,在我的 i7 機器上有時會飆升至 120%。取消睡眠會使情況變得更糟。關于為什么處理 HLS 流如此 CPU 密集型的任何解決方案或想法都會很棒。此外,關于如何減少使用的想法也會很棒。
1 回答

幕布斯6054654
TA貢獻1876條經驗 獲得超7個贊
您正在解碼完整的流。在軟件中完成時,這可能會非常昂貴。我在這里看到的一個潛在優化步驟是GstPadProbe
在解碼器之前添加一個,并將一些解析到位流中并刪除所有不是 IDR 的樣本。然后您將只向解碼器發送 IDR 幀。什么會減少解碼器的負載,但是您只會在每個 IDR 幀間隔后得到一個新幀,通常每 2 秒一次(但每個幀之間可能會有所不同)。
添加回答
舉報
0/150
提交
取消