热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RKMEDIA调试笔记

1RKMEDIA框架    RKMedia提供了一种媒体处理方案,可支持应用软件快速开发。RKMedia在各模块基础API上做进一步
1 RKMEDIA 框架

       RKMedia提供了一种媒体处理方案,可支持应用软件快速开发。RKMedia在各模块基础API上做进一步封装,简化了应用开发难度。该平台支持以下功能:

VI(输入视频捕获 "Video inpuput capture")、

VENC(H.265/H.264/JPEG/MJPEG 编码 "Video Encode") ;

VDEC(H.265/H.264/JPEG、MJPEG 解码 "Video Decode") ;

VO(视频输出显示 "Video Output display) ;

RGA视频处理(包括旋转、缩放、裁剪);

AI(音频采集 “Audio input”);

AO(音频输出 “VIDEO OUTPUT”);

AENC(音频编码 "audio encode");

ADEC(音频解码 "audio decode");

MD(移动侦测 "move detection");

OD(遮挡侦测 "occlude detection")。

框架源码: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 总体框架图如下:

2. 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=y
BR2_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 接口的程序:

demo_h264_rkmedia: A demo use rkmedia to encode H.264 on Rockchip RV1109/RV1126.

几点总结

RKMEDIA 程序运行的条件

1> 确保 ispserver 已经启动。通常情况要先启动 ispserver,如果没有启动,可以使用以下命令:

ispserver -no-sync-db &

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

2> 使能 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,一般在一个线程中被循环调用。

注意:如果使用了 RK_MPI_SYS_Bind,此函数将获取不到数据;所以它通常结合 RK_MPI_VI_StartStream 来使用。


推荐阅读
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
author-avatar
手机用户2502893987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有