友善RK3399v2平台利用rkmpp实现硬件编解码加速

测试VPU

编译mpp

bash 复制代码
sudo apt update
sudo apt install gcc g++ cmake make
cd ~
git clone https://github.com/rockchip-linux/mpp.git
cd mpp/build/linux/aarch64/
sed -i 's/aarch64-linux-gnu-gcc/gcc/g' ./arm.linux.cross.cmake
sed -i 's/aarch64-linux-gnu-g++/g++/g' ./arm.linux.cross.cmake
./make-Makefiles.bash
make -j$(nproc)
sudo make install
cd test
sudo cp mpp_info_test /usr/local/bin/mpp_info_test
sudo cp mpi_dec_test /usr/local/bin/mpi_dec_test
sudo cp mpi_enc_test /usr/local/bin/mpi_enc_test

查看mpp版本

bash 复制代码
mpp_info_test
tail /var/log/syslog

测试硬解码

bash 复制代码
wget http://112.124.9.243/test/200frames_count.h264 -O 200frames_count.h264
mpi_dec_test -t 7 -i 200frames_count.h264
tail /var/log/syslog

mpi_dec_test: decode 200 frames time 213 ms delay 3 ms fps 934.71

  • 这条日志详细记录了解码性能的关键指标:
    • 解码了200帧
    • 总耗时213毫秒
    • 平均每帧延迟3毫秒
    • 帧率为934.71 FPS(每秒帧数),这是一个非常高的帧率,显示了解码过程的高效性。

测试硬编码

bash 复制代码
wget http://112.124.9.243/test/4k_nv12.yuv.gz -O 4k_nv12.yuv.gz
gzip -d 4k_nv12.yuv.gz
mpi_enc_test -w 3840 -h 2160 -t 7 -i 4k_nv12.yuv -f 0 -o 4k_nv12.h264
tail /var/log/syslog

mpi_enc_test: chn 0 encode 241 frames time 31623 ms delay 107 ms fps 7.62 bps 32174975

  • 这条信息提供了编码任务的性能汇总:
    • encode 241 frames 表示共编码了241帧。
    • time 31623 ms 表示总耗时约31秒。
    • delay 107 ms 表示平均每帧延迟107 毫秒。
    • fps 7.62 表示平均每秒编码约7.62 帧,显示编码速度。
    • bps 32174975 表示平均每秒传输的比特数,即编码的视频流的比特率。

推流实验

ffmpeg下载

服务器配置(NGINX)

复制代码
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev
wget http://nginx.org/download/nginx-1.21.6.tar.gz
tar -zxvf nginx-1.21.6.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
cd nginx-1.21.6
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make
sudo make install
sudo vim /usr/local/nginx/conf/nginx.conf

添加RTMP配置

复制代码
rtmp {
    server {
        listen 1935; # 监听端口
        chunk_size 4096;

        application live {
            live on; # 允许实时视频流
            record off; # 不记录视频流
        }
    }
}

server {
    listen 8080;
    ...
}

重启nginx服务器

复制代码
sudo /usr/local/nginx/sbin/nginx	#启动nginx
sudo /usr/local/nginx/sbin/nginx -s reload #重启nginx
ffmpeg -f v4l2 -input_format mjpeg -framerate 30 -video_size 1920x1080 -i /dev/video10 -c:v h264_v4l2m2m -b:v 2M -f flv rtmp://192.168.137.82/live/stream
ffmpeg -f v4l2 -input_format yuyv422 -framerate 10 -video_size 1024x768 -i /dev/video10 -c:v h264_v4l2m2m -b:v 2M -f flv rtmp://192.168.137.82/live/stream

Gstreamer下载

复制代码
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-rtsp

添加RTMP配置

复制代码
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}

http {
    server {
        listen 8080;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /usr/local/nginx/html;
        }
    }
}

硬件加速推流指令

复制代码
gst-launch-1.0 -v v4l2src device=/dev/video10 ! image/jpeg,width=640,height=480,framerate=30/1 ! mppjpegdec ! videoconvert ! video/x-raw,format=NV12 ! queue max-size-time=0 max-size-buffers=1 leaky=downstream ! mpph264enc ! h264parse ! flvmux streamable=true ! rtmpsink location=rtmp://192.168.137.82/live/stream

gst-launch-1.0 -v v4l2src device=/dev/video10 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegdec ! videoconvert ! video/x-raw,format=NV12 ! queue max-size-time=0 max-size-buffers=1 leaky=downstream ! mpph264enc ! h264parse ! flvmux streamable=true ! rtmpsink location=rtmp://192.168.137.82/live/stream
相关推荐
AlfredZhao1 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334667 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪8 小时前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫1 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875241 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant