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