OpenCV Gstreamer 后端不适用于 h265 编码的视频

问题描述

我使用以下构建脚本来构建 OpenCV:

test -e 4.5.1.zip || wget https://github.com/opencv/opencv/archive/refs/tags/4.5.1.zip
test -e opencv-4.5.1 || unzip 4.5.1.zip

test -e opencv_extra_4.1.1.zip || curl -o ./opencv_extra_4.1.1.zip https://codeload.github.com/opencv/opencv_contrib/zip/4.1.1
test -e opencv_contrib-4.1.1 || unzip opencv_extra_4.1.1.zip


cd opencv-4.5.1
mkdir build
cd build

cmake -DBUILD_opencv_tracking=OFF -DCMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.1/modules \
 -D WITH_CUDA=ON -D opencv_cudev=ON -DCUDA_ARCH_BIN='8.6' -D -DBUILD_opencv_cudev=ON \
 -D CPU_BASELINE=AVX -D CPU_DISPATCH=AVX2 -D CPU_DISPATCH_REQUIRE=AVX2 -D CPU_BASELINE_REQUIRE=AVX -D CMAKE_BUILD_TYPE=RELEASE \
 -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_opencv_apps=OFF -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF -D BUILD_PERF_TESTS=OFF \
 -D BUILD_TESTS=OFF -D BUILD_JPEG=ON -D BUILD_ZLIB=ON -D BUILD_PNG=ON -D BUILD_TIFF=ON -D BUILD_JASPER=OFF -D WITH_ITT=OFF -D WITH_LAPACK=OFF \
 -D WITH_TIFF=ON -D WITH_PNG=ON -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_VA_INTEL=OFF -D WITH_WEBP=OFF -D WITH_JASPER=OFF -D WITH_GSTREAMER=ON ..
make -j16 
sudo make install

以下是 CMake 输出的一些亮点:

-- FFMPEG is disabled. Required libraries: libavcodec;libavformat;libavutil;libswscale. Missing libraries: libavcodec;libavformat;libavutil;libswscale
-- Checking for module 'gstreamer-base-1.0'
--   Found gstreamer-base-1.0,version 1.16.2
-- Checking for module 'gstreamer-app-1.0'
--   Found gstreamer-app-1.0,version 1.16.2
-- Checking for module 'gstreamer-riff-1.0'
--   Found gstreamer-riff-1.0,version 1.16.2
-- Checking for module 'gstreamer-pbutils-1.0'
--   Found gstreamer-pbutils-1.0,version 1.16.2
-- Checking for module 'libdc1394-2'
--   No package 'libdc1394-2' found



--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      NO
--       avcodec:                   NO
--       avformat:                  NO
--       avutil:                    NO
--       swscale:                   NO
--       avresample:                NO
--     GStreamer:                   YES (1.16.2)
--     v4l/v4l2:                    YES (linux/videodev2.h)

现在,我使用以下脚本读取 RTSP 流并显示视频:

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    cv::VideoCapture cap("rtsp://root:admin@192.168.88.248/stream3");
    if(!cap.isOpened()){
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    while(true){
        cv::Mat frame;
        cap >> frame;

        if (frame.empty())
            break;

        cv::imshow( "Frame",frame );

        char c = (char)cv::waitKey(25);
        if(c==27)
            break;
    }

    cap.release();
    cv::destroyAllWindows();

    return 0;
}

我发现使用 h264 编码的视频时,它完全可以正常工作。但是,对于 h265 编码的视频,它无法正确解码视频。以下是它的一些示例。如您所见,它只显示一半的帧,其余为绿色。甚至它显示的部分也有奇怪的伪影。

enter image description here

enter image description here

这是怎么回事?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...