音频配置与问题处理
音频配置
音频配置文件:product_evb_standard.h
内置输入设备
说明: 内置输入设备通常为麦克风。
- BUILTIN_AI_PORT:枚举值对应的端口需与硬件上内置输入设备连接的端口一致(请参见 soc_uapi_ai.h 中的音频内置输入设备宏定义)。
- BUILTIN_AI_PORT_ATTR_ADC_RX_TYPE:当前不可配置,请使用默认值。
- BUILTIN_AI_PCM_ATTR_AUDIO_CH:当前不可配置,请使用默认值。
- BUILTIN_AI_PCM_ATTR_BIT_DEPTH:当前不可配置,请使用默认值。
- BUILTIN_AI_PCM_ATTR_SAMPLE_RATE:当前不可配置,请使用默认值。
- BUILTIN_AI_PCM_ATTR_FRAME_PER_SEC:当前不可配置,请使用默认值。
内置输出设备
说明: 内置输出设备通常为SmartPA。 12.288M为codec模块的总时钟,用于计算分频比。
- BUILTIN_SND_OUT_PORT:枚举值对应的端口需与硬件上内置输出设备连接的端口一致(请参见 soc_uapi_audio.h 中的音频内置输出设备宏定义)。
- BUILTIN_SND_OUT_PORT_NUM:输出端口个数。
- BUILTIN_SND_OUT_AUDIO_CH:需与内置输出设备的声道数一致。
- BUILTIN_SND_OUT_BIT_DEPTH:需与内置输出设备的位深一致。
- BUILTIN_SND_OUT_SAMPLE_RATE:需与内置输出设备的采样率一致。
当使用I2S连接内置输出设备时,需要修改以下配置:
-
BUILTIN_SND_OUT_I2S_ATTR_I2S_BCLK:12.288M时钟经过此枚举对应的比值分频后,需与内置输出设备的 I2S BCLK 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_bclk_sel枚举)。例如BCLK为1.536M,计算得分频比应为8(12.288M/1.526M=8),查询枚举uapi_audio_i2s_bclk_sel,应选择UAPI_AUDIO_I2S_BCLK_8_DIV,对应枚举值为8。
-
BUILTIN_SND_OUT_I2S_ATTR_BIT_DEPTH:需与内置输出设备的I2S位深一致。
- BUILTIN_SND_OUT_I2S_ATTR_AUDIO_CH:需与内置输出设备的I2S声道数一致。
- BUILTIN_SND_OUT_I2S_ATTR_I2S_STD_MODE:枚举值对应的模式需与内置输出设备的 I2S 模式一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mode枚举)。 - BUILTIN_SND_OUT_I2S_ATTR_MASTER:需与内置输出设备的I2S主/从模式相反(1表示做主设备,0表示做从设备)。
-
BUILTIN_SND_OUT_I2S_ATTR_I2S_MCLK:12.288M时钟经过此枚举对应的比值分频后,需与内置输出设备的 I2S FS 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mclk_sel枚举)。例如FS为48K,计算得分频比应为256(12.288M/48K=256),查询枚举uapi_audio_i2s_mclk_sel,应选择UAPI_AUDIO_I2S_MCLK_256_FS,对应枚举值为1。
当I2S模式选择PCM时,需要修改以下配置:
- BUILTIN_SND_OUT_I2S_ATTR_I2S_PCM_DELAY:BCLK 时延(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_pcm_delay枚举)。 - BUILTIN_SND_OUT_I2S_ATTR_SAMPLE_RISE_EDGE:采样沿选择(1表示在BCLK的上升沿采样数据,0表示在BCLK的下降沿采样数据)。
外挂输入设备
说明: 外挂输入设备通常为CAT1模组。 12.288M为codec模块的总时钟,用于计算分频比。
- EXTERNAL_AI_PORT:枚举值对应的端口需与硬件上外挂输入设备连接的端口一致(请参见 soc_uapi_audio.h 中的音频外挂输入设备宏定义)。
- EXTERNAL_AI_I2S_ATTR_MASTER:需与外挂输入设备的I2S主/从模式相反(1表示做主设备,0表示做从设备)。
- EXTERNAL_AI_I2S_ATTR_I2S_MODE:枚举值对应的模式需与外挂输入设备的 I2S 模式一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mode枚举)。 -
EXTERNAL_AI_I2S_ATTR_MCLK:12.288M时钟经过此枚举对应的比值分频后,需与外挂输入设备的 I2S FS 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mclk_sel枚举)。例如FS为16K,计算得分频比应为768(12.288M/16K=768),查询枚举uapi_audio_i2s_mclk_sel,应选择UAPI_AUDIO_I2S_MCLK_768_FS,对应枚举值为4。
-
EXTERNAL_AI_I2S_ATTR_BCLK:12.288M时钟经过此枚举对应的比值分频后,需与外挂输入设备的 I2S BCLK 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_bclk_sel枚举)。例如BCLK为512K,计算得分频比应为24(12.288M/512K=24),查询枚举uapi_audio_i2s_bclk_sel,应选择UAPI_AUDIO_I2S_BCLK_24_DIV,对应枚举值为24。
-
EXTERNAL_AI_I2S_ATTR_BIT_DEPTH:需与外挂输入设备的I2S位深一致。
- EXTERNAL_AI_I2S_ATTR_AUDIO_CH:需与外挂输入设备的I2S声道数一致。
当I2S模式选择PCM时,需要修改以下配置:
- EXTERNAL_AI_I2S_ATTR_SAMPLE_RISE_EDGE:采样沿选择(1表示在BCLK的上升沿采样数据,0表示在BCLK的下降沿采样数据)。
- EXTERNAL_AI_I2S_ATTR_PCM_DELAY_CYCLE:BCLK 时延(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_pcm_delay枚举)。 - EXTERNAL_AI_PCM_ATTR_CHANNELS:需与外挂输入设备的PCM声道数一致。
- EXTERNAL_AI_PCM_ATTR_BIT_DEPTH:需与外挂输入设备的PCM位深一致。
- EXTERNAL_AI_PCM_ATTR_SAMPLE_RATE:需与外挂输入设备的PCM采样率一致。
- EXTERNAL_AI_PCM_ATTR_FRAME_PER_SEC:当前不可配置,请使用默认值。
外挂输出设备
说明: 外挂输出设备通常为CAT1模组。 12.288M为codec模块的总时钟,用于计算分频比。
- EXTERNAL_SND_OUT_PORT:枚举值对应的端口需与硬件上外挂输出设备连接的端口一致(请参见 soc_uapi_sound.h 中的音频外挂输出设备宏定义)。
- EXTERNAL_SND_OUT_AUDIO_CHANNEL:需与外挂输出设备的声道数一致。
- EXTERNAL_SND_OUT_AUDIO_BIT_DEPTH:需与外挂输出设备的位深一致。
- EXTERNAL_SND_OUT_AUDIO_SAMPLE_RATE:需与外挂输出设备的采样率一致。
- EXTERNAL_SND_OUT_PORT_NUM:输出端口个数。
- EXTERNAL_SND_OUT_I2S_ATTR_BIT_DEPTH:需与外挂输出设备的I2S位深一致。
- EXTERNAL_SND_OUT_I2S_ATTR_CHANNEL:需与外挂输出设备的I2S声道数一致。
- EXTERNAL_SND_OUT_I2S_ATTR_I2S_MODE:枚举值对应的模式需与外挂输出设备的 I2S 模式一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mode枚举)。 -
EXTERNAL_SND_OUT_I2S_ATTR_MCLK:12.288M时钟经过此枚举对应的比值分频后,需与外挂输出设备的 I2S FS 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_mclk_sel枚举)。例如FS为16K,计算得分频比应为768(12.288M/16K=768),查询枚举uapi_audio_i2s_mclk_sel,应选择UAPI_AUDIO_I2S_MCLK_768_FS,对应枚举值为4。
-
EXTERNAL_SND_OUT_I2S_ATTR_MASTER:需与外挂输出设备的I2S主/从模式相反(1表示做主设备,0表示做从设备)。
- EXTERNAL_SND_OUT_I2S_ATTR_SAMPLE_RISE_EDGE:采样沿选择(仅当I2S模式选择PCM时需要配置,1表示在BCLK的上升沿采样数据,0表示在BCLK的下降沿采样数据)。
-
EXTERNAL_SND_OUT_I2S_ATTR_BCLK:12.288M时钟经过此枚举对应的比值分频后,需与外挂输出设备的 I2S BCLK 一致(请参见 soc_uapi_audio.h 中的
uapi_audio_i2s_bclk_sel枚举)。例如BCLK为512K,计算得分频比应为24(12.288M/512K=24),查询枚举uapi_audio_i2s_bclk_sel,应选择UAPI_AUDIO_I2S_BCLK_24_DIV,对应枚举值为24。
TRACK MODE
请参见 soc_uapi_sound.h 中的 uapi_snd_track_mode 枚举:
- SND_TRACK_MODE_BT_MUSIC:蓝牙音乐场景的TRACK MODE。
- SND_TRACK_MODE_BT_SCO:蓝牙通话场景的TRACK MODE。
- SND_TRACK_MODE_LOCAL_CAT1:4G VOLTE本地通话场景的TRACK MODE。
- SND_TRACK_MODE_BT_CAT1:4G VOLTE蓝牙通话场景的TRACK MODE。
- SND_TRACK_MODE_LOCAL_MUSIC:本地音乐场景的TRACK MODE。
AEF
- SND_PORT_AEF_TYPE:当前不可配置,请使用默认值。
- SND_PORT_AEF_ENABLE:AEF(Audio Effect)算法开关(true代表开启AEF算法,false代表关闭AEF算法)。
AT命令使用
- 所有自定义命令必须以“AT^”为前缀。
- AT命令的字符串不区分大小写,建议统一为大写字符。
- AT指令以<CR><LF>为结尾,表明一条指令结束。
- AT指令的返回值包括两部分:响应信息和结果码。
- 响应信息以“^”开头,冒号之后有一个空格,响应信息可以多行,并以<CR><LF>为结尾。
- 结果码“OK/ERROR”独立一行输出。
本地播放
须知: 更多常用命令及参数,请见“/src/middleware/utils/at/at_media_cmd/at/media_cmd_manager.c”中的media_cmd_table_t中对应的命令及参数定义。
设置指令
表 1 本地播放设置指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
开始音乐播放 |
AT^MEDIA=MUSICPLAY,xx,xxxxxxx,x,x |
AT^MEDIA=MUSICPLAY,xx,/user/test/audio_cap.mp3,1,0 执行成功:OK 执行失败:ERROR |
xx:开始播放标记,固定参数。 /user/test/audio_cap.mp3:音乐播放路径。 1:URL(Uniform Resource Locator)方式播放,目前只支持 URL,固定参数。 0:STREAM方式播放,目前不支持STREAM,固定参数。 |
暂停音乐播放 |
AT^MEDIA=MUSICPAUSE,pause |
AT^MEDIA=MUSICPAUSE,pause 执行成功:OK 执行失败:ERROR |
pause:暂停播放动作标记。 |
恢复音乐播放 |
AT^MEDIA=MUSICRESUME,resume |
AT^MEDIA=MUSICRESUME,resume 执行成功:OK 执行失败:ERROR |
resume:恢复播放动作标记。 |
停止播放音乐 |
AT^MEDIA=MUSICSTOP,stop |
AT^MEDIA=MUSICSTOP,stop 执行成功:OK 执行失败:ERROR |
stop:停止播放动作标记。 |
设置音乐音量 |
AT^MEDIA=SETMUSICVOLUME,setvolume,xxx |
AT^MEDIA=SETMUSICVOLUME,setvolume,100 执行成功:OK 执行失败:ERROR |
setvolume:设置音频音量的动作标记。 100:音量的挡位值(0~100)。 |
设置音乐循环播放 |
AT^MEDIA=MUSICSINGLELOOP,xxx |
AT^MEDIA=MUSICSINGLELOOP,loopon 执行成功:OK 执行失败:ERROR |
loopon:开启音频循环播放。 loopoff:关闭音频循环播放。 |
切换上下一曲音乐 |
AT^MEDIA=MUSICSWITCHSONG,xxx |
AT^MEDIA=MUSICSWITCHSONG,prevsong 执行成功:OK 执行失败:ERROR |
prevsong:切换到上一首音乐的动作标记。 nextsong:切换到下一首音乐的动作标记。 需要上传播放列表“/user/test/cai.mp3”、 “/user/test/guyongzhe_8k_2ch_8k_0x20000.mp3”。 |
开始播放提示音 |
AT^MEDIA=NOTIFYPLAY,xx,/user/test/naozhong.sbc,1,0 |
AT^MEDIA=NOTIFYPLAY,xx,/user/test/naozhong.sbc,1,0 执行成功:OK 执行失败:ERROR |
xx:开始播放标记,固定参数。 /user/test/naozhong.sbc:提示音播放路径。 1:URI(Uniform Resource Identifier)方式播放,目前只支持 URI,固定参数。 0:STREAM方式播放,目前不支持STREAM,固定参数。 |
停止播放提示音 |
AT^MEDIA=NOTIFYPLAY,stop |
AT^MEDIA=NOTIFYPLAY,stop 执行成功:OK 执行失败:ERROR |
stop:停止播放动作标记。 |
开始视频播放 |
AT^MEDIA=VIDEOPLAY,start,url |
AT^MEDIA=VIDEOPLAY,start,/user/video/panda.mp4 执行成功:OK 执行失败:ERROR |
start:开始播放动作标记。 /user/video/panda.mp4:视频播放路径。 播放视频需要连接屏幕。 |
暂停视频播放 |
AT^MEDIA=VIDEOPLAY,pause |
AT^MEDIA=VIDEOPLAY,pause 执行成功:OK 执行失败:ERROR |
start:开始播放动作标记。 /user/video/panda.mp4:视频播放路径。 播放视频需要连接屏幕。 |
恢复视频播放 |
AT^MEDIA=VIDEOPLAY,resume |
AT^MEDIA=VIDEOPLAY,resume 执行成功:OK 执行失败:ERROR |
resume:开始播放动作标记。 |
停止视频播放 |
AT^MEDIA=VIDEOPLAY,stop |
AT^MEDIA=VIDEOPLAY,stop 执行成功:OK 执行失败:ERROR |
stop:停止播放动作标记。 |
查询指令
表 1 本地播放查询指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
查询音乐音量 |
AT^MEDIA=GETMUSICVOLUME,getmusicvolume |
AT^MEDIA=GETMUSICVOLUME,getmusicvolume 执行成功:OK 执行失败:ERROR |
getmusicvolume:获取音量的动作标记。 |
查询播放文件信息 |
AT^MEDIA=MUSICPLAY,albuminfo |
AT^MEDIA=MUSICABLUMINFO,albuminfo 执行成功:OK 执行失败:ERROR |
albuminfo:获取播放文件信息动作标记。 |
查询当前播放状态 |
AT^MEDIA=GETCURRENTMUSICSTATE,currentstate |
AT^MEDIA=GETCURRENTMUSICSTATE,currentstate 执行成功:OK 执行失败:ERROR |
无。 |
查询当前播放的dump信息 |
AT^MEDIA=MUSICPLAY,dumpinfo |
AT^MEDIA=MUSICPLAY,dumpinfo 执行成功:OK 执行失败:ERROR |
dumpinfo:获取当前播放dump信息动作标记。 |
本地采集
须知: 更多常用命令及参数,请见“/src/middleware/utils/at/at_media_cmd/at/media_cmd_manager.c”中的media_cmd_table_t中对应的命令及参数定义。
设置指令
表 1 本地录制设置指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
开始录制音频 |
AT^MEDIA=AUDIORECORD,xx,mp3,16000,1,16,/user/test/audio_cap.mp3 |
AT^MEDIA=AUDIORECORD,xx,mp3,16000,1,16,/user/test/audio_cap.mp3 执行成功:OK 执行失败:ERROR |
xx:开始录制标记。 mp3:录制音频格式。 16000:录音音频采样率。 1:录制音频通道数。 16:录制音频位宽。 /user/test/audio_cap.mp3:录音数据存放文件。 |
停止录制音频 |
AT^MEDIA=AUDIORECORD,stop |
AT^MEDIA=AUDIORECORD,stop 执行成功:OK 执行失败:ERROR |
stop:停止录制动作标记。 |
查询指令
表 1 本地录制查询指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
查询录制音频信息 |
AT^MEDIA=AUDIORECORD,dumpinfo |
AT^MEDIA=AUDIORECORD,dumpinfo 执行成功:OK 执行失败:ERROR |
dumpinfo:获取录制音频信息动作标记。 |
音频管理
须知: 更多常用命令及参数,请见“/src/middleware/utils/at/at_media_cmd/at/media_cmd_manager.c”中的media_cmd_table_t中对应的命令及参数定义。
设置指令
表 1 音频管理设置指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
开始视频预览 |
AT^MEDIA=CAMERAPREVIEWSTART,start,/user/test/454x454_10s.data |
AT^MEDIA=CAMERAPREVIEWSTART,start,/user/test/454x454_10s.data 执行成功:OK 执行失败:ERROR |
start:开始动作标记。 /user/test/454x454_10s.data:预览文件路径。 |
停止视频预览 |
AT^MEDIA=CAMERAPREVIEWSTART,stop |
AT^MEDIA=CAMERAPREVIEWSTART,stop 执行成功:OK 执行失败:ERROR |
stop:停止动作标记。 |
内部测试开始本地CAT1通话 |
AT^MEDIA=VOICECALLVOLTE,start,0 |
AT^MEDIA=VOICECALLVOLTESTART,start 执行成功:OK 执行失败:ERROR |
只是拉起音频通路,无法实现数据的轮转,暂不支持。 |
内部测试停止本地CAT1通话 |
AT^MEDIA=VOICECALLVOLTE,stop |
AT^MEDIA=VOICECALLVOLTESTOP,stop 执行成功:OK 执行失败:ERROR |
只是销毁拉起的音频通路,暂不支持。 |
设置CAT1通话3A算法的开关 |
AT^MEDIA=VOICECALLVOLTE,seaenable,1 |
AT^MEDIA=VOICECALLVOLTE,seaenable,1 执行成功:OK 执行失败:ERROR |
seaenable:设置3A算法动作开关标记,暂不支持。 0:关闭3A算法。 1:打开3A算法。 |
设置CAT1通话上行是否静音 |
AT^MEDIA=VOICECALLVOLTE,mute,0 |
AT^MEDIA=VOICECALLVOLTE,mute,0 执行成功:OK 执行失败:ERROR |
mute:设置上行静音的标记,暂不支持。 0:解除上行静音。 1:上行静音。 |
设置CAT1下行通话音量 |
AT^MEDIA=VOICECALLVOLTE,setvolume,80 |
AT^MEDIA=VOICECALLVOLTE,setvolume,80 执行成功:OK 执行失败:ERROR |
setvolume:设置音频音量的动作标记,暂不支持。 80:音量的挡位值(0~100)。 |
设置A2DP sink的AEF算法开关和参数 |
AT^MEDIA=A2DPSINKAEF,1,29 |
AT^MEDIA=A2DPSINKAEF,1,29 执行成功:OK 执行失败:ERROR |
注意:此命令需要在sink音乐播放中执行。 1:AEF音效是否使能(0:不使能;1:使能)。 29:音效算法参数(可以缺省),参数范围8~29。 |
设置本地音乐播放的AEF算法开关 |
AT^MEDIA=MUSICPLAY,aefenable,400,1 |
AT^MEDIA=MUSICPLAY,aefenable,400,1 执行成功:OK 执行失败:ERROR |
注意:此命令需要在本地音乐播放中执行。 400:AEF的算法类型,目前仅支持当前类型。 1:AEF音效是否使能(0:不使能;1:使能)。 |
设置本地音乐播放的AEF算法参数 |
AT^MEDIA=MUSICPLAY,setaefparam,400,10,4 |
AT^MEDIA=MUSICPLAY,setaefparam,400,10,4 执行成功:OK 执行失败:ERROR |
注意:此命令需要在本地音乐播放中执行。 400:AEF的算法类型,目前仅支持当前类型。 10:算法参数,范围8~29。 4:参数长度。 |
智能语音
须知: 更多常用命令及参数,请见“/src/middleware/utils/at/at_media_cmd/at/media_cmd_manager.c”中的media_cmd_table_t中对应的命令及参数定义。
设置指令
表 1 智能语音设置指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
启动固定命令词识别 |
AT^MEDIA=MEDIAVOICE,asr_start,0,1,0 |
AT^MEDIA=MEDIAVOICE,asr_start,0,1,0 执行成功:OK 执行失败:ERROR |
asr_start:开始识别动作标记。 0:工作模式,目前只能是0,只支持一直唤醒模式。 1:支持的语言,目前只能是1,只支持中文。 0:是否使能NPU模块,1:使能,0不使能。 |
停止固定命令此识别 |
AT^MEDIA=MEDIAVOICE,asr_stop |
AT^MEDIA=MEDIAVOICE,asr_stop 执行成功:OK 执行失败:ERROR |
asr_stop:停止识别动作标记。 |
启动模糊命令词识别 |
AT^MEDIA=MEDIAVOICE,asr_start,0,1,1 |
AT^MEDIA=MEDIAVOICE,asr_start,0,1,1 执行成功:OK 执行失败:ERROR |
asr_start:开始识别动作标记。 0:工作模式,目前只能是0,只支持一直唤醒模式。 1:支持的语言,目前只能是1,只支持中文。 1:是否使能NPU模块,1:使能,0不使能。 |
停止模糊命令词识别 |
AT^MEDIA=MEDIAVOICE,asr_stop |
AT^MEDIA=MEDIAVOICE,asr_stop 执行成功:OK 执行失败:ERROR |
asr_stop:停止识别动作标记。 |
文本转语音播放
须知: 更多常用命令及参数,请见“/src/middleware/utils/at/at_media_cmd/at/media_cmd_manager.c”中的media_cmd_table_t中对应的命令及参数定义。
设置指令
表 1 智能语音设置指令一览表
类型 |
指令 |
示例 |
说明 |
|---|---|---|---|
启动TTS文本转语音播放 |
AT^MEDIA=MEDIAVOICE,tts_start,/user/input.txt |
AT^MEDIA=MEDIAVOICE,tts_start,/user/input.txt 执行成功:OK 执行失败:ERROR |
注意:此命令可以重复调用,会按照传入的文本顺序进行播放。 tts_start:开始TTS动作标记。 /user/input.txt:识别文本文件路径。 |
停止TTS文本转语音播放 |
AT^MEDIA=MEDIAVOICE,tts_stop |
AT^MEDIA=MEDIAVOICE,tts_stop 执行成功:OK 执行失败:ERROR |
tts_stop:停止TTS动作标记。 注意:此命令是会销毁相关的生成数据线程以及播放数据线程,不会销毁初始化资源。 |
销毁TTS文本转语音播放 |
AT^MEDIA=MEDIAVOICE,tts_destroy |
AT^MEDIA=MEDIAVOICE,tts_destroy 执行成功:OK 执行失败:ERROR |
tts_stop:销毁TTS动作标记。 注意:此命令是会销毁TTS所有的相关资源。 |
媒体常见问题FAQ
其他视频格式转换成当前支持的视频格式问题
须知:
- 目前只支持MP4封装格式的视频文件。
- 目前支持MJPEG格式和H264格式的视频流。
-
准备FFMPEG工具。
下载网址:https://github.com/BtbN/FFmpeg-Builds/releases
直接取最新版本即可,下载压缩包,解压到本地,如下图所示:

