繁体   English   中英

可以OpenCV解码H264 - MPEG-4 AVC(第10部分)

[英]Can OpenCV decode H264 - MPEG-4 AVC (part 10)

我正在尝试使用OpenCV(python绑定)连接到UDP多播并恢复单个接收的帧以进行后处理。

我可以通过VLC连接到我的多播,VLC显示广播完全没有问题。 VLC报告它用于解码的编解码器是H264 - MPEG-4 AVC(第10部分)。

当我尝试使用OpenCV进行解码时,我确实看到了我的视频流,但是很多帧看起来都是碎片化的。 帧看起来好像最后一行像素被重复以填充图像的其余部分(有时是整个图像的75%或更多)。 OpenCV报告解码错误(解码MB ....,字节流时出错)。

有没有办法强制OpenCV使用VLC正在使用的任何编解码器? 我试图在我的OpenCV代码中指定要使用的特定编解码器,但它似乎没有任何效果。

我使用的代码如下:

import numpy as np
import cv2
from cv2 import cv

cap = cv2.VideoCapture()
cap.set(cv.CV_CAP_PROP_FOURCC, cv.CV_FOURCC('A','V','C','1')) 
cwi=cap.open(r'myurlandport')

counter = 0

while(cap.isOpened()):

    ret, frame = cap.read()


    counter += 1

    if counter % 30 == 0:
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cap.release()
cv2.destroyAllWindows()

上次我检查(OpenCV 2.4.9)在OpenCV中使用的ffmpeg构建没有使用UDP协议。 它不缓冲收到的数据包供以后使用。 更多信息: http//code.opencv.org/issues/2235

编辑:为了强制TCP模式,编辑opencv \\ sources \\ modules \\ highgui \\ src \\ cap_ffmpeg_impl.hpp第538行

int err=avformat_open_input(&ic, _filename, NULL, NULL);

添加tcp:

 AVDictionary *d = NULL;
 av_dict_set(&d, "rtsp_transport", "tcp", 0);
 int err=avformat_open_input(&ic, _filename, NULL, &d);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM