0
点赞
收藏
分享

微信扫一扫

《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​

求索大伟 2023-02-08 阅读 30


第五章 RKMedia编译和使用​

5.1 RKMedia编译

Rkmedia是RK官方封装一层简易的API,把RGA、MPPRKNN等等这些接口封装成高级的接口。在SDK官方的源码目录下,运行以下命令进行跳转:

cd external/rkmedia/examples/

ls

运行命令结果如下所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_默认值


图4.12.1.1 rkmedia官方的demo

里面有很多C文件的代码,可以结合Rockchip_Developer_Guide_Linux_RKMedia_CN.pdf文档(路径为:开发板光盘A-基础资料à08、RV1126参考资料àRV1126_RV1109àMultimediaàRockchip_Developer_Guide_Linux_RKMedia_CN.pdf)进行修改和测试。编译方法如下命令所示:

source envsetup.sh alientek_rv1126 //选择环境变量alientek_rv1126​
make rkmedia-dirclean //清除刚刚编译的rkmedia​
make rkmedia //重新编译rkmedia​
./build.sh rootfs //打包到文件系统里面

编译完成后重新烧录oem.img分区即可,因为RK官方把音频库都放在oem.img分区里面。

5.2 RKMedia使用

在上一小节里面我们已经编译和烧录进开发板。接着就接上串口,开发板上电,进入终端。在终端里面输入“rkmedia_”在按TAB键,会显示很多命令,运行结果如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_数据_02


图4.12.2.1 rkmedia命令例程

这里列一些常用的例程(例程太多了和有些例程有BUG)讲解如何使用这些命令:

5.2.1 rkmedia_ai_test

调用录音功能,录制PCM格式的音频文件。下表是使用的参数:

选项

描述

默认值

-d

音频输入节点名

default

-r

输出文件的采样率

16000

-c

输出文件的声道

2

-o

输出文件路径

/tmp/ai.pcm

-s

输出文件的帧数

1024

-h

查看帮助

使用方法,运行以下命令:

rkmedia_ai_test

amixer cset name='Digital Capture Volume' 120,120 //录音质量不行,可以设置录音的音量大小

运行的时候可以靠近对着MIC说好,这样就能录音了。运行结果如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_03


5.2.1.1 rkmedia_ai_test运行打印信息

如果想结束程序,在终端里面按“Ctrl+C”结束程序。查看/tmp/ai.pcm文件有么有数据产生,结果如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_04


5.2.1.2 ai.pcm的文件查看

5.2.2rkmedia_ao_test

播放PCM格式的音频文件,下表是使用的参数:

选项

描述

默认值

-d

音频输入节点名

default

-r

输入文件的采样率

16000

-c

输入的声道

2

-i

输入文件路径

-s

输入文件的帧数

1024

-h

查看帮助

使用方法:

rkmedia_ao_test -i /tmp/ai.pcm

就会播放我们刚刚录的声音了,运行结果如下所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_05


5.2.2.1 rkmedia_ao_test播放PCM格式的音频

5.2.3 rkmedia_ai_aenc_test

调用录音功能,把输入的音频进行编码支持MP3 、MP2、g711u、g771a和g726(测试发现MP3格式是不能录制的,跟代码发现在调用rkmedia库就报错了,估计是SDK版本问题)。下表是使用的参数:

选项

描述

默认值

-d

音频输入节点名

default

-r

输出文件的采样率

16000

-c

输出文件的声道

2

-o

输出文件路径

/tmp/aenc.mp2

-l

输出文件的帧数

1024

-f

输出文件的位深度

s16

-b

输出文件的比特率

64000

-t

输出文件的编码类型

MP2

-h

查看帮助

使用方法为:

rkmedia_ai_aenc_test -l 1152 -o aenc.mp2

对着MIC说话即可录音,如果想结束程序,在终端里面按“Ctrl+C”结束程序。运行结果如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_06


5.2.3.1 rkmedia_ai_aenc_test录音MP3格式

在终端里面按“Ctrl+C”结束程序,通过ADB命令把“aenc.mp2”文件拷贝到Windows系统,点播放即可。

5.2.4 rkmedia_adec_ao_test

解码音频文件进行播放,实际测试只支持g711u和g771a,没有办法解码MP2和MP3格式,不知道是不是SDK包的版本太新,以前版本还支持AAC现在已经不支持,查看源码发现,这些MP3、MP2解码结构体都没有定义。

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_07


图5.2.4.1 rkmedia_adec.h头文件

下表是此命令的参数:

选项

描述

默认值

-d

音频输出节点名

default

-r

输入文件的采样率

16000

-c

输入文件的声道

2

-o

输入文件路径

/tmp/aenc.mp3

-l

输入文件的帧数

1024

-f

输入文件的位深度

s16

-b

输入文件的比特率

64000

-t

输入文件的编码类型

mp3

-h

查看帮助

使用方法如下命令:

rkmedia_adec_ao_test -i aenc.g711u -t 3

“-t 3”指定解码格式为g711u。刚刚已经说了实际测试只支持g711u或g711a格式,没有这两种格式的文件,可以使用rkmedia_ai_aenc_test命令进行录制。运行结果如下所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_默认值_08


5.2.4.2 adec音频解码打印信息

5.2.5 rkmedia_vi_get_frame_test

使用此命令前要先退出QT界面(点击设置à退出),获取摄像头的数据(VI表示摄像头的输入),保存为NV12格式的视频格式,下表是此命令的参数:

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h/--height

分辨率高

1080

-w/--width

分辨率宽

1920

-d/--device_name

设备节点

rkispp_scale0

-o/--output

输出文件路径,未设置则不输出

-c/--frame_cnt

输出帧数,设置-1不限制。

未设置输出路径不生效。

-1

-?/--help

显示帮助信息

使用rkmedia_vi_get_frame_test命令测试如下所示:

rkmedia_vi_get_frame_test -a /etc/iqfiles/ -o 1080.nv12

-a /etc/iqfiles/”正点原子的两款MIPI摄像头的aiq配置文件放到/etc/iqfiles/目录里,所以我们要指定从这个目录去获取摄像头的配置文件,“-o 1080.nv12”指定的输出文件为1080.nv12。如果是接了双目摄像头需要加参数“I”去指定那一个摄像头录制。运行命令如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_09


5.2.5.1 rkmedia_vi_get_frame_test运行打印信息图

没有指定输出帧数需要按“Ctrl+C”结束测试程序。通过ADB把文件拷贝到Ubuntu系统里面,运行以下命令进行测试:(Ubuntu系统里面必须要安装ffplay命令)

ffplay -f rawvideo -pix_fmt nv12 -video_size 1920x1080 1080.nv12

5.2.6 rkmedia_vi_venc_test

使用此命令前要先退出QT界面(点击设置à退出),获取摄像头的数据,通过VENC进行编码成H264/H265/MJPEG格式的文件(VENC是rkmedia一个编码模块),下表是此命令的参数选项(VIàVENC)

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h/--height

分辨率高

1080

-w/--width

分辨率宽

1920

-d/--device_name

设备节点

rkispp_scale0

-o/--output

输出文件路径,未设置则不输出

-e/--encode

编码格式:h264/h265/mjpeg

H264

-c/--frame_cnt

输出帧数,设置-1不限制。

未设置输出路径不生效。

-1

-?/--help

显示帮助信息

使用rkmedia_vi_venc_test命令测试如下所示:

rkmedia_vi_venc_test -a /etc/iqfiles/ -o output.h264

-a /etc/iqfiles/”正点原子的两款MIPI摄像头的aiq配置文件放到/etc/iqfiles/目录里,所以我们要指定从这个目录去获取摄像头的配置文件,“-o output.h264”指定的输出文件为output.h264。如果是接了双目摄像头需要加参数“I”去指定那一个摄像头录制,可以使用此命令去录制4K视频只需要添加参数“-h 2160 -w 3840”。运行命令如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_默认值_10


5.2.6.1 rkmedia_vi_venc_test运行打印信息图

从图中可以得知视频的默认帧数为30帧,没有指定输出帧数需要按“Ctrl+C”结束测试程序。通过ADB命令把文件拷贝到Ubuntu系统下,使用ffplay进行播放:

ffplay output.h264

  • rkmedia_vi_vo_test使用此命令前要先退出QT界面(点击设置à退出),获取摄像头的数据,经过RGA处理,显示到屏幕上。本例程需要先退出QT综合界面(设置à退出),屏幕为720屏。下表是此命令的参数选项:

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h

显示分辨率高

1280

-w

显示分辨率宽

720

-?/--help

显示帮助信息

使用rkmedia_vi_vo_test命令测试如下所示:

rkmedia_vi_vo_test -a /etc/iqfiles/

-a /etc/iqfiles/”正点原子的两款MIPI摄像头的aiq配置文件放到/etc/iqfiles/目录里,所以我们要指定从这个目录去获取摄像头的配置文件。运行命令后可以看出摄像头的数据已经显示到屏幕上,默认为30fps。按“Ctrl+C”结束测试程。

5.2.7 rkmedia_venc_jpeg_test

使用此命令前要先退出QT界面(点击设置à退出),获取摄像头的数据,经过VENC编码,在叠加RGA模块设置位图,简单说就是把摄像头的数据给VENC进行编码,用RGA添加彩条,保存为jpeg格式的图片。下表是此命令的参数选项:

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h/--width

输出分辨率宽

480

-w/--height

输出分辨率宽

720

-W/--Width

输入分辨率宽

1080

-H/--Height

输入分辨率高

1920

-o

输出文件夹的路径

/tmp/

-?/--help

显示帮助信息

使用rkmedia_venc_jpeg_test命令测试如下所示:

