MegaphoneManager实际上不支持上传mp3文件,需要将mp3文件先转换成pcm音频,再使用OpusEncoder重新编码成符合要求的opus数据后再发送给喊话器。
音频参数要求可以查看PSDK喊话器要求。
Sample中有使用到OpusEncoder去编码opus,示例代码点击这里,相关示例代码如下:
fun initRecorder() {
audioRecorderHandler = AudioRecordHandler.getInstance()
audioRecorderHandler?.init()
//初始化一个opus编码器。
opusEncoder = OpusEncoder()
//设置opusEndoer为默认编码设置,编码设置不要更改。
opusEncoder!!.config(audioRecorderHandler?.audioConfig)
//从opus编码器获取opus数据回调。
opusEncoder!!.setEncodedDataCallback(object : EncodedDataCallback {
override fun onAudioEncodedCallback(
data: ByteArray?,
size: Int
) {
//这里直接发送数据到csdk,同时缓存到本地文件(回调中新开线程写文件)
handler!!.post {
mAudioBos!!.write(data,0,size)
}
handler!!.post {
//推送opus音频数据到喊话器
MegaphoneManager.getInstance().sendRealTimeDataToMegaphone(
data,
size,
object : CommonCallbacks.CompletionCallback {
override fun onSuccess() {
LogUtils.i(
TAG,
"send real time data to megaphone success ${data?.size!!}"
)
}
override fun onFailure(error: IDJIError) {
LogUtils.i(TAG, "send real time data to megaphone failed")
}
})
}
}
})
audioRecorderHandler!!.setDataCallBack(object : SourceDataCallback {
override fun onAudioSourceDataCallback(data: ByteArray?, index: Int) {
handler!!.post {
mRawAudioBos!!.write(data)
}
//推送pcm数据到opus编码器,data的length必须是1280。
//注意putData频繁调用会出现编码失败,建议每次调用间隔一段的时间
opusEncoder!!.putData(data)
}
})
}
其中opusEncoder!!.config(audioRecorderHandler?.audioConfig)是用于配置音频参数。如果不希望初始化audioRecorderHandler,可以自己创建audioConfig,下面是参考代码:
AudioConfig audioConfig = new AudioConfig();
audioConfig.setAudioChannelCount(单声道);
audioConfig.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT);
audioConfig.setAudioSampleRate(mAudioRecorder.getSampleRate(16000);
audioConfig.setBufferSize(2560);
评论
1 条评论
你好转换的命令能参考下吗
请登录写评论。