RK3588 平臺一直無法讀取視頻
問題描述:
我這邊用的是rk3588
的核心板,刷的固件里面有opencv 4.5.5
, 系統(tǒng)是ubuntu 20.04 LTS
版本, 使用cv::VideoCapture
無法讀取mp4
或其他視頻,每次讀取后isOpened()
都是 false;
硬件是rk3588
對應(yīng)的開發(fā)板
以下編譯安裝直接在開發(fā)板上進行,不是在宿主機用交叉編譯鏈編譯安裝的。
opencv 安裝
下載 opencv4.5.5.zip
, 解壓后,在源代碼目錄新建 build
目錄,進入 build
目錄;
確保安裝了相關(guān)依賴
確保安裝了相關(guān)依賴
確保安裝了相關(guān)依賴
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install -f ffmpeg # show video
如果 libjasper
安裝失敗,請往下翻
cd opencv4.5.5
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=~/install/opencv4.5.5 -DBUILD_IPP_IW=OFF -DBUILD_WITH_DYNAMIC_IPP=OFF -DBUILD_JPEG=ON -DBUILD_PNG=ON -DBUILD_TIFF=ON -DBUILD_ZLIB=ON -DBUILD_SHARED_LIBS=ON -DBUILD_opencv_java_bindings_generator=OFF -DBUILD_opencv_python_bindings_generator=OFF -DWITH_MATLAB=OFF -DWITH_LAPACK=OFF -DWITH_FFMPEG=ON -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_GTK=ON -DWITH_OPENGL=ON -DWITH_IPP=OFF ..
make -j$(nproc)
make install
或者新建一個一鍵編譯安裝的腳本
build_ubuntu2004_arm64_opencv4.5.5.sh
#!/usr/bin/bash
# ###############################################
# # 確保安裝了相關(guān)依賴
# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install build-essential
# sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
# sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
# sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
# sudo apt-get install libxvidcore-dev libx264-dev
# sudo apt-get install libatlas-base-dev gfortran
# sudo apt-get install -f ffmpeg # show video
# ###################################################
# opencv4.5.5
SRC_NAME_VER=opencv4.5.5
# 壓縮包
SRC_ZIP=~/depends/${SRC_NAME_VER}.zip
# 源碼和編譯目錄
SRC_DIR=~/depends/${SRC_NAME_VER}
BUILD_DIR=${SRC_DIR}/build
# 安裝目錄
INSTALL_ROOT=~/install
INSTALL_DIR=${INSTALL_ROOT}/${SRC_NAME_VER}
# 清空源碼目錄、編譯目錄以及對應(yīng)的安裝目錄
rm -rf ${BUILD_DIR}
rm -rf ${SRC_DIR}
rm -rf ${INSTALL_DIR}
# 新建源碼目錄,編譯目錄和安裝目錄
mkdir -p ${SRC_DIR}
mkdir -p ${BUILD_DIR}
mkdir -p ${INSTALL_DIR}
# 解壓安裝包
unzip -d $SRC_DIR $SRC_ZIP
# 進入對應(yīng)目錄進行編譯
pushd ${BUILD_DIR}
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
-DBUILD_IPP_IW=OFF \
-DBUILD_WITH_DYNAMIC_IPP=OFF \
-DBUILD_JPEG=ON \
-DBUILD_PNG=ON \
-DBUILD_TIFF=ON \
-DBUILD_ZLIB=ON \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_JAVA=OFF \
-DBUILD_opencv_java_bindings_generator=OFF \
-DBUILD_opencv_python_bindings_generator=OFF \
-DBUILD_opencv_python3=OFF \
-DBUILD_opencv_python_tests=OFF \
-DWITH_MATLAB=OFF \
-DWITH_LAPACK=OFF \
-DWITH_FFMPEG=ON \
-DFFMPEG_DIR=/usr/local/ffmpeg \
-DWITH_GSTREAMER=ON \
-DWITH_TBB=ON \
-DWITH_V4L=ON \
-DWITH_GTK=ON \
-DWITH_OPENCL=ON \
-DWITH_OPENGL=ON \
-DWITH_IPP=OFF ..
make -j$(nproc)
make install
popd
安裝 libjasper 或許確認這個就可以了
大意了,一開始安裝的時候,沒有太在意這個庫,所以一直重新編都沒有管這個庫;
所以在安裝 opencv 的時候一定要按照步驟來,否則要找很久的問題。
如果上述opencv
重新編譯安裝還是出現(xiàn)無法讀取視頻的問題,請確保每個依賴庫都已經(jīng)成功安裝。
我相信很多人還是無法讀取視頻,那么就確認這個庫吧。
sudo apt install libjasper1 libjasper-dev
執(zhí)行上述命令會報錯。那怎么辦呢?修改 /etc/apt/source.list
sudo cp /etc/apt/source.list /etc/apt/source.list.bak
sudo gedit /etc/apt/source.list
deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse
# 新增
deb http://ports.ubuntu.com/ubuntu-ports xenial-security main
sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev
NOTE: 以下過程是試錯過程,不一定是必要過程,如果上述過程能解決問題,下面就不用管了。
ffmpeg 重新安裝
這里為什么要重新安裝 ffmpeg
? 翻閱了很多博客,說要重新安裝 ffmpeg
.
但是這里也不一定需要重新安裝,重新安裝肯定沒問題。ffmpeg 版本不要安裝太高,因為接口變換較大,可能 opencv 4.5.5
不兼容,我這里試過好幾個版本( ffmpeg 6.0
, ffmpeg 5.0.3
, ffmpeg 4.4.4
),在重新編譯opencv時都編譯失敗。 ffmpeg 4.2.9
可以成功。
Download FFmpeg
ffmpeg-4.2.9
./configure --enable-shared --prefix=/usr/local/ffmpeg
make -j4
sudo make install
INSTALL libavdevice/libavdevice.a
INSTALL libavdevice/libavdevice.so
STRIP install-libavdevice-shared
INSTALL libavfilter/libavfilter.a
INSTALL libavfilter/libavfilter.so
STRIP install-libavfilter-shared
INSTALL libavformat/libavformat.a
INSTALL libavformat/libavformat.so
STRIP install-libavformat-shared
INSTALL libavcodec/libavcodec.a
INSTALL libavcodec/libavcodec.so
STRIP install-libavcodec-shared
INSTALL libswresample/libswresample.a
INSTALL libswresample/libswresample.so
STRIP install-libswresample-shared
INSTALL libswscale/libswscale.a
INSTALL libswscale/libswscale.so
STRIP install-libswscale-shared
INSTALL libavutil/libavutil.a
INSTALL libavutil/libavutil.so
STRIP install-libavutil-shared
INSTALL doc/ffmpeg.1
INSTALL doc/ffplay.1
INSTALL doc/ffprobe.1
INSTALL doc/ffmpeg-all.1
INSTALL doc/ffplay-all.1
INSTALL doc/ffprobe-all.1
INSTALL doc/ffmpeg-utils.1
INSTALL doc/ffmpeg-scaler.1
INSTALL doc/ffmpeg-resampler.1
INSTALL doc/ffmpeg-codecs.1
INSTALL doc/ffmpeg-bitstream-filters.1
INSTALL doc/ffmpeg-formats.1
INSTALL doc/ffmpeg-protocols.1
INSTALL doc/ffmpeg-devices.1
INSTALL doc/ffmpeg-filters.1
INSTALL doc/libavutil.3
INSTALL doc/libswscale.3
INSTALL doc/libswresample.3
INSTALL doc/libavcodec.3
INSTALL doc/libavformat.3
INSTALL doc/libavdevice.3
INSTALL doc/libavfilter.3
INSTALL doc/ffmpeg.1
INSTALL doc/ffplay.1
INSTALL doc/ffprobe.1
INSTALL doc/ffmpeg-all.1
INSTALL doc/ffplay-all.1
INSTALL doc/ffprobe-all.1
INSTALL doc/ffmpeg-utils.1
INSTALL doc/ffmpeg-scaler.1
INSTALL doc/ffmpeg-resampler.1
INSTALL doc/ffmpeg-codecs.1
INSTALL doc/ffmpeg-bitstream-filters.1
INSTALL doc/ffmpeg-formats.1
INSTALL doc/ffmpeg-protocols.1
INSTALL doc/ffmpeg-devices.1
INSTALL doc/ffmpeg-filters.1
INSTALL doc/libavutil.3
INSTALL doc/libswscale.3
INSTALL doc/libswresample.3
INSTALL doc/libavcodec.3
INSTALL doc/libavformat.3
INSTALL doc/libavdevice.3
INSTALL doc/libavfilter.3
INSTALL install-progs-yes
INSTALL ffmpeg
INSTALL ffplay
INSTALL ffprobe
INSTALL presets/libvpx-1080p50_60.ffpreset
INSTALL presets/libvpx-360p.ffpreset
INSTALL presets/libvpx-1080p.ffpreset
INSTALL presets/libvpx-720p50_60.ffpreset
INSTALL presets/libvpx-720p.ffpreset
INSTALL doc/ffprobe.xsd
INSTALL doc/examples/transcoding.c
INSTALL doc/examples/vaapi_transcode.c
INSTALL doc/examples/demuxing_decoding.c
INSTALL doc/examples/filtering_video.c
INSTALL doc/examples/muxing.c
INSTALL doc/examples/avio_dir_cmd.c
INSTALL doc/examples/extract_mvs.c
INSTALL doc/examples/encode_audio.c
INSTALL doc/examples/hw_decode.c
INSTALL doc/examples/filter_audio.c
INSTALL doc/examples/resampling_audio.c
INSTALL doc/examples/decode_video.c
INSTALL doc/examples/metadata.c
INSTALL doc/examples/remuxing.c
INSTALL doc/examples/filtering_audio.c
INSTALL doc/examples/http_multiclient.c
INSTALL doc/examples/avio_reading.c
INSTALL doc/examples/qsvdec.c
INSTALL doc/examples/vaapi_encode.c
INSTALL doc/examples/decode_audio.c
INSTALL doc/examples/transcode_aac.c
INSTALL doc/examples/encode_video.c
INSTALL doc/examples/scaling_video.c
INSTALL doc/examples/README
INSTALL doc/examples/Makefile
INSTALL doc/examples/transcoding.c
INSTALL doc/examples/vaapi_transcode.c
INSTALL doc/examples/demuxing_decoding.c
INSTALL doc/examples/filtering_video.c
INSTALL doc/examples/muxing.c
INSTALL doc/examples/avio_dir_cmd.c
INSTALL doc/examples/extract_mvs.c
INSTALL doc/examples/encode_audio.c
INSTALL doc/examples/hw_decode.c
INSTALL doc/examples/filter_audio.c
INSTALL doc/examples/resampling_audio.c
INSTALL doc/examples/decode_video.c
INSTALL doc/examples/metadata.c
INSTALL doc/examples/remuxing.c
INSTALL doc/examples/filtering_audio.c
INSTALL doc/examples/http_multiclient.c
INSTALL doc/examples/avio_reading.c
INSTALL doc/examples/qsvdec.c
INSTALL doc/examples/vaapi_encode.c
INSTALL doc/examples/decode_audio.c
INSTALL doc/examples/transcode_aac.c
INSTALL doc/examples/encode_video.c
INSTALL doc/examples/scaling_video.c
INSTALL doc/examples/README
INSTALL doc/examples/Makefile
INSTALL libavdevice/avdevice.h
INSTALL libavdevice/version.h
INSTALL libavdevice/libavdevice.pc
INSTALL libavfilter/avfilter.h
INSTALL libavfilter/buffersink.h
INSTALL libavfilter/buffersrc.h
INSTALL libavfilter/version.h
INSTALL libavfilter/libavfilter.pc
INSTALL libavformat/avformat.h
INSTALL libavformat/avio.h
INSTALL libavformat/version.h
INSTALL libavformat/libavformat.pc
INSTALL libavcodec/ac3_parser.h
INSTALL libavcodec/adts_parser.h
INSTALL libavcodec/avcodec.h
INSTALL libavcodec/avdct.h
INSTALL libavcodec/avfft.h
INSTALL libavcodec/d3d11va.h
INSTALL libavcodec/dirac.h
INSTALL libavcodec/dv_profile.h
INSTALL libavcodec/dxva2.h
INSTALL libavcodec/jni.h
INSTALL libavcodec/mediacodec.h
INSTALL libavcodec/qsv.h
INSTALL libavcodec/vaapi.h
INSTALL libavcodec/vdpau.h
INSTALL libavcodec/version.h
INSTALL libavcodec/videotoolbox.h
INSTALL libavcodec/vorbis_parser.h
INSTALL libavcodec/xvmc.h
INSTALL libavcodec/libavcodec.pc
INSTALL libswresample/swresample.h
INSTALL libswresample/version.h
INSTALL libswresample/libswresample.pc
INSTALL libswscale/swscale.h
INSTALL libswscale/version.h
INSTALL libswscale/libswscale.pc
INSTALL libavutil/adler32.h
INSTALL libavutil/aes.h
INSTALL libavutil/aes_ctr.h
INSTALL libavutil/attributes.h
INSTALL libavutil/audio_fifo.h
INSTALL libavutil/avassert.h
INSTALL libavutil/avstring.h
INSTALL libavutil/avutil.h
INSTALL libavutil/base64.h
INSTALL libavutil/blowfish.h
INSTALL libavutil/bprint.h
INSTALL libavutil/bswap.h
INSTALL libavutil/buffer.h
INSTALL libavutil/cast5.h
INSTALL libavutil/camellia.h
INSTALL libavutil/channel_layout.h
INSTALL libavutil/common.h
INSTALL libavutil/cpu.h
INSTALL libavutil/crc.h
INSTALL libavutil/des.h
INSTALL libavutil/dict.h
INSTALL libavutil/display.h
INSTALL libavutil/downmix_info.h
INSTALL libavutil/encryption_info.h
INSTALL libavutil/error.h
INSTALL libavutil/eval.h
INSTALL libavutil/fifo.h
INSTALL libavutil/file.h
INSTALL libavutil/frame.h
INSTALL libavutil/hash.h
INSTALL libavutil/hdr_dynamic_metadata.h
INSTALL libavutil/hmac.h
INSTALL libavutil/hwcontext.h
INSTALL libavutil/hwcontext_cuda.h
INSTALL libavutil/hwcontext_d3d11va.h
INSTALL libavutil/hwcontext_drm.h
INSTALL libavutil/hwcontext_dxva2.h
INSTALL libavutil/hwcontext_qsv.h
INSTALL libavutil/hwcontext_mediacodec.h
INSTALL libavutil/hwcontext_vaapi.h
INSTALL libavutil/hwcontext_videotoolbox.h
INSTALL libavutil/hwcontext_vdpau.h
INSTALL libavutil/imgutils.h
INSTALL libavutil/intfloat.h
INSTALL libavutil/intreadwrite.h
INSTALL libavutil/lfg.h
INSTALL libavutil/log.h
INSTALL libavutil/macros.h
INSTALL libavutil/mathematics.h
INSTALL libavutil/mastering_display_metadata.h
INSTALL libavutil/md5.h
INSTALL libavutil/mem.h
INSTALL libavutil/motion_vector.h
INSTALL libavutil/murmur3.h
INSTALL libavutil/opt.h
INSTALL libavutil/parseutils.h
INSTALL libavutil/pixdesc.h
INSTALL libavutil/pixelutils.h
INSTALL libavutil/pixfmt.h
INSTALL libavutil/random_seed.h
INSTALL libavutil/rc4.h
INSTALL libavutil/rational.h
INSTALL libavutil/replaygain.h
INSTALL libavutil/ripemd.h
INSTALL libavutil/samplefmt.h
INSTALL libavutil/sha.h
INSTALL libavutil/sha512.h
INSTALL libavutil/spherical.h
INSTALL libavutil/stereo3d.h
INSTALL libavutil/threadmessage.h
INSTALL libavutil/time.h
INSTALL libavutil/timecode.h
INSTALL libavutil/timestamp.h
INSTALL libavutil/tree.h
INSTALL libavutil/twofish.h
INSTALL libavutil/version.h
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/tx.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
INSTALL libavutil/libavutil.pc
編譯安裝完成后,在 /usr/local/ffmpeg
下新建 ffmpeg-config.cmake
, 文件內(nèi)容如下:
ffmpeg-config.cmake
set(ffmpeg_path "${CMAKE_CURRENT_LIST_DIR}")
message("ffmpeg_path: ${ffmpeg_path}")
set(FFMPEG_EXEC_DIR "${ffmpeg_path}/bin")
set(FFMPEG_LIBDIR "${ffmpeg_path}/lib")
set(FFMPEG_INCLUDE_DIRS "${ffmpeg_path}/include")
# library names
set(FFMPEG_LIBRARIES
${FFMPEG_LIBDIR}/libavformat.so
${FFMPEG_LIBDIR}/libavdevice.so
${FFMPEG_LIBDIR}/libavcodec.so
${FFMPEG_LIBDIR}/libavutil.so
${FFMPEG_LIBDIR}/libswscale.so
${FFMPEG_LIBDIR}/libswresample.so
${FFMPEG_LIBDIR}/libavfilter.so
)
# found status
set(FFMPEG_libavformat_FOUND TRUE)
set(FFMPEG_libavdevice_FOUND TRUE)
set(FFMPEG_libavcodec_FOUND TRUE)
set(FFMPEG_libavutil_FOUND TRUE)
set(FFMPEG_libswscale_FOUND TRUE)
set(FFMPEG_libswresample_FOUND TRUE)
set(FFMPEG_libavfilter_FOUND TRUE)
# library versions, 注意這幾個變量,一定要設(shè)置為全局CACHE變量
set(FFMPEG_libavutil_VERSION 56.31.100 CACHE INTERNAL "FFMPEG_libavutil_VERSION") # info
set(FFMPEG_libavcodec_VERSION 58.54.100 CACHE INTERNAL "FFMPEG_libavcodec_VERSION") # info
set(FFMPEG_libavformat_VERSION 58.29.100 CACHE INTERNAL "FFMPEG_libavformat_VERSION") # info
set(FFMPEG_libavdevice_VERSION 58.8.100 CACHE INTERNAL "FFMPEG_libavdevice_VERSION") # info
set(FFMPEG_libavfilter_VERSION 7.57.100 CACHE INTERNAL "FFMPEG_libavfilter_VERSION") # info
set(FFMPEG_libswscale_VERSION 5.5.100 CACHE INTERNAL "FFMPEG_libswscale_VERSION") # info
set(FFMPEG_libswresample_VERSION 3.5.100 CACHE INTERNAL "FFMPEG_libswresample_VERSION") # info
set(FFMPEG_FOUND TRUE)
set(FFMPEG_LIBS ${FFMPEG_LIBRARIES})
status(" #################################### FFMPEG:" FFMPEG_FOUND THEN "YES (find_package)" ELSE "NO (find_package)")
status(" avcodec:" FFMPEG_libavcodec_VERSION THEN "YES (${FFMPEG_libavcodec_VERSION})" ELSE NO)
status(" avformat:" FFMPEG_libavformat_VERSION THEN "YES (${FFMPEG_libavformat_VERSION})" ELSE NO)
status(" avutil:" FFMPEG_libavutil_VERSION THEN "YES (${FFMPEG_libavutil_VERSION})" ELSE NO)
status(" swscale:" FFMPEG_libswscale_VERSION THEN "YES (${FFMPEG_libswscale_VERSION})" ELSE NO)
status(" avresample:" FFMPEG_libavresample_VERSION THEN "YES (${FFMPEG_libavresample_VERSION})" ELSE NO)
卸載原裝 opencv
以上還不能解決問題的話,刪除所有 opencv 的安裝,全部重裝。
安裝順序如下:文章來源:http://www.zghlxwxcb.cn/news/detail-583369.html
- 依賴庫 (
sudo apt install xxx
) -
ffmpeg
源碼編譯安裝 - 重新編譯安裝
opencv
參考
debug-ubuntu下opencv無法讀取視頻且capture.isOpened()測試一直為false-可參考
??opencv+ffmpeg編譯打包全解指南-可參考
【環(huán)境配置】Windows 11 的 WSL(Ubuntu2204) 安裝OpenCV 4.5.4 (親測有效)
linux下 opencv 和 ffmpeg安裝
RK3588移植-opencv交叉編譯aarch64
瑞芯微-交叉編譯環(huán)境搭建-opencv環(huán)境搭建(基于RV1109-1126)-(基于ubuntu18.04)
RK3588編譯Opencv最新版
樹莓派4B(aarch64,arm64)bullseye無法定位libjasper-dev文章來源地址http://www.zghlxwxcb.cn/news/detail-583369.html
到了這里,關(guān)于【邊緣設(shè)備】RK3588 用 opencv 的 videocapture 一直無法讀取視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!