rkmedia 框架

RKMedia提供了一种媒体处理方案,可支持应用软件快速开发。RKMedia在各模块基础API上做进一步封装,简化了应用开发难度。该平台支持以下功能:VI(输入视频捕获)、VENC(H.265/H.264/JPEG/MJPEG 编码)、VDEC(H.265/H.264/JPEG、MJPEG 解码)、VO(视频输出显示)、RGA视频处理(包括旋转、缩放、裁剪)AI(音频采集)、AO(音频输出)、AENC(音频编码)、ADEC(音频解码)、MD(移动侦测)、OD(遮挡侦测)。

框架源码:external/rkmedia/src

例程:external/rkmedia/examples

SDK中的参考文档:

external/rkmedia/doc

docs/RV1126_RV1109/Multimedia/Rockchip_Developer_Guide_Linux_RKMedia_CN.pdf

docs/RV1126_RV1109/Multimedia/Rockchip_Instructions_Linux_Rkmedia_CN.pdf

rkmedia 总体框架图如下:

rkmedia 编译配置

可参考如下配置在buildroot中对rkmedia的编译进行配置:

BR2_PACKAGE_RKMEDIA=y
BR2_PACKAGE_RKMEDIA_MPP=y
BR2_PACKAGE_RKMEDIA_MPP_ENCODER_OSD=y
BR2_PACKAGE_RKMEDIA_FFMPEG=y
BR2_PACKAGE_RKMEDIA_ALSA_PLAYBACK=y
BR2_PACKAGE_RKMEDIA_ALSA_CAPTURE=y
BR2_PACKAGE_RKMEDIA_V4L2_CAPTURE=y
BR2_PACKAGE_RKMEDIA_RKRGA=y
BR2_PACKAGE_DRM_DISPLAY_OUTPUT=y
BR2_PACKAGE_RKMEDIA_MOVE_DETECTION=y
BR2_PACKAGE_RKMEDIA_OCCLUSION_DETECTION=y
BR2_PACKAGE_RKMEDIA_ANR=y
BR2_PACKAGE_RKMEDIA_AEC=y
BR2_PACKAGE_RKMEDIA_EXAMPLES=yBR2_PACKAGE_CAMERA_ENGINE_RKAIQ=y
BR2_PACKAGE_CAMERA_ENGINE_RKAIQ_IQFILE="os04a10_CMK-OT1607-FV1_M12-40IRC-4MP-F16.xml"BR2_PACKAGE_FFMPEG=y
BR2_PACKAGE_FFMPEG_ENCODERS="aac adpcm_g726 pcm_alaw pcm_mulaw"
BR2_PACKAGE_FFMPEG_DECODERS="aac adpcm_g726 pcm_alaw pcm_mulaw"
BR2_PACKAGE_FFMPEG_MUXERS=""
BR2_PACKAGE_FFMPEG_DEMUXERS=""
BR2_PACKAGE_FFMPEG_PARSERS="aac"
BR2_PACKAGE_FFMPEG_BSFS=""
BR2_PACKAGE_FFMPEG_PROTOCOLS=""
BR2_PACKAGE_FFMPEG_FILTERS=""
# BR2_PACKAGE_FFMPEG_INDEVS is not set
# BR2_PACKAGE_FFMPEG_OUTDEVS is not set
# BR2_PACKAGE_ALSA_LIB_ALOAD is not set
# BR2_PACKAGE_ALSA_LIB_SEQ is not set
# BR2_PACKAGE_ALSA_LIB_ALISP is not set
# BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS is not set
BR2_PACKAGE_LIBV4L=y

示例程序

rkmedia 的 API 使用比较容易理解,可以参考 rkmedia examples (rv1126_rv1109_sdk/external/rkmedia/examples)中的代码来实现自己的音视频编解码程序。

例如以下的几个程序:

音频编解码、AEC/ANR 算法:rkmedia_audio_test.c

视频预览:rkmedia_vi_vo_test.c

JPEG 编码:rkmedia_venc_jpeg_test.c

H264 编码:rkmedia_vi_venc_test.c

H265 编码:rkmedia_venc_avbr_test.c

