【问题标题】:Can OpenCV decode H264 - MPEG-4 AVC (part 10)OpenCV 可以解码 H264 - MPEG-4 AVC(第 10 部分)
【发布时间】:2014-08-28 12:43:09
【问题描述】:

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

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

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

有没有办法强制 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()

【问题讨论】:

  • 您好,请先尝试重建支持 ffmpeg 的 opencv,它应该涵盖大多数常见的编解码器。
  • 二进制文件中还没有包含 FFMPEG 吗?在 bin 文件夹中,我看到 opencv_ffmpeg246.dll,这让我觉得它已经用 ffmpeg 编译过?
  • 啊,是的,对不起,它似乎是默认的。所以问题是 ffmpeg 库是否是使用 VLC x264 支持构建的? ffmpeg.org/general.html#x264.
  • 另外,如果你在 Windows 上,opencv 可能会尝试使用 dshow、directx,即使包含 ffmpeg,因为这也是默认设置。
  • 有什么方法可以覆盖这个?

标签: python opencv ffmpeg


【解决方案1】:

上次我检查 (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);

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
猜你喜欢
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多