opencv不僅可以獲取解碼後的圖片數據,還可以獲取未經解碼的原始碼流數據, 這樣爲使用其他硬解碼器提供方便
在編譯opencv cmake時需要指定 -D WITH_FFMPEG=ON
python 代碼如下,需要指定CAP_PROP_FORMAT 爲 -1 指定關閉軟解碼功能
需要說明的是,獲取的原始碼流數據需要通過視頻流解碼器才能獲取到圖片數據
import cv2
rtsp_url = "rtsp://192.167.15.41/g2.mp4"
logger.info(rtsp_url)
cap = cv2.VideoCapture(rtsp_url)
cap.set(cv2.CAP_PROP_FORMAT, -1)
if not cap.isOpened():
logger.info("fail to open rtsp: {}".format(rtsp_url))
break
logger.info("FORMAT:{} FOURCC:{} CODEC_PIXEL_FORMAT:{} FPS:{}, FRAME_WIDTH:{}, FRAME_HEIGHT:{}"
.format(cap.get(cv2.CAP_PROP_FORMAT),
cap.get(cv2.CAP_PROP_FOURCC),
cap.get(cv2.CAP_PROP_CODEC_PIXEL_FORMAT),
cap.get(cv2.CAP_PROP_FPS),
cap.get(cv2.CAP_PROP_FRAME_WIDTH),
cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
count = 0
while True:
ret, yuv_frame = cap.read()
logger.info("ret:{}, len{}".format(ret, yuv_frame.shape))
if not ret:
continue
logger.info("count:{}".format(count))
count += 1