KDocs 研发资料库
  • 手表穿戴技术应用文档入口汇总
  • JL707N穿戴客述问题FAQ
  • 彩屏仓 硬件开发指南 与 量产作业流程规范
  • 彩屏仓 AC98N和JL701烧录升级注意事项
  • JL707 硬件开发资料
  • JL707 手表硬件设计注意事项 总结
  • 穿戴生产烧录OTA和key文件添加使用说明
  • JL707N-入门到进阶开发指导文档
  • 彩屏仓982相关
  • 彩屏仓耳机介绍
  • 杰理701_707双屏demo介绍
  • 707电子吧唧开发资料
  • GPIO相关
  • UART串口相关
  • SPI相关
  • nandflash相关
  • norflash相关
  • IIC相关
  • PWM相关
  • SD卡相关
  • 定时器TIMER
  • 文件系统接口设计说明文档
  • 音视频录像开发流程
  • rdec编码器
  • 穿戴功耗数据标准
  • 手表蓝牙开发文档
  • 701蓝牙PAN联网demo
  • BLE开发使用说明
  • 701手表2.0.0版本SDK EQ在线调试和离线调试方法 V1.1
  • JL707 手表喇叭输出声音大小评估方法 V1.0
  • JL707 手表音频EQ调试方法 V1.0
  • AC707N 手表通话写卡 软件配置方法
  • 录音功能
  • 701手表2.X.X系列SDK调试EQ配置方法及音频调试技巧V1.1
  • 701手表104版本SDK EQ在线调试和离线调试方法 V1.1
  • mic2dac示例
  • P11 SensorHub相关
  • 手表升级操作文档
  • AC707NGPU
  • DBI模块介绍
  • GPU模块介绍
  • 701N屏幕驱动配置说明
  • 701N_UI编辑工具用户手册
  • 支付宝资料
  • 支付宝硬件接入资料
  • 支付宝乘车码接入资料
  • CAT1 接入文档
  • 701N_WATCH_CAT1开发说明
  • Findmy功能
  • music模式相关
  • 707电池曲线
  • 707N内置FLASH挂载FAT文件系统251112_v1.2
  • AC707N_本地视频播放demo(AVI-MJPEG-PCM)
  • 光波导屏幕调试
  • 耳机研发和生产流程 指南
  • 707-NandFlash 代码和UI资源独立烧录方案
  • 彩屏仓时间同步补丁
  • 彩屏仓抖音点赞移植
  • 707LVGLv8双屏开发
  • 707N蓝牙互传图传demo
  • AVIPCM数据流接入AIVOICE
  • Flash分区操作demo
  • 手表发射问题
  • 701_707 双备份升级DEMO
  • 707_乘车码刷码失败问题_共性

音视频录像开发流程

📎 原始文档:https://www.kdocs.cn/l/cdjxSIq4HAFB 音视频录像开发流程

最新版本:

701n_v221_Camare_avi_带录音录像_优化帧率_20241111.rar
701n_v221_Camera_avi_带录音录像_20250110.rar
注意:

  1. 适配的摄像头是BY20A6,SPI时钟频率为96MHz,当需要适配BY30A2型号的摄像头时,需要更改SPI的时钟频率改为48MH,及以下;
  2. 由于模组的封装不一样,有的模组需要将SPI的CLK初始化为上拉或者下拉;

补丁:

20250110:

701n_v221_20250110补丁.rar
此补丁是基于最新版本的,需要先升级20241111的sdk

  1. 修复已知内存泄露问题
  2. 修复删除摄像头ui回放线程死机
  3. 修复频繁开关摄像头线程死机
  4. 修复录制过程中死机
  5. 修复jpg显示死机
  6. 修复录制时长不对导致的音频播放卡顿,以及录制时长不正确的问题。

20241111:

  • 适配基于20241111之前的软件版本:
  • 补丁修改的文件: imageimageimageimageimage
  • 编译异常、使用异常: 查看8.异常处理。

音视频录像开发流程

此文档主要以方便客户可以快速开发为目的,所以此文档主要说明录像组件开发demo的使用。客户可在文档下留言,会动态对文档进行改动。

  1. 录像功能开发的流程图 image 图1

  2. 录音功能开发的流程图 image 图2

  3. 手表701摄像头性能资源评估(RAM消耗与帧率评估) https://kdocs.cn/l/csDJk6KoEKuC
    手表701摄像头性能数据评估(1).otl

  4. 原理图