-
使用FFMPEG程序转换视频。
将视频裁剪成方的(比例1:1),原视频:1920×816,裁剪后:816×816;
将mov格式转成mp4格式,在“ffmpeg-master-latest-win64-gpl-shared\bin”目录,shift+鼠标右键打开PowerShell终端,在终端中输入ffmpeg命令。
ffmpeg命令如下:.\ffmpeg.exe -i .\14_AVC_Main@L4.0_9517Kbps_1920x816_29.970fps_8bits_AAC_96.0Kbps_2ch.mov -vf crop=816:816 -threads 4 -preset ultrafast -strict -2 .\816x816.mp4
命令里面的参数命令都是ffmpeg的标准命令,可自行查询。
说明: 裁剪会损失部分视频内容,请据实际视频内容划定crop区域(例子是居中裁剪)。
-
将视频缩放到454×454,同时调整量化因子,保证画质。
ffmpeg命令如下:.\ffmpeg.exe -i .\816x816.mp4 -vf scale=454:454,setdar=1:1 -c:v mjpeg -b:v 0 -q:v 9 -qmin 6 -qmax 15 454x454.mp4
说明:
- 量化因子根据实际画质调整,理论上量化因子参数越小画质越好。
- 由于量化因子调整会涉及码率变化,量化因子越小码率越高。 综上:画面和码率需要客户调整,可能存在取舍。
-
去除视频的音频流:
ffmpeg命令如下:.\ffmpeg.exe -i input.mp4 -c copy -an output.mp4
其中:
- -i:输入视频路径
- -c:copy使用原视频的视频流编码格式
- -an:去掉音频流
-
修改mp4文件里面的视频流的帧率:
ffmpeg命令如下:.\ffmpeg.exe -i input_video.mp4 -r 25 output_video.mp4
其中:
- -i:输入视频路径
- -r:修改帧率
-
按照原始视频文件时长截取视频:
ffmpeg命令如下:.\ffmpeg.exe -i .\454x454.mp4 -vcodec copy -acodec copy -ss 00:00 -to 00:57 .\454x454_57s.mp4
原始视频文件时长查看方法,将文件直接拖到“ffmpeg-master-latest-win64-gpl-shared\bin\ffplay.exe”上面,查看“Duration: ”字段。

