RKMedia下的音频录制

发布于:2024-12-18 ⋅ 阅读:(85) ⋅ 点赞:(0)

RKMedia下的音频录制

目录

RKMedia下的音频录制

回顾(RKMedia 视频开发)

音频开发

1、音频基本参数回顾

2、RKMedia 音频开发接口说明(框架)

3、RKMedia 音频开发 API 详解(函数详解)

(1)RK_MPI_AI_SetChnAttr(设置 AI 的某个属性通道)

(2)RK_MPI_AI_EnableChn(使能 AI 通道)

(3)RK_MPI_AI_StartStream(开启 AI 通道 流数据)

录制原始音频,需要连接麦克风,因为开发板的麦克风不能用

硬件说明

关于 USB 的 MIC 如何使用的!

原始音频的录制:

(4)RK_MPI_AO_SetChnAttr(设置 AO 的某个通道)

音频的录制和播放(也就是实现一边录制音频,一边播放音频)

(5)RK_MPI_AENC_CreateChn(创建 一个 音频的编码通道)

音频的编码:

音频的推流,拉流


回顾(RKMedia 视频开发)

-- 1、什么是RKMedia,为什么要用RKMedia开发?

之所以选择 RKMedia,他是厂商开发的音视频开发库!
最大的特点是:直接操作的是底层的硬件(VPU)做编解码加速!
也就是说昨天我们写的摄像头的编码几乎不占用 CPU

-- 2、RKMedia 开发视频的流程是怎样的?

  • 1:先去初始化 VI 通道,RK_MPI_VI_SetChnAttr();
  • 2:使能 VI 通道,RK_MPI_VI_EnableChn();
  • 3:创建一个编码通道 VENC,RK_MPI_VENC_CreateChn();这个结构体比较灵活
  • 4:将 VI 和 VENC 做数据绑定,RK_MPI_SYS_Bind();
  • 5:给 VENC 一个输出的回调,RK_MPI_SYS_RegisterOutCb();RKMedia 功能极为的强悍,毫不夸张,RKMedia 就是为了做项目而生!

-- 3、你为什么选择用 H264 而非用 H265?

  • 做监控 甲方/主管要求我们要用 H264,他是兼容性更高!

h264适合4k以下的视频编解码,h265更适合4k,但这是建议,没有强制规定

-- 4、H264 压缩倍率是多少?

  • 100到400 倍 ,大概100 多倍

-- 5:CBR 和 VBR 区别,你是选择的 CBR 还是 VBR?

  • CBR 叫做固定码率
  • VBR 叫做可变码率
  • 我选择的是 CBR,因为后期更好计算空间占用大小,做覆盖算法

cbr是每个图片文件固定大小,做监控最好用vbr,因为监控长时间图像是没有变化的,不需要那么大的码率,码率大小直接影响压缩比和速率

-- 之前写的这个参数就是码率:

myvenc_attr.stRcAttr.stH264Cbr.u32BitRate = 1920*1080;//码率

-- 6、如何调整 H264 的编码等级,已经如何调节压缩比率?

  • 三个等级: 66 , 77, 100,调那个比特率就可以调节压缩比率

-- 7:你采集的摄像头用的是什么格式,他跟 H264 有什么关系?

  • NV12

  • NV12跟 YUV420P 有什么区别?

  • NV12 存储:

YYYYYYYYYYY
UVUVUVUVUV

  • YUV420P

YYYYYYYYYYY
UUUUUVVVV

  • 各种摄像头数据,除了 RGB 数据之外,其他的都是 YUV 的一种

-- 8、你用是多少 w 的摄像头,哪家哪个型号?

  • 200W->1K->1080P = 1920*1080
  • 400W->2K->2160*1440
  • 800W->4K->3840*2160

-- 怎么得出的,为什么是200w,因为1920*1080约等于200w

-- 9、额外说明昨天的三个函数的地方(ISP):

alt text

  • 为什么没有这三句话,我们的摄像头就不会工作,甚至连个文件夹填错都不会让摄像头工作!这个就要给大家聊一聊 ISP 了

-- 什么是 ISP:

  • 所有的摄像头叫做图像传感器,图像传感器采集的拜尔数据是正常人无法接受的数据、有色差、畸变、噪声……

  • 没有经过ISP处理的图片就是下图这样的,颜色也不对,图片还是扭曲的:

alt text