摄像头硬件IO配置

image

音频音频硬件连接原理图

image 图4
注意,MIC和MICLDO的硬件连接分别是PA1和PA0。
5. 硬件连接 image

  1. 音视频录像组件的软件开发流程
    1. 图像录像开发流程
    2. 相关宏定义 文件路径:apps\watch\board\br28\board_701n_demo\board_701n_demo.c
      apps\watch\video\avi_recode_demo.c
      I2C结构体配置const struct soft_iic_config soft_iic_cfg[]={​​}主要配置IIC的硬件GPIO引脚。而\avi_recode_demo.c的宏定义,只要配置JPG编码对应配置,包括SPI数据包包头SPI_FEND_SIZE、包尾SPI_LEND_SIZE、以及行头SPI_FHEAD_SIZE和行尾SPI_LHEAD_SIZE的大小。同时,配置图像的像素为240*320,JPG一次编码的大小为DMA_LBUF_SIZE,但注意,当JPG编码质量大的时候需要增大该变量。SPI通信是JL701N使用SPI2从机通信,SPI时钟由IO_PORTA_05提供。
      image 图5
      通过修改board_701n_demo_cfg.h对应的宏来控制录像是否需要音频、录像时同步开启音频播放等配置信息。
    • 选择接入的摄像头类型:
/*选择摄像头类型*/
#define CAMRAE_30A2                             0
#define CAMRAE_20A6                             1 
#define TCFG_CAMARE_OPTION                      CAMRAE_30A2 //0:30a2, 1:20a6 (默认0)
- 选择在录像的时候是否需要录音:

- 选择是否在录音的时候同步播放音频:
//在录音的时候同时播放音频
#define TCFG_SUPPORT_MIC_SYNC_PLAY          DISABLE_THIS_MOUDLE

在audio_mic_cbuf.c/.h文件添加标志位设置函数:

void audio_set_sync_flag(u8 status);
u8 audio_get_sync_flag(void);