另外可以参考以下源码,它演示了如何在 rkmedia 目录之外,配置和编译自己编写的使用 rkmedia 接口的程序:

https://gitee.com/wu_yumin/demo_h264_rkmedia

几点总结

rkmedia 程序运行的条件

  • sensor 非 HDR 模式:确保 ispserver 已经启动

    通常情况要先启动 ispserver,如果没有启动,可以使用以下命令:

    ispserver -no-sync-db &
    

    同时要确保没有其他进程占用摄像头。

  • sensor 为 HDR模式:需要使用 aiq 选项指定 iqfiles 目录

    如下命令:

    rkmedia_venc_jpeg_test --aiq /oem/etc/iqfiles
    

    使用 --aiq 选项时则不能使用 ispserver,两者存在冲突。

    aiq 选项完成一些初始化步骤,可以参考代码中 RKAIQ 这个宏:

#ifdef RKAIQrk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;RK_BOOL fec_enable = RK_FALSE;int fps = 30;char *iq_file_dir = NULL;if ((argc > 1) && !strcmp(argv[1], "-h")) {printf("\n\n/Usage:./%s [--aiq iq_file_dir]\n", argv[0]);printf("\t --aiq iq_file_dir : init isp\n");return -1;}if (argc == 3) {if (strcmp(argv[1], "--aiq") == 0) {iq_file_dir = argv[2];}}SAMPLE_COMM_ISP_Init(hdr_mode, fec_enable, iq_file_dir);SAMPLE_COMM_ISP_Run();SAMPLE_COMM_ISP_SetFrameRate(fps);
#else(void)argc;(void)argv;
#endif
  • 使能 DRM 驱动

    这是一个非常容易忽略的点。rkmedia 会通过 DRM 去申请 buffer,若没有使能 DRM,则视频流创建失败。

    之前开发一款IPCamera产品,由于是无屏的设备,所以在设备树中把 display_subsystem 节点禁用了,结果查了将近一周的时间才查出原因在这里。

    &display_subsystem {status = "okay";
    };
    

启动视频流

创建完各个 Channel 之后,视频流通道实际处于休眠状态。在调用 RK_MPI_SYS_Bind 将输入和输出 bind 起来之后,才将视频流启动。对于只有VI,而没有 VENC 等后端模块的使用场景,不能使用 RK_MPI_SYS_Bind ,而是使用 RK_MPI_VI_StartStream。

  • RK_MPI_SYS_Bind

    /*** @pstSrcChn: 源通道指针* @pstDestChn: 目的通道指针*/
    RK_S32 RK_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn,const MPP_CHN_S *pstDestChn);
    
  • RK_MPI_VI_StartStream

    /*** @ViPipe: VI 管道号* @ViChn: VI 通道号*/
    RK_S32 RK_MPI_VI_StartStream(VI_PIPE ViPipe, VI_CHN ViChn);
    

获取视频流

获取视频流有两个接口:RK_MPI_SYS_RegisterOutCb 和 RK_MPI_SYS_GetMediaBuffer

  • RK_MPI_SYS_RegisterOutCb

    /*** @pstChn: 指定通道指针* @cb: 数据输出回调函数*/
    RK_S32 RK_MPI_SYS_RegisterOutCb(const MPP_CHN_S *pstChn, OutCbFunc cb);
    

    注册输出回调函数,当对应的 MPP_CHN_S 有输出时,回调函数函数被调用。

    注意:不能在回调函数中处理耗时操作,否则对应通道数据流将被阻塞。

  • RK_MPI_SYS_GetMediaBuffer

    /*** @enModID: 模块号* @s32ChnID: 通道号* @s32MilliSec: 阻塞等待时间*/
    MEDIA_BUFFER RK_MPI_SYS_GetMediaBuffer(MOD_ID_E enModID, RK_S32 s32ChnID, RK_S32 s32MilliSec);
    

    主动获得 MediaBuffer,一般在一个线程中被循环调用。