alt text

  • 图像数据需要做处理->成为你拿到的 JPEG、RGB、YUV 这样正常的数据,所谓的原始数据的处理我们就叫做 ISP 数据图像调节

-- 其中有些摄像头自带 ISP->摄像头输出的图像就比较固定,难做调节

  • 原厂出厂的芯片级别百分100%不带 ISP 的!而我们用的 GC2053 他也不带 ISP,这个时候我们想要用这个摄像头开发,就需要芯片(socRV1126) 就需要他带有ISP 功能

ISP 调节非常的灵活,需要用特殊的专业软件做数据的调节!
这个软件你下载不到,就算你下载到了你还要租实验室做调节

厂商提供了厂商适配的摄像头的调节好的配置文件!
你可以直接用 /oem/etc/iqfiles
这里面就是你们的调节文件!

-- 我个人建议,如果以后你进公司之后
做项目先去看一看官方支持哪些摄像头做了调节文件
千万不要想着自己调节,前两天我还在群里面看的有其他公司工程师未调 节摄像头而发愁,而我也是发生类似的事情,建议买自带 ISP 或者厂商芯片已经支持调节过摄像头!


音频开发

1、音频基本参数回顾

-- 采样率

  • 每秒采样的次数 8000 16000 32000 44100 48000
  • 我们最常用就是 48000 44100

-- 声道数:

  • 单声道
  • 双声道->双声道

-- 采样格式

  • S8 S16 S32 F32

-- 采样多少个数据打一个包

  • 512 1152 1024 等

2、RKMedia 音频开发接口说明(框架)


int main()
{
  //1: 初始化 AI->Audio Input->声音捕获
  //设置 AI 的某个通道的属性
  RK_MPI_AI_SetChnAttr();
  //2:使能这个 AI 的通道
  RK_MPI_AI_EnableChn();
  //3:开启 AI 流
  RK_MPI_AI_StartStream();
  //4:获取音频的数据保存在本地文件!
  //或者自动获取->回调!
  //RK_MPI_SYS_RegisterOutCb();
  while(1)
  {
  //RK_MPI_SYS_GetMediaBuffer();//手动获取
  sleep(1);
  }
  return 0;
}

3、RKMedia 音频开发 API 详解(函数详解)

(1)RK_MPI_AI_SetChnAttr(设置 AI 的某个属性通道)

-- 函数的功能:设置 AI 的某个通道的属性

-- 函数的原型:

RK_S32 RK_MPI_AI_SetChnAttr(
  VENC_CHN AiChn,
  const AI_CHN_ATTR_S *pstAttr
);

-- 参数说明:

  • AiChn:他的取值范围 0-7 也就是最多支持 8 个通道

  • pstAttr:

typedef struct rkAI_CHN_ATTR_S {
  RK_CHAR *pcAudioNode;
  SAMPLE_FORMAT_E enSampleFormat;
  RK_U32 u32Channels;
  RK_U32 u32SampleRate;
  RK_U32 u32NbSamples;
  AI_LAYOUT_E enAiLayout;
} AI_CHN_ATTR_S;
  • pcAudioNode:声卡对应的节点仍然可填三个选项:

hw:0 ,default(最建议它,兼容性最高) , plughw:0

  • enSampleFormat:采集声卡数据的格式

RK_SAMPLE_FMT_S16 我建议使用这个格式

  • u32Channels:

你要用几个声道-> 2 个
特殊编码情况只能用 1 个

  • u32SampleRate

采样率: 48000 44100 ........

  • u32NbSamples

  • 采样数 1152 1024 ......

  • enAiLayout:声道的布局!AI_LAYOUT_NORMAL->默认即可

-- 函数返回值:

  • 成功返回 0
  • 失败返回 非 0

(2)RK_MPI_AI_EnableChn(使能 AI 通道)

-- 函数的功能:使能 AI 通道 -- 函数的原型:

RK_S32 RK_MPI_AI_EnableChn(AI_CHN AiChn);

-- 函数的参数:

  • AiChn:

你设置的哪个通道 你就使能哪个通道

-- 函数返回值:

  • 成功返回 0
  • 失败返回 非 0
(3)RK_MPI_AI_StartStream(开启 AI 通道 流数据)

-- 函数的功能:开启 AI 通道 流数据 -- 函数的原型:

RK_S32 RK_MPI_AI_StartStream(AI_CHN AiChn);

-- 函数的参数:

  • AiChn:你设置的哪个通道 你就开启哪个通道

网站公告

今日签到

点亮在社区的每一天
去签到