image 在使能了宏控制TCFG_SUPPORT_MIC_SYNC_PLAY后,需要对该标志位sync_flags进行控制 audio_set_sync_flag(1),控制完成以下几个步骤:
1. 在开启mic adc采集前audio_mic_open(),需要初始化mci_cbuf_hdl->pcm_cbuf链表; 2. 在将mic adc数据传输到音频设时usr_audio_mic_cbuf_data_write(),要同步将数据写到mci_cbuf_hdl->pcm_cbuf链表中保存(在第3)步中),方便进行后续的pcm解码。 3. 将数据传输到pcm组件进行解码audio_dac_pcm_fread(),需要读取mci_cbuf_hdl->pcm_cbuf中的数据; 4. 解码结束或者录音结束,在kill录音线程中,需要清除标志位audio_set_sync_flag(0); 5. 同时,在avi_replay_demo.c中的aci_replay_start()函数中清除sync_flags标志位,减少mci_cbuf_hdl->pcm_cbuf内存的使用,不清除该标志位,可能会出现操作空指针的异常。 2. 按键响应和处理事件入口 文件路径:apps\watch\task_manager\app_common.c
使用按键作为录像事件的触发机制,key2是触发录像功能,key1是复位,也是触发录像回放的按键。
image 图6
通过key2按键事件KEY_UI_SHORTCUT触发录像组件的录像功能,其中avi_set_recode_flag()和reset_stop_flag()函数分别是视频流转化为avi编码的标志和停止录像的标志,avi_recode_demo()函数是获取视频流后,进行avi视频编码函数,set_play_mode(1)设置开始录像的标志;
image 图7
3. avi录像编码函数 文件路径:apps\watch\video\avi_recode_demo.c
avi_recode_demo()是avi视频编码函数,其主要是配置音视频同步封装配置,以及实现avi视频编码功能,其中vpkg_cycle_time = cycle_time配置视频采样率,info.minfo.vid_fps = fps是配置视频帧率,该图像传感器的最大视频帧率为30fps,值得注意的是,info.minfo.aud_en = 1是开启音频封装的重要标志,同时,音频的采样率info.minfo.aud_sr = 8000要和mic的adc采样率保持一致。
image 图8
4. 录像标志 文件路径:apps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c
set_play_mode()函数是设置录像与否的标志,通过设置play_mode变量的值来决定是否开始录像,play_mode=1开始录像,play_mode=0回放录像,这两个状态是在ui_action_watch.c文件中DRAW_DEMO_onchange()函数中通过ON_CHANGE_FIRST_SHOW事件实现,如图10所示。
image 图9
5. 录像开始线程 文件路径:apps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c
cpu\br28\audio_enc\audio_mic_cbuf.c 和apps\watch\video\avi_recode_demo.c
开启录像操作的函数在是DRAW_DEMO_onchange()函数中实现,在play_mode置位1的时候,开启录音线程creat_aud_task()和录像线程creat_vid_task(); 其内部实现的函数如图13和图11所示。
image 图10
6. 音视频流处理线程 1)录视频文件路径:apps\watch\video\avi_recode_demo.c
视频录制线程实现函数vid_stream_task(),其内容是初始化BF30A2图像传感器和开启
mic数据采集,其内容二是通过spi获取图像传感器数据,将分辨率为240320的图像保存在lbuf中,并通过将240320分辨率的图片分成10张分辨率为240*32的图片进行YUV编码处理。
需要注意是,音频和视频流的avi编码接口函数aud_din(u8 *data,u32 len)和vid_stream_din(u8 *data, u32 len)的传参指针u8 *data是需要外部申请一段动态内存后传入,其在avi编码函数内部自动进行释放,若传参指针变量不是动态申请的内存,可能会出现系统错误等问题。
image 图11
Mic录音的adc采样率MIC2CBUF_SR宏大小要与avi音频编码的info.minfo.aud_sr = 8000采样率保持一致。
image 图12
2)录音文件路径:cpu\br28\audio_enc\audio_mic_cbuf.c
音频数据采用cbuf 的管理方式,每次编码8K数据(对应avi编码的buf 大小)。
image 图13
7. 录像播放线程 1)文件路径:apps\watch\task_manager\app_common.c apps\watch\video\avi_replay_demo.c
apps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c
image 图14
2)文件路径:apps\watch\task_manager\app_common.c
apps\watch\video\avi_replay_demo.c
函数avi_replay_start()主要创建录音回放线程audio_replay_task()和录像回放线程video_replay_task();
image 图15

3)文件路径:apps\watch\video\avi_replay_demo.c
播放音视频,需要将音频数据传到pcm解码组件进行解码操作后,才能在扩音器上播放。在手表等设备上播放带声传录像,可调用avi_replay_start()函数,在函数内部进行了相关配置如下,使能音频功放使能引脚PG7、初始化pcm组件,以及开启音频数据总包统计__this->auds_total。如图16和图17所示。
开启功放使能宏定义和audio回放demo:
image 图16
image 图17
修改音频回放函数audio_replay_task(),添加链表cbuf_write()保存音频数据包信息,如图18所示。
image 图18
4)Pcm解码组件文件路径:cpu\br28\audio_enc\audio_mic_cbuf.c
编写pcm编码组件demo,录取的mic音频数据,需要经过pcm解码,才能在音频设备播放,具体函数如图19所示。
image 图19
7. 录像结束

回播结束:删除回播线程;

录像结束:删除录音线程、录像线程和avi视频编码线程:

image 图20
8. 修改的文件全观

查看所要修改的文件

image 图21
image 图22
9. 异常处理

  1. CodeBlock编译出错,缺失creat_aud_task... 解决方法:添加audio_mic_cbuf.c和audio_mic_cbuf.h
    imageimage

  2. 30A2型号摄像头不能正常使用: 701n_v221_Camare_avi_带录音录像_优化帧率_20241111适配的摄像头是BY20A6,SPI时钟频率为96MHz,当需要适配BY30A2型号的摄像头时,需要更改SPI的时钟频率改为48MH,及以下

  3. 出现[2-HSB] emu err msg : axi read reserved memory at dev id: 0x00000080 DBG_AXI_M1的死机:imb硬件访问到非法地址了,排查下跟哪个imb任务有关

本文档包含以下子页面

  • 手表701摄像头性能数据评估(1)
Prev
文件系统接口设计说明文档
Next
rdec编码器