rkmedia_venc_jpeg_test -a /etc/iqfiles/

-a /etc/iqfiles/”正点原子的两款MIPI摄像头的aiq配置文件放到/etc/iqfiles/目录里,所以我们要指定从这个目录去获取摄像头的配置文件。运行命令后,就会有以下打印信息,如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_默认值_11


图5.2.7.1 rkmedia_venc_jpeg_test打印信息

按“ENTER”键即可实现jpeg格式的截图,结束程序可以先按“Ctrl+C”然后按“ENTER”键即可结束程序。结束程序的打印如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_默认值_12


5.2.7.2 结束rkmedia_venc_jpeg_test打印信息图

结束后,在/tmp/目录下生成很test_jpegX.jpeg文件,拷贝到Ubuntu查看即可。

5.2.8 rkmedia_vi_venc_rtsp_test

使用此命令前需要几个条件:

  • 退出QT界面
  • 安装vlc软件,Windows系统下安装vlc软件,安装包位于开发板光盘Aà、软件à vlc-3.0.18-win64.exe。Ubuntu下运行此命令:sudo apt install vlc
  • 开发板要接上网线,电脑的网络和开发板的网络处于同一个网段。

使用VI模块去获取摄像头的数据,经过VENC编码,在使用rtsp进行数据的推流。下表是此命令的参数选项:

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h/--width

输出分辨率高

1080

-w/--height

输出分辨率宽

1920

-d

设备节点

rkispp_scale0

rkispp_scale0

rkispp_scale1

rkispp_scale2

-e

编码格式

h264

h264/h265

-?/--help

显示帮助信息

需要知道当前开发板的IP地址,使用ifconfig命令去获取IP地址,比如笔者这边的IP地址为192.168.6.111。使用rkmedia_vi_venc_rtsp_test 命令测试如下所示:

rkmedia_vi_venc_rtsp_test -a /etc/iqfiles/

运行后有以下数据打印,如图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_数据_13


5.2.8.1 rkmedia_vi_venc_rtsp_test打印信息

上图可以看出有分辨率的大小和fps帧数,可以使用vlc软件,去获取摄像头的数据,打开vlc软件(笔者是在Ubuntu下打开的,Windows上的用法差不多),如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_14


图5.2.8.2 Ubuntu系统下开启vlc

图5.2.8.2中点击“媒体”进入“打开媒体”,如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_15


5.2.8.3 打开媒体

在图4.2.8.3中“please enter a network URL:框架中输入以下链接:

rtsp://192.168.6.111/live/main_stream

这里的IP地址为开发板上的IP地址,如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_数据_16


5.2.8.4 拉流设置

设置好拉流的地址后,直接点击播放,即可出现摄像头的播放数据,如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_开发板_17


5.2.8.5 拉流视频播放

从上图可以看出,拉流的视频分辨率为:1920x1080@30,数据格式为H264。大家可以修改分辨率。

5.2.9 rkmedia_vi_vo_test​

使用此命令前要先退出QT界面(点击设置à退出),使用VI获取摄像头的数据,通过接口发送到VO,就能实现显示到屏幕上。下表是此命令的参数选项(VIàVO):

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-M

ISP下的multictx开关

0

0:表示关闭

1:开启

-I

ISP下的摄像头切换

0

0:MIPI CSI0

1: MIPI CSI1

-h

分辨率高

1280

-w

分辨率宽

720

-?/--help

显示帮助信息

使用命令如下所示:

rkmedia_vi_vo_test -a /etc/iqfiles/

运行结果如下图所示:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_数据_18


图5.2.9.1 运行rkmedia_vi_vo_test结果

接着我们的显示屏,就能显示摄像头的实时数据。

5.2.10 rkmedia_vi_double_cameras_switch_test​

使用此命令前要先退出QT界面(点击设置à退出),使用2个VI获取摄像头的数据(双目摄像头的测试需要接两个摄像头),通过接口发送到VMIX,VMIX就会把合成一帧数据,然后把数据发送到VO里,这样就能够显示两个摄像头的数据。下表是此命令的参数选项(VIàVMIXàVO)

选项

描述

默认值

备注

-a/--aiq

启动ISP功能,如果测试的摄像头为MIPI 摄像头基本都需要开启ISP功能,参数为aiq文件所在文件夹路径。

/oem/etc/iqfiles/

-h

输出视频分辨率高

1280

-w

输出视频分辨率宽

720

-W

输入视频分辨率宽

1920

-H

输入视频分辨率高

1080

-u

UI z层高度,取值范围[0,1]

1

-?/--help

显示帮助信息

使用命令如下所示:

rkmedia_vi_double_cameras_test -a /etc/iqfiles/ -u 0

注意:需要选择图层0,这个和drm框架相关。运行结果如下打印:

 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 RKMedia编译和使用​_数据_19


图5.2.10 rkmedia_vi_double_cameras_test运行打印


举报

相关推荐

0 条评论