rkmedia 调试笔记相关推荐

  1. 调试笔记--jlink 变量转实时波形小技巧

    调试笔记–jlink 变量转实时波形小技巧 上篇讲了jlink RTT组件在RAM中开辟一段内存,将printf字符串存入然后通过jlink调试接口读取RAM,将printf字符串在jlink-RTT ...

  2. 调试笔记--keil 测量周期小技巧

    调试笔记–keil 测量周期小技巧 本文参考安富莱专题教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&ext ...

  3. 调试笔记--keil 断点调试小技巧

    调试笔记–keil 断点调试小技巧 给变量打断点 调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事. 将要监视的全局变量添加到watch窗口 选中 ...

  4. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...

  5. keil4怎么移植其他人的程序_【调试笔记】韦东山:在100ask_imx6ull上移植使用六轴传感器ICM20608...

    之前发了LCD调试笔记,大家很感兴趣,所以这次再来一篇:六轴传感器ICM20608驱动移植笔记,大家还需要什么移植笔记?可以留言.我们尽量满足. 1.1 移植思路 先找到驱动:也许内核里已经有,也许需 ...

  6. RK3399 GT1X触摸屏驱动调试笔记

    硬件环境 1.Firefly AIO-3399(AI)开发版: 2.恒智的5寸电容触摸屏800X480,I2C驱动支持GT5688. 操作系统 Android 7.2 for rockship Ste ...

  7. Rockchip基于RK3566/RK3568 WiFi AP6256调试笔记

    1.开发平台 CPU:RK3566 编译环境:Ubuntu18.04 内核版本:kernel 4.19 2.目的 因为RK3566/RK3568支持SDIO3.0并且向下兼有SDIO2.0接口,由于核 ...

  8. 雅马哈四轴机器人调试笔记

    雅马哈四轴机器人调试笔记 1.0 先简单说下硬件,如下图对着插就行,雅马哈四轴主要硬件有控制器跟机械手,机械手到控制器主要有4跟电机接口电缆,每2个轴有一个编码器接口电缆,每根轴有一个配置的数据备份电 ...

  9. OMAP3530-mini调试笔记(2)

    PS:USB不能正常工作的根本原因参见调试笔记(3) 各个版本的x-loader和u-boot对kernel的支持情况: U-Boot 2011.12-00010-ga3eb89c (Jan 29 2 ...

最新文章

  1. halcon学习笔记——(5)HDevelop language(异常处理)
  2. CF A. DZY Loves Hash
  3. ASP.NET缓存全解析4:应用程序数据缓存(转)
  4. mysql查询没有权限试图_MySQL迁移后提示查询view权限不足的处理
  5. LeetCode 686. 重复叠加字符串匹配
  6. Upload-Labs(1-5)
  7. 欧菲光:拟对子公司江西晶超增资9亿元
  8. 使用 pyinstaller 打包 py 文件成 exe 程序
  9. (MYSQL) Unknown table 'a' in MULTI DELETE的解决办法
  10. 【SAS NOTES】数据输出-proc export
  11. JavaScript
  12. 孩子必听的数学家故事——笛卡尔
  13. 关于龙蜥社区20个问题 |龙蜥问答第1期
  14. 带你理解beta分布
  15. JCR分区(WOS或Thomson Reuters或汤姆森 路透)和中科院分区(附网址及查询方法)...
  16. 一、Chrome浏览器调试工具/文档
  17. inno setup 卸载注册表_inno setup 自定义生成的卸载程序
  18. JavaScript Array数组分页
  19. 基于matlab多功能相控阵雷达资源管理的服务质量优化
  20. Geoserver发布wms地图服务的样式制作(地图工具篇.4)

热门文章

  1. 创业致富故事:本是无心之举,但赶上了风口,4年下来赚了100万
  2. 常用格式判断(邮箱、电话号码、身份证件)
  3. 苦战5局险胜许昕 樊振东:心态有波动 以后要克服
  4. 【Grammar】in 和 within 用法和区别
  5. C#开发之——接口的实现(7.2)
  6. 程序员现状分析,什么时候是进入IT行业的黄金时期?千万注意了
  7. (20)打鸡儿教你Vue.js
  8. HTML - html之间传值并接收
  9. 湖南大学计算机学院院领导,罗娟-湖大信息科学与工程学院
  10. 再更新一篇,开始打造自己的win7桌面小工具