如何解决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 编码的视频,它无法正确解码视频。以下是它的一些示例。如您所见,它只显示一半的帧,其余为绿色。甚至它显示的部分也有奇怪的伪影。
这是怎么回事?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。