跳转至

音频配置与问题处理

音频配置

音频配置文件: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格式的视频流。
  1. 准备FFMPEG工具。

    下载网址:https://github.com/BtbN/FFmpeg-Builds/releases

    直接取最新版本即可,下载压缩包,解压到本地,如下图所示:

    直接取最新版本即可,下载压缩包,解压到本地,如下图所示

  2. 使用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区域(例子是居中裁剪)。

  3. 将视频缩放到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

    说明:

    1. 量化因子根据实际画质调整,理论上量化因子参数越小画质越好。
    2. 由于量化因子调整会涉及码率变化,量化因子越小码率越高。 综上:画面和码率需要客户调整,可能存在取舍。
  4. 去除视频的音频流:

    ffmpeg命令如下.\ffmpeg.exe -i input.mp4 -c copy -an output.mp4

    其中:

    • -i:输入视频路径
    • -c:copy使用原视频的视频流编码格式
    • -an:去掉音频流
  5. 修改mp4文件里面的视频流的帧率:

    ffmpeg命令如下:.\ffmpeg.exe -i input_video.mp4 -r 25 output_video.mp4

    其中:

    • -i:输入视频路径
    • -r:修改帧率
  6. 按照原始视频文件时长截取视频:

    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

    源码:player_sample_wrapper.cpp

    对外接口:

    • 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说明

    源码:audio_capture_wrapper.cpp

    对外接口:

    int32_t AudioCaptureSample(int32_t argc, const char *argv[]):此接口是AT命令的入口,包含了所有的相关指令。

    说明:

    • 音频录制,目前只支持mp3、pcm、silk这个3种格式的录制。
    • 音频录制过程中可以下发stop指令停止。
    • 音频录制目前录制1000帧,完成后自动结束,暂时无法设置录制时长,可自行修改代码适配。
    • 音频录制过程中原则上不允许再播放音频。

媒体常见问题定位解答

目前版本是没有打开媒体的日志,要定位媒体的问题最好先打开媒体日志。

打开方式:

  1. 找到日志文件:media_log.cpp
  2. 找到“g_enabledLevel”变量并修改其值为MEDIA_LOG_INFO。
  3. 重新编译生成。

问题一:文件错误导致的异常

  • 文件路径错误

    在媒体日志中查找“Realpath input file failed”,如果有则说明文件路径错误,需要排查文件路径是否正确,文件是否存在。

  • IO相关的报错:

    一般是文件有问题导致,可以在其他播放器上面试一下,也有可能是文件系统出了问题,如果确认文件没问题,可以排查下文件系统。

  • 需要做视频表盘的时候,播放带音频的视频文件导致的异常:

    目前对纯视频播放做了限制,如果创建的是纯视频的MediaVideoPlay的对象,但是视频文件是带音频的就会出现报错,所以如果是做视频表盘一定要注意排查视频是否是带音频流的。

  • 播放不支持的格式导致的错误:

    需要提前去确认此格式的音视频是否都支持,不支持的格式也会有相应的报错。

问题二:场景的限制导致的异常

媒体这里所有的音频流之间都是有策略的。

举例:通话会打断所有的音乐,提示音和音乐可以混音。

不同的场景之间媒体配置了不同策略。

具体场景策略请参考《多媒体软件开发指南》中的“音频中断策略管理”章节的详细说明。

注意事项

音频流、采集缓冲区和播放器资源都有明确生命周期;初始化失败、停止后继续访问、或未按反序释放都会导致状态异常。设备路由、音频策略、格式和资源路径应在启动业务前确认,不能仅根据接口调用返回成功判断媒体链路已经可用。

常见编译错误

构建、接口参数或运行问题可结合媒体常见问题FAQ章节排查;定位时应同时记录产品配置、媒体资源格式、调用顺序和对应模块的错误码,避免把编解码、设备路由和资源路径问题混为一类。