Python OpenCV能否解码H264-MPEG-4 AVC(第10部分)

Python OpenCV能否解码H264-MPEG-4 AVC(第10部分),python,opencv,ffmpeg,Python,Opencv,Ffmpeg,我正在尝试使用OpenCV(python绑定)连接到UDP多播并恢复单个接收到的帧以进行后处理 我可以通过VLC连接到我的多播,VLC显示的广播没有任何问题。VLC报告说,它用于解码的编解码器是H264-MPEG-4 AVC(第10部分) 当我尝试使用OpenCV解码时,我确实看到了我的视频流,但许多帧看起来是碎片。这些帧看起来就像是最后一行像素被重复以填充图像的其余部分(有时是整个图像的75%或更多)。OpenCV报告解码错误(解码MB时出错…,ByTestStream) 有没有办法强迫Ope

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

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

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

有没有办法强迫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协议。它不会缓冲接收到的数据包供以后使用。更多信息请点击此处:

编辑: 为了强制TCP模式,编辑opencv\sources\modules\highgui\src\cap\u ffmpeg\u 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);

您好,请首先尝试使用ffmpeg支持重建opencv,这应该包括最常见的编解码器。二进制文件中是否还未包含ffmpeg?在bin文件夹中,我看到opencv_ffmpeg246.dll,这让我觉得它已经用ffmpeg编译过了?啊,是的,对不起,它似乎是默认的。所以问题是ffmpeg库是否是使用VLC x264支持构建的。此外,如果您在windows上,opencv可能会尝试使用dshow、directx,即使其中包含ffmpeg,因为这也是默认设置。是否有任何方法覆盖此设置?虽然此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效