1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
我不是這方面的專家ffmpeg,所以我會(huì)聽(tīng)從任何更了解的人的意見(jiàn),如果證明不正確,我會(huì)刪除我的答案。
據(jù)我所知,您有一個(gè)想要攝取到 OpenCV 中的 RTMP 流。OpenCV 使用具有 BGR 排序的 Numpy 數(shù)組來(lái)存儲(chǔ)圖像 - 顯然還有視頻幀,這些圖像只是一個(gè)接一個(gè)的大量圖像。因此,我建議您要求ffmpeg將 Flash 視頻流轉(zhuǎn)換為 OpenCV 想要的格式:
ffmpeg <RTMP INPUT STUFF> -pix_fmt bgr24 -f rawvideo -
然后更改它,因?yàn)樗F(xiàn)在是 BGR888:
self.fs = width * height * 3
由于我沒(méi)有可用的 RTMP 源,因此我生成了如下測(cè)試流:
# Generate raw video stream to read into OpenCV? ??
ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pixel_format rgb24 -f rawvideo -
然后我將其通過(guò)管道傳輸?shù)?Python 中:
ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pixel_format rgb24 -f rawvideo - | ./PlayRawVideo
Python 程序PlayRawVideo如下所示:
#!/usr/bin/env python3
import numpy as np
import cv2
import sys
# Set width and height
w, h = 640, 480
while True:
? ? data = sys.stdin.buffer.read(w * h *3)
? ? if len(data) == 0:
? ? ? ? break
? ? frame = np.frombuffer(data, dtype=np.uint8).reshape((h, w, 3))
? ? cv2.imshow("Stream", frame)
? ? cv2.waitKey(1)
? ??
請(qǐng)注意,我必須使用它sys.stdin.buffer.read()來(lái)獲取原始二進(jìn)制數(shù)據(jù)。
添加回答
舉報(bào)