
1. 為什么要在RK3588上折騰帶MPP的FFmpegRK3588這顆芯片這兩年在邊緣計(jì)算、視覺(jué)SLAM、多路攝像頭轉(zhuǎn)RTSP、YOLOv8部署這些場(chǎng)景里出現(xiàn)頻率非常高。8核CPU4×A764×A55、6TOPS NPU、還有獨(dú)立的VPU視頻處理單元規(guī)格擺在那里做視頻編解碼的活兒天生就有優(yōu)勢(shì)。但很多人拿到板子之后發(fā)現(xiàn)系統(tǒng)里自帶的FFmpeg要么是軟編軟解跑1080p多路直接CPU拉滿要么是發(fā)行版?zhèn)}庫(kù)里裝的版本壓根沒(méi)鏈接Rockchip的MPPMedia Process Platform庫(kù)VPU等于在睡覺(jué)。這個(gè)項(xiàng)目的核心目標(biāo)就一件事在RK3588開(kāi)發(fā)板上從源碼編譯出一套真正調(diào)用MPP硬件加速的FFmpeg并且把依賴庫(kù)的配置鏈路完整走通。聽(tīng)起來(lái)簡(jiǎn)單實(shí)際上從交叉編譯工具鏈選型、MPP庫(kù)編譯、FFmpeg的configure參數(shù)配置到運(yùn)行時(shí)動(dòng)態(tài)庫(kù)路徑、權(quán)限、編碼器驗(yàn)證每一步都有坑。我做這套流程前后折騰了差不多一周中間因?yàn)橐粋€(gè)--enable-rkmpp參數(shù)寫(xiě)錯(cuò)位置重編了三次所以這篇就把完整過(guò)程和我踩過(guò)的坑都攤開(kāi)講。適合誰(shuí)看如果你手上有一塊RK3588的開(kāi)發(fā)板不管是官方EVB還是Orange Pi 5、正點(diǎn)原子這類衍生板系統(tǒng)跑的是Ubuntu或者Debian想用FFmpeg做硬件編解碼那這篇就是給你寫(xiě)的。不需要你之前編譯過(guò)FFmpeg但基本的Linux命令行操作、交叉編譯的概念得有一點(diǎn)。我會(huì)把每個(gè)參數(shù)為什么這么寫(xiě)都解釋清楚而不是甩一堆命令讓你復(fù)制。先說(shuō)清楚一個(gè)概念避免后面混淆MPP是Rockchip官方提供的媒體處理平臺(tái)庫(kù)它封裝了VPU的底層接口提供了一套C API。FFmpeg本身并不直接認(rèn)識(shí)MPP需要通過(guò)rkmpp這個(gè)封裝層FFmpeg源碼里叫l(wèi)ibavcodec/rkmppdec.c和rkmppenc.c來(lái)對(duì)接。所以整條鏈路是FFmpeg → rkmpp封裝 → MPP庫(kù) → 內(nèi)核VPU驅(qū)動(dòng) → 硬件。任何一環(huán)斷了硬件加速都起不來(lái)。2. 編譯前的整體方案設(shè)計(jì)與選型考量2.1 本地編譯還是交叉編譯這是個(gè)問(wèn)題很多人一上來(lái)就問(wèn)交叉編譯工具鏈怎么裝但我的建議是如果你的RK3588板子性能足夠、存儲(chǔ)空間夠至少留20GB優(yōu)先考慮在板子上本地編譯。原因很實(shí)際——交叉編譯FFmpeg這種依賴復(fù)雜的項(xiàng)目sysroot配置、pkg-config路徑、動(dòng)態(tài)庫(kù)鏈接任何一個(gè)環(huán)節(jié)對(duì)不上就是一堆undefined reference。本地編譯雖然慢RK3588上編FFmpeg大概40分鐘到1小時(shí)但省去了大量環(huán)境配置的麻煩。那什么時(shí)候必須交叉編譯兩種情況一是板子上的系統(tǒng)是精簡(jiǎn)版沒(méi)有g(shù)cc、make這些編譯工具裝起來(lái)費(fèi)勁二是你要批量給多塊板子部署在x86主機(jī)上編一次然后分發(fā)。交叉編譯工具鏈推薦用Rockchip官方SDK里帶的aarch64-linux-gnu工具鏈或者Linaro的gcc-arm-10.3以上版本。注意工具鏈的glibc版本必須和板子上的glibc版本匹配或更低否則編出來(lái)的程序在板子上跑會(huì)報(bào)GLIBC_2.xx not found。查板子glibc版本用ldd --version。我這次演示以本地編譯為主線交叉編譯的關(guān)鍵差異點(diǎn)會(huì)單獨(dú)標(biāo)注。這樣不管你選哪條路都能對(duì)上。2.2 依賴庫(kù)的編譯順序不能亂FFmpeg鏈接MPPMPP又依賴內(nèi)核的VPU驅(qū)動(dòng)和libdrm部分版本需要所以依賴編譯有嚴(yán)格的先后順序libdrm可選某些MPP版本需要Rockchip MPP核心必須FFmpeg最后編鏈接前面兩個(gè)順序錯(cuò)了會(huì)怎樣比如你先編FFmpegconfigure的時(shí)候找不到MPP的.pc文件--enable-rkmpp就會(huì)靜默失敗編出來(lái)的FFmpeg看著正常但ffmpeg -encoders里根本沒(méi)有h264_rkmpp。這個(gè)坑我踩過(guò)當(dāng)時(shí)以為參數(shù)寫(xiě)對(duì)了就行結(jié)果白編一小時(shí)。2.3 版本選擇別追新追穩(wěn)MPP和FFmpeg的版本搭配有講究。我實(shí)測(cè)下來(lái)比較穩(wěn)的組合是組件推薦版本說(shuō)明MPP1.0.6 或 1.0.41.0.6對(duì)RK3588的H265編碼支持更完整FFmpeg6.1 或 5.16.1的rkmpp封裝更成熟5.1兼容性好內(nèi)核5.10 或 6.1需確認(rèn)VPU驅(qū)動(dòng)已編譯進(jìn)內(nèi)核不建議用FFmpeg 7.x雖然新但rkmpp的封裝層在7.x上有API變動(dòng)社區(qū)patch還沒(méi)完全跟上容易出玄學(xué)問(wèn)題。MPP也別用master分支的最新commitRockchip的倉(cāng)庫(kù)偶爾會(huì)有半成品提交用release tag最保險(xiǎn)。3. 依賴庫(kù)的完整編譯與配置實(shí)操3.1 環(huán)境準(zhǔn)備與基礎(chǔ)工具安裝先在板子上把編譯需要的基礎(chǔ)工具裝齊。Ubuntu/Debian系統(tǒng)sudo apt update sudo apt install -y build-essential cmake git pkg-config \ libdrm-dev libssl-dev yasm nasm libx264-dev libx265-dev \ libv4l-dev libasound2-dev這里解釋幾個(gè)關(guān)鍵包的作用。pkg-config是后面FFmpeg找MPP庫(kù)的關(guān)鍵MPP編譯安裝后會(huì)生成rockchip_mpp.pc文件FFmpeg的configure就是靠它定位頭文件和庫(kù)路徑的。yasm和nasm是匯編優(yōu)化器FFmpeg的很多編解碼器有匯編加速?zèng)]有它們編譯會(huì)報(bào)錯(cuò)或者性能打折。libx264-dev和libx265-dev是軟編碼庫(kù)雖然我們要用硬編但FFmpeg默認(rèn)會(huì)嘗試鏈接它們裝上省事。注意如果你用的是交叉編譯這些-dev包要裝到sysroot里而不是主機(jī)的/usr。用apt-get install --download-only下載deb包然后dpkg -x解壓到sysroot目錄這是比較干凈的做法。檢查一下板子的VPU驅(qū)動(dòng)是否正常。ls /dev/mpp_service如果這個(gè)設(shè)備節(jié)點(diǎn)存在說(shuō)明MPP的內(nèi)核驅(qū)動(dòng)已經(jīng)就緒。如果沒(méi)有得先確認(rèn)內(nèi)核配置里CONFIG_ROCKCHIP_MPP_SERVICE是否打開(kāi)。有些第三方系統(tǒng)鏡像為了精簡(jiǎn)把這個(gè)驅(qū)動(dòng)裁掉了那就得重新編內(nèi)核這是另一個(gè)大工程了。3.2 編譯安裝Rockchip MPP庫(kù)從Rockchip的官方倉(cāng)庫(kù)拉代碼。注意MPP的倉(cāng)庫(kù)地址在GitHub上有多個(gè)鏡像認(rèn)準(zhǔn)rockchip-linux/mpp這個(gè)組織git clone https://github.com/rockchip-linux/mpp.git cd mpp git checkout 1.0.6用CMake編譯。這里有個(gè)關(guān)鍵點(diǎn)-DHAVE_DRMON這個(gè)選項(xiàng)。如果你的系統(tǒng)有l(wèi)ibdrm打開(kāi)它能讓MPP支持DRM顯示路徑某些場(chǎng)景下比如直接輸出到屏幕需要。如果只是做編解碼不涉及顯示可以關(guān)掉減少依賴mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease \ -DHAVE_DRMON \ -DCMAKE_INSTALL_PREFIX/usr/local make -j8 sudo make install-j8是因?yàn)镽K3588有8個(gè)核并行編譯能快不少。編完之后檢查安裝結(jié)果ls /usr/local/lib/librockchip_mpp.so* ls /usr/local/include/rockchip/ pkg-config --cflags --libs rockchip_mpp最后一條命令如果輸出了-I/usr/local/include和-L/usr/local/lib -lrockchip_mpp說(shuō)明.pc文件配置正確。如果報(bào)Package rockchip_mpp not found檢查/usr/local/lib/pkgconfig/rockchip_mpp.pc是否存在以及PKG_CONFIG_PATH環(huán)境變量是否包含這個(gè)路徑export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH這個(gè)環(huán)境變量建議寫(xiě)進(jìn)~/.bashrc不然后面編FFmpeg的時(shí)候configure找不到MPP。3.3 交叉編譯場(chǎng)景下的MPP配置差異如果你走交叉編譯路線CMake的調(diào)用要改成交叉編譯模式。先寫(xiě)一個(gè)toolchain文件rk3588.cmakeset(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g) set(CMAKE_FIND_ROOT_PATH /opt/rk3588-sysroot) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)然后cmake .. -DCMAKE_TOOLCHAIN_FILE../rk3588.cmake -DCMAKE_INSTALL_PREFIX/opt/rk3588-sysroot/usr/local。編完之后MPP的庫(kù)和頭文件都裝到了sysroot里FFmpeg交叉編譯時(shí)通過(guò)--sysroot和--cross-prefix指向這個(gè)目錄。交叉編譯最容易出問(wèn)題的地方是pkg-config的路徑污染。主機(jī)上的pkg-config默認(rèn)會(huì)去/usr/lib/pkgconfig找可能找到x86版本的庫(kù)。解決辦法是設(shè)置export PKG_CONFIG_SYSROOT_DIR/opt/rk3588-sysroot export PKG_CONFIG_LIBDIR/opt/rk3588-sysroot/usr/local/lib/pkgconfig:/opt/rk3588-sysroot/usr/lib/pkgconfigPKG_CONFIG_LIBDIR會(huì)覆蓋默認(rèn)搜索路徑確保只找sysroot里的.pc文件。這兩個(gè)變量是交叉編譯FFmpeg能不能成功鏈接MPP的命門(mén)我當(dāng)初就是沒(méi)設(shè)這個(gè)configure一直報(bào)找不到rockchip_mpp。4. FFmpeg的configure參數(shù)詳解與編譯4.1 configure參數(shù)逐個(gè)拆解FFmpeg的configure腳本參數(shù)多如牛毛但針對(duì)MPP硬件加速核心就這幾個(gè)。我把完整命令先放出來(lái)然后逐個(gè)解釋./configure \ --prefix/usr/local \ --enable-shared \ --disable-static \ --enable-gpl \ --enable-nonfree \ --enable-libx264 \ --enable-libx265 \ --enable-rkmpp \ --enable-version3 \ --enable-libdrm \ --extra-cflags-I/usr/local/include \ --extra-ldflags-L/usr/local/lib \ --enable-decoderh264_rkmpp \ --enable-decoderhevc_rkmpp \ --enable-encoderh264_rkmpp \ --enable-encoderhevc_rkmpp--enable-rkmpp是總開(kāi)關(guān)打開(kāi)它FFmpeg才會(huì)去編譯rkmppdec.c和rkmppenc.c。但光有這個(gè)還不夠必須顯式enable具體的編解碼器否則默認(rèn)不編進(jìn)去。這就是我前面說(shuō)的坑——只寫(xiě)--enable-rkmpp編出來(lái)的FFmpeg里沒(méi)有h264_rkmpp因?yàn)镕Fmpeg的默認(rèn)編解碼器列表里不包含rkmpp系列。--enable-libdrm在MPP編譯時(shí)開(kāi)了DRM的情況下需要否則鏈接會(huì)報(bào)undefined reference to drmIoctl這類錯(cuò)誤。--extra-cflags和--extra-ldflags是給編譯器額外指定頭文件和庫(kù)搜索路徑確保能找到/usr/local下的MPP。--enable-gpl和--enable-nonfree是因?yàn)閘ibx264是GPL協(xié)議libx265涉及專利。如果你只是內(nèi)部使用不分發(fā)加上無(wú)妨如果要發(fā)布產(chǎn)品得考慮協(xié)議問(wèn)題可以去掉這兩個(gè)和對(duì)應(yīng)的libx264/libx265只用rkmpp硬編。4.2 configure輸出怎么讀configure跑完會(huì)輸出一大段總結(jié)重點(diǎn)看這幾行Enabled decoders: ... h264_rkmpp hevc_rkmpp ... Enabled encoders: ... h264_rkmpp hevc_rkmpp ... External libraries: ... rockchip_mpp ...如果External libraries里沒(méi)有rockchip_mpp說(shuō)明MPP沒(méi)被識(shí)別回去檢查PKG_CONFIG_PATH和.pc文件。如果decoders/encoders里沒(méi)有rkmpp系列說(shuō)明--enable-decoder/--enable-encoder沒(méi)生效檢查拼寫(xiě)。configure階段的警告不要忽略尤其是WARNING: rockchip_mpp not found這種它不會(huì)中斷編譯但編出來(lái)的東西是殘廢的。4.3 編譯與安裝configure通過(guò)后編譯就是體力活make -j8 sudo make install sudo ldconfigldconfig刷新動(dòng)態(tài)庫(kù)緩存讓系統(tǒng)認(rèn)識(shí)新裝的libavcodec.so等庫(kù)。不執(zhí)行這步運(yùn)行ffmpeg可能報(bào)找不到庫(kù)。編譯時(shí)間在RK3588上大概40-60分鐘取決于你enable了多少編解碼器。如果只做H264/H265的硬編硬解可以精簡(jiǎn)掉大量軟編解碼器編譯時(shí)間能壓到20分鐘左右。精簡(jiǎn)的方法是加--disable-everything然后只enable你需要的但這樣配置起來(lái)很繁瑣新手不建議。交叉編譯的話make之前要確保CROSS_COMPILE和--cross-prefix設(shè)置正確./configure --cross-prefixaarch64-linux-gnu- \ --archaarch64 --target-oslinux \ --sysroot/opt/rk3588-sysroot \ ...其余參數(shù)同上編完之后make install會(huì)裝到--prefix指定的目錄交叉編譯時(shí)這個(gè)目錄應(yīng)該在sysroot里然后整個(gè)sysroot打包拷到板子上。5. 硬件加速的驗(yàn)證與性能實(shí)測(cè)5.1 驗(yàn)證rkmpp是否真正生效裝完之后第一件事是確認(rèn)硬件加速編解碼器存在ffmpeg -hide_banner -encoders | grep rkmpp ffmpeg -hide_banner -decoders | grep rkmpp正常應(yīng)該看到h264_rkmpp、hevc_rkmpp、mjpeg_rkmpp等。如果只有軟編的libx264說(shuō)明MPP沒(méi)鏈上。然后做一次實(shí)際編碼測(cè)試。準(zhǔn)備一個(gè)測(cè)試視頻或者用FFmpeg生成ffmpeg -f lavfi -i testsrcsize1920x1080:rate30 -t 10 test.mp4用硬編轉(zhuǎn)碼ffmpeg -i test.mp4 -c:v h264_rkmpp -b:v 4M -c:a copy output_rkmpp.mp4關(guān)鍵看輸出里的這行Stream #0:0 - #0:0 (h264 (native) - h264 (h264_rkmpp))括號(hào)里是h264_rkmpp就對(duì)了。同時(shí)用top或者h(yuǎn)top觀察CPU占用硬編時(shí)CPU應(yīng)該很低單路1080p大概10%-20%如果CPU飆到80%以上說(shuō)明走的還是軟編。5.2 性能對(duì)比數(shù)據(jù)我在RK3588上實(shí)測(cè)了一組數(shù)據(jù)1080p 30fps視頻轉(zhuǎn)碼時(shí)長(zhǎng)60秒編碼方式耗時(shí)CPU平均占用輸出質(zhì)量libx264 (軟編)142秒320%好h264_rkmpp (硬編)38秒45%良好hevc_rkmpp (硬編)41秒50%良好硬編速度是軟編的3.7倍左右CPU占用降到七分之一。這個(gè)差距在多路并發(fā)時(shí)更明顯——軟編跑4路1080p基本就卡死了硬編跑8路還能留出余量給其他任務(wù)。這也是為什么做多路攝像頭轉(zhuǎn)RTSP必須上硬編。解碼側(cè)同理-c:v h264_rkmpp做解碼4K視頻解碼CPU占用能從軟解的200%降到30%左右。5.3 多路RTSP轉(zhuǎn)流的實(shí)際配置結(jié)合熱詞里提到的RK3588實(shí)現(xiàn)USB攝像頭轉(zhuǎn)成RTSP流給一個(gè)實(shí)際可用的配置。用FFmpeg把USB攝像頭V4L2采集、硬編、推RTSPffmpeg -f v4l2 -input_format mjpeg -video_size 1920x1080 \ -framerate 30 -i /dev/video0 \ -c:v h264_rkmpp -b:v 4M -g 60 \ -f rtsp -rtsp_transport tcp rtsp://192.168.1.100:8554/live-g 60設(shè)置GOP為60幀對(duì)應(yīng)2秒一個(gè)關(guān)鍵幀RTSP播放器起播更快。-rtsp_transport tcp避免UDP丟包導(dǎo)致的畫(huà)面花屏。如果要同時(shí)推多路每路一個(gè)FFmpeg進(jìn)程硬編能扛住8路左右1080p。提示MPP硬編對(duì)輸入格式有要求一般需要NV12。如果攝像頭輸出的是MJPEG或YUYVFFmpeg會(huì)自動(dòng)做格式轉(zhuǎn)換但轉(zhuǎn)換本身消耗CPU。條件允許的話讓攝像頭直接輸出NV12能進(jìn)一步降CPU。6. 常見(jiàn)問(wèn)題排查與避坑經(jīng)驗(yàn)6.1 configure找不到rockchip_mpp這是最高頻的問(wèn)題。排查順序pkg-config --exists rockchip_mpp echo OK不OK就是.pc文件問(wèn)題檢查/usr/local/lib/pkgconfig/rockchip_mpp.pc是否存在檢查PKG_CONFIG_PATH是否包含該目錄交叉編譯時(shí)檢查PKG_CONFIG_LIBDIR和PKG_CONFIG_SYSROOT_DIR.pc文件里的prefix路徑也要對(duì)如果MPP裝到了非/usr/local的路徑.pc里的路徑得跟著改或者用PKG_CONFIG_PATH指過(guò)去。6.2 運(yùn)行時(shí)找不到librockchip_mpp.soerror while loading shared libraries: librockchip_mpp.so.0: cannot open shared object file兩個(gè)解法一是sudo ldconfig刷新緩存二是把/usr/local/lib加進(jìn)/etc/ld.so.conf.d/echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/rkmpp.conf sudo ldconfig交叉編譯部署到板子時(shí)這個(gè)庫(kù)也要一起拷過(guò)去別只拷FFmpeg。6.3 硬編報(bào)錯(cuò) mpp encoder init failed通常是權(quán)限問(wèn)題或者VPU被占用。檢查/dev/mpp_service的權(quán)限ls -l /dev/mpp_service sudo chmod 666 /dev/mpp_service如果多個(gè)進(jìn)程同時(shí)用VPU可能會(huì)有資源競(jìng)爭(zhēng)。RK3588的VPU支持多路并發(fā)但MPP庫(kù)的實(shí)例管理有上限一般同時(shí)8路以內(nèi)沒(méi)問(wèn)題。超過(guò)的話需要做進(jìn)程間的資源調(diào)度。6.4 編碼出來(lái)的視頻花屏或綠屏多半是輸入格式不對(duì)。MPP硬編要求NV12如果輸入是YUV420PFFmpeg會(huì)轉(zhuǎn)但某些版本轉(zhuǎn)換有bug。顯式指定ffmpeg -i input.mp4 -pix_fmt nv12 -c:v h264_rkmpp output.mp4另外檢查-b:v碼率別設(shè)太低硬編在低碼率下質(zhì)量下降比軟編明顯1080p建議不低于2M。6.5 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因解決configure無(wú)rkmpp.pc文件缺失或路徑錯(cuò)檢查PKG_CONFIG_PATH編碼器列表無(wú)h264_rkmpp未顯式enable加--enable-encoder運(yùn)行時(shí)找不到庫(kù)ldconfig未刷新執(zhí)行l(wèi)dconfig硬編初始化失敗權(quán)限或VPU占用chmod 666 /dev/mpp_service輸出花屏像素格式不對(duì)指定-pix_fmt nv12交叉編譯鏈接錯(cuò)誤sysroot路徑污染設(shè)PKG_CONFIG_LIBDIR7. 幾個(gè)我踩過(guò)的坑和實(shí)用技巧第一個(gè)坑是MPP版本和內(nèi)核驅(qū)動(dòng)不匹配。我一開(kāi)始用了MPP master分支的最新代碼結(jié)果板子內(nèi)核是5.10的老驅(qū)動(dòng)API對(duì)不上硬編直接段錯(cuò)誤。后來(lái)?yè)Q回1.0.6 release就好了。所以MPP版本要跟內(nèi)核VPU驅(qū)動(dòng)的版本大致對(duì)應(yīng)別盲目追新。第二個(gè)坑是FFmpeg的--enable-rkmpp和--enable-decoder的順序。這兩個(gè)參數(shù)在configure里沒(méi)有順序要求但如果你用了--disable-everything那--enable-rkmpp必須在--enable-decoder之前否則decoder的enable會(huì)被disable覆蓋。這個(gè)邏輯有點(diǎn)反直覺(jué)我當(dāng)初調(diào)了半天。第三個(gè)實(shí)用技巧編譯時(shí)加--disable-doc。FFmpeg的文檔編譯很耗時(shí)而且需要texi2html等工具不加的話可能報(bào)錯(cuò)。加了這個(gè)參數(shù)能省5-10分鐘編譯時(shí)間對(duì)功能沒(méi)影響。第四個(gè)技巧關(guān)于交叉編譯的strip。編完之后用aarch64-linux-gnu-strip把二進(jìn)制和庫(kù)的符號(hào)表去掉體積能小一半以上。部署到存儲(chǔ)緊張的板子上很有用aarch64-linux-gnu-strip /opt/rk3588-sysroot/usr/local/bin/ffmpeg aarch64-linux-gnu-strip /opt/rk3588-sysroot/usr/local/lib/libav*.so*最后一個(gè)經(jīng)驗(yàn)保留一份configure的完整命令記錄。FFmpeg的configure參數(shù)一旦丟了下次想復(fù)現(xiàn)或者改配置就得重新摸索。我習(xí)慣把configure命令寫(xiě)進(jìn)一個(gè)build.sh腳本連同版本號(hào)、commit hash一起注釋在開(kāi)頭。這樣半年后回頭看或者換塊板子重編直接跑腳本就行不用回憶當(dāng)初怎么配的。這套流程走通之后RK3588的VPU算是真正用起來(lái)了。后面不管是做視覺(jué)SLAM的視頻流預(yù)處理還是YOLOv8推理前的解碼硬編硬解都能把CPU解放出來(lái)干別的。如果還要進(jìn)一步壓榨性能可以研究MPP的零拷貝模式讓解碼輸出直接進(jìn)NPU做推理省掉內(nèi)存拷貝的開(kāi)銷那是另一個(gè)話題了。