媒体sample限制说明
-
音频播放sample
对外接口:
- PlayerSample:用于播放本地音乐,包含本地蓝牙音乐。
- TonePlayerSampleTest:用于播放本地系统提示音。
说明:
- PlayerSample和TonePlayerSampleTest目前退出模式也是同步的,也就是传入stop指令以后会等待资源销毁完全再返回,同步就要求start指令和stop指令需要在同一个线程被调用,否则stop指令会被卡住。
- PlayerSample和TonePlayerSampleTest可被同时调用,每个接口里面就会创建两个线程,需要注意资源、空间的消耗。
- 目前播放器支持的音频文件格式为:AAC、mp3、FLAC、OGG、WAV、SBC。
-
视频播放sample
源码:video_player_sample_wrapper.cpp
对外接口:
- int32_t StartVideoPlay(void):开始播放视频。
- int32_t StopVideoPlay(void):停止播放视频。
- int32_t PauseVideoPlay(void):暂停播放视频。
- int32_t ResumeVideoPlay(void):继续播放视频。
- void SetVideoPlayLoop(bool isLoop):设置视频循环播放,此接口需要在StartVideoPlay之前调用才会生效。
- void SetSyncExitMode(bool isSyncExitMode):设置视频退出的模式。
- bool IsExitCompletely(void):获取是否是完全退出的状态。
说明:
- 因资源的限制目前最多支持一路视频,所以MediaVideoPlay的对象,最好只有一个,必须要先StopVideoPlay退出视频播放,再StartVideoPlay开始播放。
- 默认是循环播放视频,可通过接口SetVideoPlayLoop修改,可在StartVideoPlay以后设置。
- 默认视频退出模式是同步的,也就是调用StopVideoPlay接口会等待所有的视频播放资源销毁再返回,这里有一个限制就是StartVideoPlay和StopVideoPlay必须在同一个线程被调用,否则会被卡住,如果使用接口SetSyncExitMode改成不同步的,则无此限制,但是需要保证时序,因为StopVideoPlay销毁资源是异步的会有一定的耗时。
-
音频录制sample说明
对外接口:
int32_t AudioCaptureSample(int32_t argc, const char *argv[]):此接口是AT命令的入口,包含了所有的相关指令。
说明:
- 音频录制,目前只支持mp3、pcm、silk这个3种格式的录制。
- 音频录制过程中可以下发stop指令停止。
- 音频录制目前录制1000帧,完成后自动结束,暂时无法设置录制时长,可自行修改代码适配。
- 音频录制过程中原则上不允许再播放音频。
媒体常见问题定位解答
目前版本是没有打开媒体的日志,要定位媒体的问题最好先打开媒体日志。
打开方式:
- 找到日志文件:media_log.cpp。
- 找到“g_enabledLevel”变量并修改其值为MEDIA_LOG_INFO。
- 重新编译生成。
问题一:文件错误导致的异常
-
文件路径错误
在媒体日志中查找“Realpath input file failed”,如果有则说明文件路径错误,需要排查文件路径是否正确,文件是否存在。
-
IO相关的报错:
一般是文件有问题导致,可以在其他播放器上面试一下,也有可能是文件系统出了问题,如果确认文件没问题,可以排查下文件系统。
-
需要做视频表盘的时候,播放带音频的视频文件导致的异常:
目前对纯视频播放做了限制,如果创建的是纯视频的MediaVideoPlay的对象,但是视频文件是带音频的就会出现报错,所以如果是做视频表盘一定要注意排查视频是否是带音频流的。
-
播放不支持的格式导致的错误:
需要提前去确认此格式的音视频是否都支持,不支持的格式也会有相应的报错。
问题二:场景的限制导致的异常
媒体这里所有的音频流之间都是有策略的。
举例:通话会打断所有的音乐,提示音和音乐可以混音。
不同的场景之间媒体配置了不同策略。
具体场景策略请参考《多媒体软件开发指南》中的“音频中断策略管理”章节的详细说明。
注意事项
音频流、采集缓冲区和播放器资源都有明确生命周期;初始化失败、停止后继续访问、或未按反序释放都会导致状态异常。设备路由、音频策略、格式和资源路径应在启动业务前确认,不能仅根据接口调用返回成功判断媒体链路已经可用。
常见编译错误
构建、接口参数或运行问题可结合媒体常见问题FAQ章节排查;定位时应同时记录产品配置、媒体资源格式、调用顺序和对应模块的错误码,避免把编解码、设备路由和资源路径问题混为一类。