diff --git a/zh-cn/application-dev/media/Readme-CN.md b/zh-cn/application-dev/media/Readme-CN.md
index f4c1c506f20fc22be84dc8822ab63b20a9f3d4b2..d2048aef8c448de17af254e2a027403355b2d6eb 100755
--- a/zh-cn/application-dev/media/Readme-CN.md
+++ b/zh-cn/application-dev/media/Readme-CN.md
@@ -5,4 +5,6 @@
- [音频播放开发指导](audio-playback.md)
- [音频管理开发指导](audio-management.md)
- [音频录制开发指导](audio-recorder.md)
+ - [音频解码开发指导](audio-decoder.md)
+ - [音频编码开发指导](audio-encoder.md)
diff --git a/zh-cn/application-dev/media/audio-decoder.md b/zh-cn/application-dev/media/audio-decoder.md
new file mode 100644
index 0000000000000000000000000000000000000000..af0a8a3ac9b2fcdb787d3eec0e8600aa6f33bd1f
--- /dev/null
+++ b/zh-cn/application-dev/media/audio-decoder.md
@@ -0,0 +1,232 @@
+# 音频解码开发指导
+
+## 场景介绍
+
+音频解码的主要工作是将编码后的数据解码为原始数据,同时对音频解码任务进行管理。
+
+**图1** 音频解码状态机
+
+
+
+## 音频解码零层图
+
+**图2** 音频解码零层图
+
+
+
+## 音频解码开发步骤
+
+详细API含义可参考:[js-apis-media.md](../reference/apis/js-apis-media.md)
+
+### 全流程场景
+
+包含流程:创建音频解码实例、设置监听事件、配置解码音频的媒体信息、准备音频解码、开始音频解码、获取音频媒体信息、清空缓存、停止解码、重置音频解码、销毁音频解码器资源
+
+```js
+/* 用于打印音频媒体信息 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioDecoder key is ' + item);
+ console.info('audioDecoder value is ' + property);
+ }
+}
+
+/* 设置订阅事件回调函数 */
+function SetCallback() {
+ audioDecoder.on('needInputData', (inBuffer) => { // 订阅音频解码的输入音频帧内存事件
+ console.info('audioDecoder needInputData success');
+ /* 将要解码的音频帧数据写入inBuffer后,再将其推入队列中 */
+ audioDecoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder pushInputData success');
+ } else {
+ console.info(`audioDecoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioDecoder.on('newOutputData', (outBuffer) => { // 订阅音频解码的输出解码后内存事件
+ console.info('audioDecoder newOutputData success');
+ /* 获取outBuffer中的时间戳和index信息后,将其从队列中释放 */
+ audioDecoder.freeOutputBuffer(outBuffer, true, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder freeOutputBuffer success');
+ } else {
+ console.info(`audioDecoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioDecoder.on('error', (error) => { // 订阅音频解码错误事件,若出现报错,则需销毁资源,重新开始
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+ });
+ audioDecoder.on('streamChanged', (format) => { // 订阅音频解码媒体信息变化事件
+ if (typeof(format) != 'undefined') {
+ printfDescription(format);
+ }
+ });
+}
+
+/* 函数调用发生错误时用于上报错误信息 */
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+
+/* 函数调用发生异常时用于上报错误信息 */
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+let audioDecoder = undefined;
+let mediaDescription = {
+ "channel_count": 2,
+ "sample_rate": 44100,
+ "audio_sample_format": 1,
+}
+
+/* 1.创建音频解码实例 */
+await media.createAudioDecoderByMime('audio/mp4a-latm').then((decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByMime success');
+ } else {
+ console.info('audioDecoder createAudioDecoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+/* 2.设置监听事件 */
+SetCallback();
+
+/* 3.配置解码音频的媒体信息 */
+await audioDecoder.configure(mediaDescription).then(() => {
+ console.log('audioDecoder configure success');
+}, failureCallback).catch(catchCallback);
+
+/* 4.准备音频解码 */
+await audioDecoder.prepare().then(() => {
+ console.log('audioDecoder prepare success');
+}, failureCallback).catch(catchCallback);
+
+/* 5.开始音频解码 */
+await audioDecoder.start().then(() => {
+ console.log('audioDecoder start success');
+}, failureCallback).catch(catchCallback);
+
+/* 触发'needInputData'和'newOutputData'订阅事件 */
+
+/* 6.获取音频媒体信息 */
+await audioDecoder.getOutputMediaDescription().then((mediaDescription) => {
+ console.log('audioDecoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+}, failureCallback).catch(catchCallback);
+
+/* 7.获取音频解码能力 */
+await audioDecoder.getaudioDecoderCaps().then((audioCaps) => {
+ console.log('audioDecoder getaudioDecoderCaps success');
+}, failureCallback).catch(catchCallback);
+
+/* 8.清空缓存 */
+await audioDecoder.flush().then(() => {
+ console.log('audioDecoder flush success');
+}, failureCallback).catch(catchCallback);
+
+/* 9.停止解码 */
+await audioDecoder.stop().then(() => {
+ console.log('audioDecoder stop success');
+}, failureCallback).catch(catchCallback);
+
+/* 10.重置音频解码 */
+await audioDecoder.reset().then(() => {
+ console.log('audioDecoder reset success');
+}, failureCallback).catch(catchCallback);
+
+/* 11.销毁音频解码器资源 */
+await audioDecoder.release().then(() => {
+ console.log('audioDecoder release success');
+}, failureCallback).catch(catchCallback);
+audioDecoder = undefined; // 将音频解码器置空
+```
+
+### 正常解码场景
+
+```js
+/* 设置订阅事件回调函数 */
+function SetCallback() {
+ audioDecoder.on('needInputData', (inBuffer) => { // 订阅音频解码的输入音频帧内存事件
+ console.info('audioDecoder needInputData success');
+ /* 将要解码的音频帧数据写入inBuffer后,再将其推入队列中 */
+ audioDecoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder pushInputData success');
+ } else {
+ console.info(`audioDecoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioDecoder.on('newOutputData', (outBuffer) => { // 订阅音频解码的输出解码后内存事件
+ console.info('audioDecoder newOutputData success');
+ if (outBuffer.flags == media.FrameFlags.EOS_FRAME) { // 读到EOS帧
+ await audioDecoder.release().then(() => { // 销毁音频解码器资源
+ console.log('audioDecoder release success');
+ }, failureCallback).catch(catchCallback);
+ audioDecoder = undefined; // 将音频解码器置空
+ return;
+ }
+ /* 获取outBuffer中的时间戳和index信息后,将其从队列中释放 */
+ audioDecoder.freeOutputBuffer(outBuffer, true, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder freeOutputBuffer success');
+ } else {
+ console.info(`audioDecoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioDecoder.on('error', (error) => { // 订阅音频解码错误事件,若出现报错,则需销毁资源,重新开始
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+ });
+}
+
+let audioDecoder = undefined;
+let mediaDescription = {
+ "channel_count": 2,
+ "sample_rate": 44100,
+ "audio_sample_format": 1,
+}
+
+/* 1.创建音频解码实例 */
+await media.createAudioDecoderByMime('audio/mp4a-latm').then((decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByMime success');
+ } else {
+ console.info('audioDecoder createAudioDecoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+/* 2.设置监听事件 */
+SetCallback();
+
+/* 3.配置解码音频的媒体信息 */
+await audioDecoder.configure(mediaDescription).then(() => {
+ console.log('audioDecoder configure success');
+}, failureCallback).catch(catchCallback);
+
+/* 4.准备音频解码 */
+await audioDecoder.prepare().then(() => {
+ console.log('audioDecoder prepare success');
+}, failureCallback).catch(catchCallback);
+
+/* 5.开始音频解码 */
+await audioDecoder.start().then(() => {
+ console.log('audioDecoder start success');
+}, failureCallback).catch(catchCallback);
+
+/*
+ * 触发'needInputData'和'newOutputData'订阅事件
+ * 应用将需要解码的音频帧传入'needInputData'事件
+ * 再将'newOutputData'事件解码后的音频帧数据播放
+ */
+```
\ No newline at end of file
diff --git a/zh-cn/application-dev/media/audio-encoder.md b/zh-cn/application-dev/media/audio-encoder.md
new file mode 100644
index 0000000000000000000000000000000000000000..18c75b5ba60d25212ab4c7065af5fa63403b053b
--- /dev/null
+++ b/zh-cn/application-dev/media/audio-encoder.md
@@ -0,0 +1,232 @@
+# 音频编码开发指导
+
+## 场景介绍
+
+音频编码的主要工作是将音频原始数据编码为压缩数据,同时对音频编码任务进行管理。
+
+**图1** 音频编码状态机
+
+
+
+## 音频编码零层图
+
+**图2** 音频编码零层图
+
+
+
+## 音频编码开发步骤
+
+详细API含义可参考:[js-apis-media.md](../reference/apis/js-apis-media.md)
+
+### 全流程场景
+
+包含流程:创建音频编码实例、设置监听事件、配置编码音频的媒体信息、准备音频编码、开始音频编码、获取音频媒体信息、清空缓存、停止编码、重置音频编码、销毁音频编码器资源
+
+```js
+/* 用于打印音频媒体信息 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioEncoder key is ' + item);
+ console.info('audioEncoder value is ' + property);
+ }
+}
+
+/* 设置订阅事件回调函数 */
+function SetCallback() {
+ audioEncoder.on('needInputData', (inBuffer) => { // 订阅音频编码的输入音频帧内存事件
+ console.info('audioEncoder needInputData success');
+ /* 将要编码的音频帧数据写入inBuffer后,再将其推入队列中 */
+ audioEncoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder pushInputData success');
+ } else {
+ console.info(`audioEncoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioEncoder.on('newOutputData', (outBuffer) => { // 订阅音频编码的输出编码后内存事件
+ console.info('audioEncoder newOutputData success');
+ /* 获取outBuffer中的时间戳和index信息后,将其从队列中释放 */
+ audioEncoder.freeOutputBuffer(outBuffer, true, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder freeOutputBuffer success');
+ } else {
+ console.info(`audioEncoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioEncoder.on('error', (error) => { // 订阅音频编码错误事件,若出现报错,则需销毁资源,重新开始
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+ });
+ audioEncoder.on('streamChanged', (format) => { // 订阅音频编码媒体信息变化事件
+ if (typeof(format) != 'undefined') {
+ printfDescription(format);
+ }
+ });
+}
+
+/* 函数调用发生错误时用于上报错误信息 */
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+
+/* 函数调用发生异常时用于上报错误信息 */
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+let audioEncoder = undefined;
+let mediaDescription = {
+ "channel_count": 1,
+ "sample_rate": 48000,
+ "audio_sample_format": 3,
+}
+
+/* 1.创建音频编码实例 */
+await media.createAudioEncoderByMime('audio/mp4a-latm').then((Encoder) => {
+ if (typeof(Encoder) != 'undefined') {
+ audioEncoder = Encoder;
+ console.info('audioEncoder createAudioEncoderByMime success');
+ } else {
+ console.info('audioEncoder createAudioEncoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+/* 2.设置监听事件 */
+SetCallback();
+
+/* 3.配置编码音频的媒体信息 */
+await audioEncoder.configure(mediaDescription).then(() => {
+ console.log('audioEncoder configure success');
+}, failureCallback).catch(catchCallback);
+
+/* 4.准备音频编码 */
+await audioEncoder.prepare().then(() => {
+ console.log('audioEncoder prepare success');
+}, failureCallback).catch(catchCallback);
+
+/* 5.开始音频编码 */
+await audioEncoder.start().then(() => {
+ console.log('audioEncoder start success');
+}, failureCallback).catch(catchCallback);
+
+/* 触发'needInputData'和'newOutputData'订阅事件 */
+
+/* 6.获取音频媒体信息 */
+await audioEncoder.getOutputMediaDescription().then((mediaDescription) => {
+ console.log('audioEncoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+}, failureCallback).catch(catchCallback);
+
+/* 7.获取音频编码能力 */
+await audioEncoder.getaudioEncoderCaps().then((audioCaps) => {
+ console.log('audioEncoder getaudioEncoderCaps success');
+}, failureCallback).catch(catchCallback);
+
+/* 8.清空缓存 */
+await audioEncoder.flush().then(() => {
+ console.log('audioEncoder flush success');
+}, failureCallback).catch(catchCallback);
+
+/* 9.停止编码 */
+await audioEncoder.stop().then(() => {
+ console.log('audioEncoder stop success');
+}, failureCallback).catch(catchCallback);
+
+/* 10.重置音频编码 */
+await audioEncoder.reset().then(() => {
+ console.log('audioEncoder reset success');
+}, failureCallback).catch(catchCallback);
+
+/* 11.销毁音频编码器资源 */
+await audioEncoder.release().then(() => {
+ console.log('audioEncoder release success');
+}, failureCallback).catch(catchCallback);
+audioEncoder = undefined; // 将音频编码器置空
+```
+
+### 正常编码场景
+
+```js
+/* 设置订阅事件回调函数 */
+function SetCallback() {
+ audioEncoder.on('needInputData', (inBuffer) => { // 订阅音频编码的输入音频帧内存事件
+ console.info('audioEncoder needInputData success');
+ /* 将要编码的音频帧数据写入inBuffer后,再将其推入队列中 */
+ audioEncoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder pushInputData success');
+ } else {
+ console.info(`audioEncoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioEncoder.on('newOutputData', (outBuffer) => { // 订阅音频编码的输出编码后内存事件
+ console.info('audioEncoder newOutputData success');
+ if (outBuffer.flags == media.FrameFlags.EOS_FRAME) { // 读到EOS帧
+ await audioEncoder.release().then(() => { // 销毁音频编码器资源
+ console.log('audioEncoder release success');
+ }, failureCallback).catch(catchCallback);
+ audioEncoder = undefined; // 将音频编码器置空
+ return;
+ }
+ /* 获取outBuffer中的时间戳和index信息后,将其从队列中释放 */
+ audioEncoder.freeOutputBuffer(outBuffer, true, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder freeOutputBuffer success');
+ } else {
+ console.info(`audioEncoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+ });
+ audioEncoder.on('error', (error) => { // 订阅音频编码错误事件,若出现报错,则需销毁资源,重新开始
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+ });
+}
+
+let audioEncoder = undefined;
+let mediaDescription = {
+ "channel_count": 1,
+ "sample_rate": 48000,
+ "audio_sample_format": 3,
+}
+
+/* 1.创建音频编码实例 */
+await media.createAudioEncoderByMime('audio/mp4a-latm').then((Encoder) => {
+ if (typeof(Encoder) != 'undefined') {
+ audioEncoder = Encoder;
+ console.info('audioEncoder createAudioEncoderByMime success');
+ } else {
+ console.info('audioEncoder createAudioEncoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+/* 2.设置监听事件 */
+SetCallback();
+
+/* 3.配置编码音频的媒体信息 */
+await audioEncoder.configure(mediaDescription).then(() => {
+ console.log('audioEncoder configure success');
+}, failureCallback).catch(catchCallback);
+
+/* 4.准备音频编码 */
+await audioEncoder.prepare().then(() => {
+ console.log('audioEncoder prepare success');
+}, failureCallback).catch(catchCallback);
+
+/* 5.开始音频编码 */
+await audioEncoder.start().then(() => {
+ console.log('audioEncoder start success');
+}, failureCallback).catch(catchCallback);
+
+/*
+ * 触发'needInputData'和'newOutputData'订阅事件
+ * 应用将需要编码的音频帧传入'needInputData'事件
+ * 再将'newOutputData'事件编码后的音频帧数据储存
+ */
+```
\ No newline at end of file
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder.png b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4c59dd681ad11d842d541fb403b2f87fe8a7b3f
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder_machine.png b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder_machine.png
new file mode 100644
index 0000000000000000000000000000000000000000..e619498b79125aa7bb3cefcb427e55d1ff31937d
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_decoder_machine.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder.png b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7deb0796b4c7d108da9704c087ae52a8e177853
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder.png differ
diff --git a/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder_machine.png b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder_machine.png
new file mode 100644
index 0000000000000000000000000000000000000000..e619498b79125aa7bb3cefcb427e55d1ff31937d
Binary files /dev/null and b/zh-cn/application-dev/media/figures/zh-ch_image_image_audio_encoder_machine.png differ
diff --git a/zh-cn/application-dev/reference/apis/js-apis-media.md b/zh-cn/application-dev/reference/apis/js-apis-media.md
index 21af291759b0e9c973a051ce31c2b5e660311e67..4f28d7cbc335fde7ef452b4c1c77693bf416a0f5 100644
--- a/zh-cn/application-dev/reference/apis/js-apis-media.md
+++ b/zh-cn/application-dev/reference/apis/js-apis-media.md
@@ -6,6 +6,8 @@
- 音频播放([AudioPlayer](#audioplayer))
- 音频录制([AudioRecorder](#audiorecorder))
+- 音频解码([AudioDecodeProcessor](#audiodecodeprocessor8))
+- 音频编码([AudioEncodeProcessor](#audioencodeprocessor8))
后续将提供以下功能:视频播放、视频录制、DataSource音视频播放、音视频编解码、容器封装解封装、媒体能力查询等功能。
@@ -37,7 +39,7 @@ var audioPlayer = media.createAudioPlayer();
createAudioPlayerAsync(callback: AsyncCallback\<[AudioPlayer](#audioplayer)>): void
-异步方式创建音频播放实例。通过注册回调函数获取返回值。
+异步创建音频播放实例。通过注册回调函数获取返回值。
**参数:**
@@ -62,7 +64,7 @@ media.createAudioPlayerAsync((error, audio) => {
createAudioPlayerAsync: Promise<[AudioPlayer](#audioplayer)>
-异步方式创建音频播放实例。通过Promise获取返回值。
+异步创建音频播放实例。通过Promise获取返回值。
**返回值:**
@@ -107,6 +109,286 @@ createAudioRecorder(): AudioRecorder
var audiorecorder = media.createAudioRecorder();
```
+## media.createAudioDecoderByName8+
+
+createAudioDecoderByName(name: string, callback: AsyncCallback<[AudioDecodeProcessor](#audiodecodeprocessor8)>):void
+
+通过解码器名称异步创建音频解码实例。通过注册回调函数获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------------------------------------------------ | ---- | ------------------------------ |
+| name | string | 是 | 指定解码器名称。 |
+| callback | AsyncCallback<[AudioDecodeProcessor](#audiodecodeprocessor8)>) | 是 | 异步创建音频解码实例回调方法。 |
+
+**示例:**
+
+```
+media.createAudioDecoderByName('avdec_mp3', (error, decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByName success');
+ } else {
+ console.info(`audioDecoder createAudioDecoderByName fail, error:${error.message}`);
+ }
+});
+```
+
+## media.createAudioDecoderByName8+
+
+createAudioDecoderByName(name: string): Promise<[AudioDecodeProcessor](#audiodecodeprocessor8)>
+
+通过解码器名称异步创建音频解码实例。通过Promise获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ------ | ---- | ---------------- |
+| name | string | 是 | 指定解码器名称。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------------------------------------------------ | --------------------------------- |
+| Promise<[AudioDecodeProcessor](#audiodecodeprocessor8)> | 异步创建音解码实例Promise返回值。 |
+
+**示例:**
+
+```
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await media.createAudioDecoderByName('avdec_mp3').then((decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByName success');
+ } else {
+ console.info('audioDecoder createAudioDecoderByName fail');
+ }
+}, failureCallback).catch(catchCallback);
+
+```
+
+## media.createAudioDecoderByMime8+
+
+createAudioDecoderByMime(codecMime: string, callback: AsyncCallback<[AudioDecodeProcessor](#audiodecodeprocessor8)>):void
+
+通过CodecMimeType类型异步创建音频解码实例。通过注册回调函数获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | ------------------------------------------------------------ | ---- | ----------------------------------------------------------- |
+| codecMime | string | 是 | codecMime类型,具体可参考[CodecMimeType](#codecmimetype8)。 |
+| callback | AsyncCallback<[AudioDecodeProcessor](#audiodecodeprocessor8)> | 是 | 异步创建音频解码实例回调方法。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| --------------------------------------------- | ------------------------------------------------ |
+| [AudioDecodeProcessor](#audiodecodeprocessor8) | 返回AudioDecodeProcessor类实例,失败时返回null。 |
+
+**示例:**
+
+```
+media.createAudioDecoderByMime('audio/mpeg', (error, decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByMime success');
+ } else {
+ console.info(`audioDecoder createAudioDecoderByMime fail, error:${error.message}`);
+ }
+});
+```
+
+## media.createAudioDecoderByMime8+
+
+createAudioDecoderByMime(codecMime: string): Promise<[AudioDecodeProcessor](#audiodecodeprocessor8)>
+
+通过CodecMimeType类型异步创建音频解码实例。通过Promise获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | ------ | ---- | ----------------------------------------------------------- |
+| codecMime | string | 是 | codecMime类型,具体可参考[CodecMimeType](#codecmimetype8)。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------------------------------------------------ | ----------------------------------- |
+| Promise<[AudioDecodeProcessor](#audiodecodeprocessor8)> | 异步创建音频解码实例Promise返回值。 |
+
+**示例:**
+
+```
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await media.createAudioDecoderByMime('audio/mpeg').then((decoder) => {
+ if (typeof(decoder) != 'undefined') {
+ audioDecoder = decoder;
+ console.info('audioDecoder createAudioDecoderByMime success');
+ } else {
+ console.info('audioDecoder createAudioDecoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+```
+
+## media.createAudioEncoderByName8+
+
+createAudioEncoderByName(name: string, callback: AsyncCallback<[AudioEncodeProcessor](#audioencodeprocessor8)>):void
+
+通过编码器名称异步创建音频编码实例。通过注册回调函数获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------------------------------------------------ | ---- | ------------------------------ |
+| name | string | 是 | 指定编码器名称。 |
+| callback | AsyncCallback<[AudioEncodeProcessor](#audioencodeprocessor8)> | 是 | 异步创建音频编码实例回调方法。 |
+
+**示例:**
+
+```
+media.createAudioEncoderByName('avenc_aac', (error, encoder) => {
+ if (typeof(encoder) != 'undefined') {
+ audioEncoder = encoder;
+ console.info('audioEncoder createAudioEncoderByName success');
+ } else {
+ console.info(`audioEncoder createAudioEncoderByName fail, error:${error.message}`);
+ }
+});
+```
+
+## media.createAudioEncoderByName8+
+
+createAudioEncoderByName(name: string): Promise<[AudioEncodeProcessor](#audioencodeprocessor8)>
+
+通过编码器名称异步创建音频编码实例。通过Promise获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ------ | ---- | ---------------- |
+| name | string | 是 | 指定编码器名称。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------------------------------------------------ | ----------------------------------- |
+| Promise<[AudioEncodeProcessor](#audioencodeprocessor8)> | 异步创建音频编码实例Promise返回值。 |
+
+**示例:**
+
+```
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await media.createAudioEncoderByName('avenc_aac').then((encoder) => {
+ if (typeof(encoder) != 'undefined') {
+ audioEncoder = encoder;
+ console.info('audioEncoder createAudioEncoderByName success');
+ } else {
+ console.info('audioEncoder createAudioEncoderByName fail');
+ }
+}, failureCallback).catch(catchCallback);
+```
+
+
+
+## media.createAudioEncoderByMime8+
+
+createAudioEncoderByMime(codecMime: string, callback: AsyncCallback<[AudioEncodeProcessor](#audioencodeprocessor8)>):void
+通过CodecMimeType类型异步创建音频编码实例。通过注册回调函数获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | ------------------------------------------------------------ | ---- | ----------------------------------------------------------- |
+| codecMime | string | 是 | codecMime类型,具体可参考[CodecMimeType](#codecmimetype8)。 |
+| callback | AsyncCallback<[AudioEncodeProcessor](#audioencodeprocessor8)> | 是 | 异步创建音频编码实例回调方法。 |
+
+**示例:**
+
+```
+media.createAudioEncoderByMime('audio/mp4a-latm', (error, encoder) => {
+ if (typeof(encoder) != 'undefined') {
+ audioEncoder = encoder;
+ console.info('audioEncoder createAudioEncoderByMime success');
+ } else {
+ console.info(`audioEncoder createAudioEncoderByMime fail, error:${error.message}`);
+ }
+});
+```
+
+## media.createAudioEncoderByMime8+
+
+createAudioEncoderByMime(codecMime: string): Promise<[AudioEncodeProcessor](#audioencodeprocessor8)>
+
+通过CodecMimeType类型异步创建音频编码实例。 通过Promise获取返回值。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| --------- | ------ | ---- | ----------------------------------------------------------- |
+| codecMime | string | 是 | codecMime类型,具体可参考[CodecMimeType](#codecmimetype8)。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------------------------------------------------ | ----------------------------------- |
+| Promise<[AudioEncodeProcessor](#audioencodeprocessor8)> | 异步创建音频解码实例Promise返回值。 |
+
+**示例:**
+
+```
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await media.createAudioDecoderByMime('audio/mp4a-latm').then((encoder) => {
+ if (typeof(encoder) != 'undefined') {
+ audioEncoder = encoder;
+ console.info('audioEncoder createAudioEncoderByMime success');
+ } else {
+ console.info('audioEncoder createAudioEncoderByMime fail');
+ }
+}, failureCallback).catch(catchCallback);
+```
+
## MediaErrorCode8+
媒体服务错误类型枚举
@@ -709,4 +991,1799 @@ on(type: 'error', callback: ErrorCallback): void
| 名称 | 默认值 | 说明 |
| -------- | ------ | ------------------------------------------------------------ |
| MPEG_4 | 2 | 封装为MPEG-4格式。 |
-| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 |
\ No newline at end of file
+| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 |
+
+## AudioDecodeProcessor8+
+
+音频解码管理类,用于解码音频媒体。在调用AudioDecodeProcessor的方法前,需要先通过[createAudioDecoderByName()](#media.createaudiodecoderbyname8)或[createAudioDecoderByMime()](#media.createaudiodecoderbymime8)构建一个[AudioDecodeProcessor](#audiodecodeprocessor8)实例。
+
+音频解码demo可参考:[音频解码开发指导](../../media/audio-decoder.md)
+
+### configure
+
+configure(desc: [MediaDescription](#mediadescription8), callback: AsyncCallback): void
+
+配置解码音频的媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 设置媒体配置信息。媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。
必须设置的音频解码媒体信息:MD_KEY_AUD_CHANNEL_COUNT、MD_KEY_AUD_SAMPLE_RATE、MD_KEY_AUDIO_SAMPLE_FORMAT。 |
+| callback | AsyncCallback | 是 | 配置媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+let mediaDescription = {
+ "channel_count" : 2,
+ "sample_rate" : 44100,
+ "audio_sample_format": 1,
+}
+audioDecoder.configure(mediaDescription, (error) => { // 配置媒体信息
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder configure success');
+ } else {
+ console.info(`audioDecoder configure fail, errMessage:${error.message}`);
+ }
+});
+```
+
+
+### configure
+
+configure(desc: [MediaDescription](#mediadescription8)): Promise
+
+配置解码音频的媒体信息。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 设置媒体配置信息。媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。
必须设置的音频解码媒体信息:MD_KEY_AUD_CHANNEL_COUNT、MD_KEY_AUD_SAMPLE_RATE、MD_KEY_AUDIO_SAMPLE_FORMAT。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 配置媒体信息Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+let mediaDescription = {
+ "channel_count" : 2,
+ "sample_rate" : 44100,
+ "audio_sample_format": 1,
+}
+await audioDecoder.configure(mediaDescription).then(() => { // 配置媒体信息
+ console.log('audioDecoder configure success');
+}, failureCallback).catch(catchCallback);
+```
+
+### prepare
+
+prepare(callback: AsyncCallback): void
+
+准备音频解码,通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 准备音频解码事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.prepare((error) => { // 准备音频解码
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder prepare success');
+ } else {
+ console.info(`audioDecoder prepare fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### prepare
+
+prepare(): Promise
+
+准备音频解码,通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 准备音频解码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.prepare().then(() => { // 准备音频解码
+ console.log('audioDecoder prepare success');
+}, failureCallback).catch(catchCallback);
+```
+
+### start
+
+start(callback: AsyncCallback): void
+
+开始音频解码器,通过注册回调函数获取执行结果。在start()方法调用前需完成[needInputData](#onneedinputdata)和[newOutputData](#onnewoutputdata)两个事件注册。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 开始音频解码事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.start((error) => { // 开始音频解码
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder start success');
+ } else {
+ console.info(`audioDecoder start fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### start
+
+start(): Promise
+
+开始音频解码,通过Promise获取执行结果。在start()方法调用前需完成[needInputData](#onneedinputdata)和[newOutputData](#onnewoutputdata)两个事件注册。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 开始音频解码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.start().then(() => { // 开始音频解码
+ console.log('audioDecoder start success');
+}, failureCallback).catch(catchCallback);
+
+```
+
+### stop
+
+stop(callback: AsyncCallback): void
+
+停止音频解码,通过注册回调函数获取执行结果。stop()后可直接调用[start()](#audiodecodeprocessor_start1)继续进行解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 停止音频解码事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.stop((error) => { // 停止音频解码
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder stop success');
+ } else {
+ console.info(`audioDecoder stop fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### stop
+
+stop(): Promise
+
+停止音频解码。通过Promise获取执行结果。stop()后可直接调用[start()](#audiodecodeprocessor_start2)继续进行解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 停止音频解码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.stop().then(() => { // 停止音频解码
+ console.log('audioDecoder stop success');
+}, failureCallback).catch(catchCallback);
+```
+
+### flush
+
+flush(callback: AsyncCallback): void
+
+清空缓存中未完成解码的内存。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | ---------------------- |
+| callback | AsyncCallback | 是 | 清空缓存事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.flush((error) => { // 刷新缓存
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder flush success');
+ } else {
+ console.info(`audioDecoder flush fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### flush
+
+flush(): Promise
+
+清空缓存中未完成解码的内存。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | ----------------------- |
+| Promise | 清空缓存Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.flush().then(() => { // 清空缓存
+ console.log('audioDecoder flush success');
+}, failureCallback).catch(catchCallback);
+```
+
+### reset
+
+reset(callback: AsyncCallback): void
+
+重置音频解码。通过注册回调函数获取执行结果。重置后需要重新[configure()](#audiodecodeprocessor_configure1)和[prepare()](#audiodecodeprocessor_prepare1)才可进行音频解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | ------------------------ |
+| callback | AsyncCallback | 是 | 重置音解码事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.reset((error) => { // 重置音频解码
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder reset success');
+ } else {
+ console.info(`audioDecoder reset fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### reset
+
+reset(): Promise
+
+重置音频解码。通过Promise获取执行结果。重置后需要重新[configure()](#audiodecodeprocessor_configure2)和[prepare()](#audiodecodeprocessor_prepare2)才可进行音频解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 重置音频解码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.reset().then(() => { // 重置音频解码
+ console.log('audioDecoder reset success');
+}, failureCallback).catch(catchCallback);
+```
+
+### release
+
+release(callback: AsyncCallback): void
+
+销毁音频解码器资源。通过注册回调函数获取执行结果。应用需手动release,不能依赖内存回收机制。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------------- |
+| callback | AsyncCallback | 是 | 销毁音频解码器资源事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.release((error) => { // 销毁音频解码器资源
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder release success');
+ audioDecoder = undefined; // 将音频解码器置空
+ } else {
+ console.info(`audioDecoder release fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### release
+
+release(): Promise
+
+销毁音解码器资源。通过Promise获取执行结果。应用需手动release,不能依赖内存回收机制。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------- |
+| Promise | 销毁音频解码器资源Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.release().then(() => { // 销毁音频解码器资源
+ console.log('audioDecoder release success');
+}, failureCallback).catch(catchCallback);
+audioDecoder = undefined; // 将音频解码器置空
+```
+
+
+### pushInputData
+
+pushInputData(buffer: [CodecBuffer](#codecbuffer8), callback: AsyncCallback): void
+
+将解码音频帧内存数据输入队列。通过注册回调函数获取执行结果。需在[start()](#audiodecodeprocessor_start1)之后才可调用此接口。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ---------------------------- | ---- | -------------------------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 音频解码原始帧数据。 |
+| callback | AsyncCallback | 是 | 输入解码音频帧数据进队列事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.on('needInputData', (inputBuffer) => { // 订阅needInputData事件
+ /* 将需要解码的数据传入inputBuffer中,此处需仅做示例,解码时,需按实际情况将每帧的数据进行赋值 */
+ inputBuffer.index = 0;
+ inputBuffer.timeMs = 0;
+ inputBuffer.offset = 0;
+ inputBuffer.length = 100;
+ inputBuffer.flags = 1;
+ inputBuffer.data; // 使用零拷贝策略,将数据直接写入data中
+ /* 将需要解码的数据推入队列中 */
+ audioDecoder.pushInputData(inputBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder pushInputData success');
+ } else {
+ console.info(`audioDecoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### pushInputData
+
+pushInputData(buffer: [CodecBuffer](#codecbuffer8)): Promise
+
+将解码音频帧内存数据输入队列。 通过Promise获取执行结果 。需在[start()](#audiodecodeprocessor_start2)之后才可调用此接口。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ---------------------------- | ---- | -------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 音频解码原始帧数据。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------------- |
+| Promise | 将解码音频帧数据输入队列Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+audioDecoder.on('needInputData', (inputBuffer) => { // 订阅needInputData事件
+ /* 将需要解码的数据传入inputBuffer中,此处仅做示例,解码时,需按实际情况将每帧的数据进行赋值 */
+ inputBuffer.index = 0;
+ inputBuffer.timeMs = 0;
+ inputBuffer.offset = 0;
+ inputBuffer.length = 100;
+ inputBuffer.flags = 1;
+ inputBuffer.data; // 使用零拷贝策略,将数据直接写入data中
+ /* 将需要解码的数据推入队列中 */
+ await audioDecoder.pushInputData(inputBuffer).then(() => {
+ console.log('audioDecoder pushInputData success');
+ }, failureCallback).catch(catchCallback);
+});
+```
+
+### freeOutputBuffer
+
+freeOutputBuffer(buffer: [CodecBuffer](#codecbuffer8), callback: AsyncCallback): void
+
+释放解码输出的音频帧内存。 通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ---------------------------- | ---- | -------------------------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 解码完成的音频帧数据。 |
+| callback | AsyncCallback | 是 | 释放解码输出的音频帧内存事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.on('newOutputData', (outputBuffer) => { // 订阅newOutputData事件
+ /* 将newOutputData数据读取后,再将其释放 */
+ audioDecoder.freeOutputBuffer(outputBuffer, (error) => { // 释放解码输出的音频帧内存
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder freeOutputBuffer success');
+ } else {
+ console.info(`audioDecoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### freeOutputBuffer
+
+freeOutputBuffer(buffer: [CodecBuffer](#codecbuffer8)): Promise
+
+释放解码输出的音频帧内存。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ---------------------------- | ---- | ---------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 解码完成的音频帧数据。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------------- |
+| Promise | 释放解码输出的音频帧内存Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+audioDecoder.on('newOutputData', (outputBuffer) => { // 订阅newOutputData事件
+ /* 将outputBuffer数据读取后,再将其释放 */
+ await audioDecoder.freeOutputBuffer(outputBuffer, false).then(() => { // 释放解码输出的音频帧内存
+ console.log('audioDecoder freeOutputBuffer success');
+ }, failureCallback).catch(catchCallback);
+});
+```
+
+### setParameter
+
+setParameter(desc: [MediaDescription](#mediadescription8), callback: AsyncCallback): void;
+
+动态设置解码音频的媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。 |
+| callback | AsyncCallback | 是 | 动态设置解码音频的媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+let mediaDescription = { // 此处mediaDescription仅做为示例
+ "channel_count" : 2,
+ "sample_rate" : 44100,
+ "audio_sample_format": 1,
+}
+
+audioDecoder.setParameter(mediaDescription, (error) => { // 动态设置解码音频的媒体信息
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder setParameter success');
+ } else {
+ console.info(`audioDecoder setParameter fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### setParameter
+
+setParameter(desc: [MediaDescription](#mediadescription8)): Promise
+
+设置音频解码器的配置参数,通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | -------------------------------------- | ---- | ------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 设置媒体配置信息。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------------------- |
+| Promise | 音频解码器参数设置完成时,返回的Promise实例。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+let mediaDescription = { // 此处mediaDescription仅做为示例
+ "channel_count" : 2,
+ "sample_rate" : 44100,
+ "audio_sample_format": 1,
+}
+
+await audioDecoder.setParameter(mediaDescription).then(() => { // 动态设置解码音频的媒体信息
+ console.log('audioDecoder setParameter success');
+}, failureCallback).catch(catchCallback);
+```
+
+### getOutputMediaDescription
+
+getOutputMediaDescription(callback: AsyncCallback<[MediaDescription](#mediadescription8)>): void
+
+获取解码音频的当前媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ----------------------------------------------------- | ---- | ---------------------------------------- |
+| callback | AsyncCallback<[MediaDescription](#mediadescription8)> | 是 | 获取解码音频的当前媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioDecoder key is ' + item);
+ console.info('audioDecoder value is ' + property);
+ }
+}
+
+audioDecoder.getOutputMediaDescription((error, mediaDescription) => {
+ if (typeof(mediaDescription) != 'undefined') {
+ console.log('audioDecoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+ } else {
+ console.log('audioDecoder getOutputMediaDescription fail');
+ }
+});
+```
+
+### getOutputMediaDescription
+
+getOutputMediaDescription(): Promise<[MediaDescription](#mediadescription8)>
+
+获取解码音频的当前媒体信息。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ----------------------------------------------- | ------------------------------------------- |
+| Promise<[MediaDescription](#mediadescription8)> | 获取解码音频的当前媒体信息的Promise返回值。 |
+
+**示例:**
+
+```js
+/* 将format中的所有内容显示 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioDecoder key is ' + item);
+ console.info('audioDecoder value is ' + property);
+ }
+}
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.getOutputMediaDescription().then((mediaDescription) => {
+ console.log('audioDecoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+}, failureCallback).catch(catchCallback);
+```
+
+### on('error')
+
+on(type: 'error', callback: ErrorCallback<[CodecError](#codecerror8)>): void
+
+订阅音频解码错误事件。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频解码错误事件回调类型,支持的事件包括:'error'。
- 'error':音频解码中发生错误,触发该事件。 |
+| callback | ErrorCallback<[CodecError](#codecerror8)> | 是 | 音频解码错误事件回调方法。 |
+
+**示例:**
+
+```js
+audioDecoder.on('error', (error) => { // 设置'error'事件回调
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+});
+/* 系统内存不足或状态切换异常时,触发error事件回调 */
+```
+
+
+### on('streamChanged')
+
+on(type: 'streamChanged', callback: Callback<[MediaDescription](#mediadescription8)>): void
+
+监听音频解码器输出格式更改或第一帧解码格式事件。 新的输出信息将通过回调方式返回。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 解码音频第一帧或媒体信息发生变化事件回调类型,支持的事件包括:'streamChanged'。
- 'streamChanged':解码音频第一帧解码完成或媒体信息发生变化时,触发该事件。 |
+| callback | Callback<[MediaDescription](#mediadescription8)> | 是 | 解码音频第一帧或媒体信息发生变化事件回调方法。 |
+
+**示例:**
+
+```js
+/* 将format中的所有内容显示 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioDecoder key is ' + item);
+ console.info('audioDecoder value is ' + property);
+ }
+}
+
+audioEncoder.on('streamChanged', (format) => { // 设置解码音频第一帧或媒体信息发生变化事件回调
+ if (typeof(format) != 'undefined') {
+ printfDescription(format);
+ }
+});
+/* 解码音频的媒体信息发生变化时,触发事件 */
+```
+
+### on('needInputData')
+
+on(type: 'needInputData', callback: Callback<[CodecBuffer](#codecbuffer8)>): void
+
+订阅音频解码输入音频帧内存事件。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频解码输入音频帧内存事件回调类型,支持的事件包括:'needInputData'。
- 'needInputData':[start()](#audiodecodeprocessor_start1)调用之后,触发该事件。 |
+| callback | Callback<[CodecBuffer](#codecbuffer8)> | 是 | 音频解码输入音频帧内存事件回调方法。 - 用户需将要解码的音频帧内容填入[CodecBuffer](#codecbuffer8),再调用[pushInputData()](#audiodecodeprocessor_pushinputdata1)方法将[CodecBuffer](#codecbuffer8)推入队列中。 |
+
+**示例:**
+
+```js
+audioDecoder.on('needInputData', (inBuffer) => {
+ console.info('audioDecoder needInputData');
+ /* 将音频帧内容填入inBuffer后,调用pushInputData方法将其推入队列 */
+ audioDecoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder pushInputData success');
+ } else {
+ console.info(`audioDecoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### on('newOutputData')
+
+on(type: 'newOutputData', callback: Callback<[CodecBuffer](#codecbuffer8)>): void
+
+订阅音频解码输出音频帧解码后内存事件。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频解码输出音频帧解码后内存事件回调类型,支持的事件包括:'newOutputData'。
\- 'newOutputData':[pushInputData()](#audiodecodeprocessor_pushinputdata1)调用之后,触发该事件。 |
+| callback | Callback<[CodecBuffer](#codecbuffer8)> | 是 | 音频解码输出音频帧解码后内存事件。
\- 媒体服务将音频帧解码后的内容通过[CodecBuffer](#codecbuffer8)返回给用户,用户读取内存后,需调用[freeOutputBuffer()](#audiodecodeprocessor_freeoutputbuffer1)方法将该内存从队列中移除。 |
+
+**示例:**
+
+```js
+audioDecoder.on('newOutputData', (outBuffer) => {
+ console.info('audioDecoder newOutputData');
+ /* 获取outBuffer中音频帧解码后的时间戳和index后,调用freeOutputBuffer方法将该帧送显,并将该内存从队列中移除 */
+ audioEncoder.freeOutputBuffer(outBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder freeOutputBuffer success');
+ } else {
+ console.info(`audioDecoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### getAudioDecoderCaps
+
+getAudioDecoderCaps(callback: AsyncCallback<[AudioCaps](#audiocaps8)>): void
+
+获取音频解码能力。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | --------------------------------------- | ---- | ------------------------------ |
+| callback | AsyncCallback<[AudioCaps](#audiocaps8)> | 是 | 获取音频解码能力事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.getAudioDecoderCaps((error, audioCaps) => {
+ if (typeof(audioCaps) != 'undefined') {
+ console.log('audioDecoder getAudioDecoderCaps success');
+ printfDescription(mediaDescription);
+ } else {
+ console.log('audioDecoder getAudioDecoderCaps fail');
+ }
+});
+```
+
+### getAudioDecoderCaps
+
+getAudioDecoderCaps(): Promise<[AudioCaps](#audiocaps8)>
+获取音频解码能力。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioDecoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| --------------------------------- | --------------------------------- |
+| Promise<[AudioCaps](#audiocaps8)> | 获取音频解码能力的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioDecoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioDecoder catchCallback, error:${error.message}`);
+}
+
+await audioDecoder.getAudioDecoderCaps().then((videoCaps) => {
+ console.log('audioDecoder getAudioDecoderCaps success');
+}, failureCallback).catch(catchCallback);
+```
+
+## AudioEncodeProcessor8+
+
+音频编码管理类,用于编码音频媒体。在调用AudioEncodeProcessor的方法前,需要先通过[createAudioEncoderByName()](#media.createaudioencoderbyname)或[createAudioEncoderByMime()](#media.createaudioencoderbymime)构建一个[AudioEncodeProcessor](#audioencodeprocessor8)实例。
+
+音频编码demo可参考:[音频编码开发指导](../../media/audio-encoder.md)
+
+### configure
+
+configure(desc: [MediaDescription](#mediadescription8), callback: AsyncCallback): void
+
+配置编码音频的媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 设置媒体配置信息。媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。
必须设置的音频编码媒体信息:MD_KEY_AUD_CHANNEL_COUNT、MD_KEY_AUD_SAMPLE_RATE、MD_KEY_AUDIO_SAMPLE_FORMAT。 |
+| callback | AsyncCallback | 是 | 配置媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+let mediaDescription = {
+ "channel_count" : 1,
+ "sample_rate" : 48000,
+ "audio_sample_format": 3,
+}
+audioEncoder.configure(mediaDescription, (error) => { // 配置媒体信息
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder configure success');
+ } else {
+ console.info(`audioEncoder configure fail, errMessage:${error.message}`);
+ }
+});
+```
+
+
+### configure
+
+configure(desc: [MediaDescription](#mediadescription8)): Promise
+
+通过Promise方式使用 [MediaDescription](#mediadescription8)配置音频编码器。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 设置媒体配置信息。媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。
必须设置的音频编码媒体信息:MD_KEY_AUD_CHANNEL_COUNT、MD_KEY_AUD_SAMPLE_RATE、MD_KEY_AUDIO_SAMPLE_FORMAT。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 配置媒体信息Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+let mediaDescription = {
+ "channel_count" : 1,
+ "sample_rate" : 48000,
+ "audio_sample_format": 3,
+}
+await audioEncoder.configure(mediaDescription).then(() => { // 配置媒体信息
+ console.log('audioEncoder configure success');
+}, failureCallback).catch(catchCallback);
+```
+
+### prepare
+
+prepare(callback: AsyncCallback): void
+
+准备音频编码,通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 准备音频编码事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.prepare((error) => { // 准备音频编码
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder prepare success');
+ } else {
+ console.info(`audioEncoder prepare fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### prepare
+
+prepare(): Promise
+
+准备音频编码,通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 准备音频编码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.prepare().then(() => { // 准备音频编码
+ console.log('audioEncoder prepare success');
+}, failureCallback).catch(catchCallback);
+```
+
+### start
+
+start(callback: AsyncCallback): void
+
+开始音频编码,通过注册回调函数获取执行结果。在start()方法调用前需完成[needInputData](#onneedinputdata-1)和[newOutputData](#onnewoutputdata-1)两个事件注册。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 开始音频编码事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.stop((error) => { // 停止音频编码
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder stop success');
+ } else {
+ console.info(`audioEncoder stop fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### start
+
+start(): Promise
+
+启动音频编码,通过Promise获取执行结果。在start()方法调用前需完成[needInputData](#onneedinputdata-1)和[newOutputData](#onnewoutputdata-1)两个事件注册。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 开始音频编码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.start().then(() => { // 开始音频编码
+ console.log('audioEncoder start success');
+}, failureCallback).catch(catchCallback);
+```
+
+### stop
+
+stop(callback: AsyncCallback): void
+
+停止音频解码,通过注册回调函数获取执行结果。stop()后可直接调用[start()](#audioencodeprocessor_start1)继续进行解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 停止音频编码事件回调函数。 |
+
+**示例:**
+
+```js
+audioDecoder.stop((error) => { // 停止音频解码
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder stop success');
+ } else {
+ console.info(`audioDecoder stop fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### stop
+
+stop(): Promise
+
+停止音频编码。通过Promise获取执行结果。stop()后可直接调用[start()](#audioencodeprocessor_start2)继续进行解码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 停止音频编码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.stop().then(() => { // 停止音频编码
+ console.log('audioEncoder stop success');
+}, failureCallback).catch(catchCallback);
+```
+
+### flush
+
+flush(callback: AsyncCallback): void
+
+清空缓存中未完成编码的内存。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | ---------------------- |
+| callback | AsyncCallback | 是 | 清空缓存事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.flush((error) => { // 刷新缓存
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder flush success');
+ } else {
+ console.info(`audioEncoder flush fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### flush
+
+flush(): Promise
+
+清空缓存中未完成编码的内存。 通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | ----------------------- |
+| Promise | 清空缓存Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.flush().then(() => { // 清空缓存
+ console.log('audioEncoder flush success');
+}, failureCallback).catch(catchCallback);
+```
+
+### reset
+
+reset(callback: AsyncCallback): void
+
+重置音频编码。通过注册回调函数获取执行结果。重置后需要重新[configure()](#audioencodeprocessor_configure1)和[prepare()](#audioencodeprocessor_prepare1)才可进行音频编码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------- |
+| callback | AsyncCallback | 是 | 重置音频编码事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.reset((error) => { // 重置音频编码
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder reset success');
+ } else {
+ console.info(`audioEncoder reset fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### reset
+
+reset(): Promise
+
+重置音频编码。 通过Promise获取执行结果 。重置后需要重新[configure()](#audioencodeprocessor_configure2)和[prepare()](#audioencodeprocessor_prepare2)才可进行音频编码。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------- |
+| Promise | 重置音频编码Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.reset().then(() => { // 重置音频编码
+ console.log('audioEncoder reset success');
+}, failureCallback).catch(catchCallback);
+```
+
+### release
+
+release(callback: AsyncCallback): void
+
+销毁音频编码器资源。通过注册回调函数获取执行结果。应用需手动release,不能依赖内存回收机制。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------- | ---- | -------------------------------- |
+| callback | AsyncCallback | 是 | 销毁音频编码器资源事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.release((error) => { // 销毁音频编码器资源
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder release success');
+ audioEncoder = undefined; // 将音频编码器置空
+ } else {
+ console.info(`audioEncoder release fail, errMessage:${error.message}`);
+ }
+});
+```
+
+### release
+
+release(): Promise
+
+销毁音频编码器资源。通过Promise获取执行结果。应用需手动release,不能依赖内存回收机制。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------- |
+| Promise | 销毁音频编码器资源Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.release().then(() => { // 销毁音频编码器资源
+ console.log('audioEncoder release success');
+}, failureCallback).catch(catchCallback);
+audioEncoder = undefined; // 将音频编码器置空
+```
+
+
+### pushInputData
+
+pushInputData(buffer: [CodecBuffer](#codecbuffer8) , callback: AsyncCallback): void
+
+将编码音频帧内存数据输入队列。通过注册回调函数获取执行结果。需在[start()](#audioencodeprocessor_start1)之后才可调用此接口。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ---------------------------- | ---- | -------------------------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 音频编码原始帧数据。 |
+| callback | AsyncCallback | 是 | 输入编码音频帧数据进队列事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.on('newInputData', (inputBuffer) => { // 订阅newInputData事件
+ /* 将需要解码的数据传入inputBuffer中,此处需仅做示例,编码时,需按实际情况将每帧的数据进行赋值 */
+ inputBuffer.index = 0;
+ inputBuffer.timeMs = 0;
+ inputBuffer.offset = 0;
+ inputBuffer.length = 100;
+ inputBuffer.flags = 1;
+ inputBuffer.data; // 使用零拷贝策略,将数据直接写入data中
+ /* 将需要解码的数据推入队列中 */
+ audioEncoder.pushInputData(inputBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder pushInputData success');
+ } else {
+ console.info(`audioEncoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### pushInputData
+
+pushInputData(buffer: [CodecBuffer](#codecbuffer8)): Promise
+
+将编码音频帧内存数据输入队列。 通过Promise获取执行结果 。需在[start()](#audioencodeprocessor_start2)之后才可调用此接口。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ---------------------------- | ---- | -------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 音频编码原始帧数据。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------------- |
+| Promise | 将编码音频帧数据输入队列Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+audioEncoder.on('newInputData', (inputBuffer) => { // 订阅needInputData事件
+ /* 将需要解码的数据传入inputBuffer中,此处仅做示例,解码时,需按实际情况将每帧的数据进行赋值 */
+ inputBuffer.index = 0;
+ inputBuffer.timeMs = 0;
+ inputBuffer.offset = 0;
+ inputBuffer.length = 100;
+ inputBuffer.flags = 1;
+ inputBuffer.data; // 使用零拷贝策略,将数据直接写入data中
+ /* 将需要解码的数据推入队列中 */
+ await audioEncoder.pushInputData(inputBuffer).then(() => {
+ console.log('audioEncoder pushInputData success');
+ }, failureCallback).catch(catchCallback);
+});
+```
+
+### freeOutputBuffer
+
+freeOutputBuffer(buffer: [CodecBuffer](#codecbuffer8) , callback: AsyncCallback): void
+
+释放编码输出的音频帧内存。 通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ---------------------------- | ---- | -------------------------------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 编码完成的音频帧数据。 |
+| callback | AsyncCallback | 是 | 释放编码输出的音频帧内存事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.on('newOutputData', (outputBuffer) => { // 订阅newOutputData事件
+ /* 将newOutputData数据读取后,再将其释放 */
+ audioEncoder.freeOutputBuffer(outputBuffer, (error) => { // 释放编码输出的音频帧内存
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder freeOutputBuffer success');
+ } else {
+ console.info(`audioEncoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### freeOutputBuffer
+
+freeOutputBuffer(buffer: [CodecBuffer](#codecbuffer8)): Promise
+
+释放音频编码器的输出buffer,通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | ---------------------------- | ---- | ---------------- |
+| buffer | [CodecBuffer](#codecbuffer8) | 是 | 音频输出buffer。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | --------------------------------------- |
+| Promise | 释放解码输出的音频帧内存Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+audioEncoder.on('newOutputData', (outputBuffer) => { // 订阅newOutputData事件
+ /* 将outputBuffer数据读取后,再将其释放 */
+ await audioEncoder.freeOutputBuffer(outputBuffer, false).then(() => { // 释放编码输出的音频帧内存
+ console.log('audioEncoder freeOutputBuffer success');
+ }, failureCallback).catch(catchCallback);
+});
+```
+
+### setParameter
+
+setParameter(desc: [MediaDescription](#mediadescription8), callback: AsyncCallback): void;
+
+动态设置编码音频的媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。 |
+| callback | AsyncCallback | 是 | 动态设置编码音频的媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+let mediaDescription = { // 此处mediaDescription仅做为示例
+ "channel_count" : 1,
+ "sample_rate" : 48000,
+ "audio_sample_format": 3,
+}
+
+audioDecoder.setParameter(mediaDescription, (error) => { // 动态设置解码音频的媒体信息
+ if (typeof(error) != 'undefined') {
+ console.log('audioDecoder setParameter success');
+ } else {
+ console.info(`audioDecoder setParameter fail, errMessage:${error.message}`);
+ }
+});
+
+```
+
+### setParameter
+
+setParameter(desc: [MediaDescription](#mediadescription8)): Promise
+
+动态设置编码音频的媒体信息。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| desc | [MediaDescription](#mediadescription8) | 是 | 媒体信息键值对,key值的范围可参考[MediaDescriptionKey](#mediadescriptionkey8)。 |
+
+**返回值:**
+
+| 类型 | 说明 |
+| ------------- | ------------------------------------------- |
+| Promise | 动态设置编码音频的媒体信息的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+let mediaDescription = { // 此处mediaDescription仅做为示例
+ "channel_count" : 1,
+ "sample_rate" : 48000,
+ "audio_sample_format": 3,
+}
+
+await audioEncoder.setParameter(mediaDescription).then(() => { // 动态设置编码音频的媒体信息
+ console.log('audioEncoder setParameter success');
+}, failureCallback).catch(catchCallback);
+```
+
+### getOutputMediaDescription
+
+getOutputMediaDescription(callback: AsyncCallback<[MediaDescription](#mediadescription8)>): void
+
+获取编码音频的当前媒体信息。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ----------------------------------------------------- | ---- | ---------------------------------------- |
+| callback | AsyncCallback<[MediaDescription](#mediadescription8)> | 是 | 获取编码音频的当前媒体信息事件回调函数。 |
+
+**示例:**
+
+```js
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioEncoder key is ' + item);
+ console.info('audioEncoder value is ' + property);
+ }
+}
+
+audioEncoder.getOutputMediaDescription((error, mediaDescription) => {
+ if (typeof(mediaDescription) != 'undefined') {
+ console.log('audioEncoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+ } else {
+ console.log('audioEncoder getOutputMediaDescription fail');
+ }
+});
+```
+
+### getOutputMediaDescription
+
+getOutputMediaDescription(): Promise<[MediaDescription](#mediadescription8)>
+
+获取编码音频的当前媒体信息。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| ----------------------------------------------- | ------------------------------------------- |
+| Promise<[MediaDescription](#mediadescription8)> | 获取编码音频的当前媒体信息的Promise返回值。 |
+
+**示例:**
+
+```js
+/* 将format中的所有内容显示 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioEncoder key is ' + item);
+ console.info('audioEncoder value is ' + property);
+ }
+}
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.getOutputMediaDescription().then((mediaDescription) => {
+ console.log('audioEncoder getOutputMediaDescription success');
+ printfDescription(mediaDescription);
+}, failureCallback).catch(catchCallback);
+```
+
+### on('error')
+
+on(type: 'error', callback: ErrorCallback<[CodecError](#codecerror8)>): void
+
+订阅音频编码错误事件。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频编码错误事件回调类型,支持的事件包括:'error'。
- 'error':音频编码中发生错误,触发该事件。 |
+| callback | ErrorCallback<[CodecError](#codecerror8)> | 是 | 音频编码错误事件回调方法。 |
+
+**示例:**
+
+```js
+audioEncoder.on('error', (error) => { // 设置'error'事件回调
+ console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称
+ console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
+ console.info(`audio error called, errMessage is ${error.message}`);// 打印错误类型详细描述
+});
+/* 系统内存不足或状态切换异常时,触发error事件回调 */
+```
+
+
+### on('streamChanged')
+
+on(type: 'streamChanged', callback: Callback<[MediaDescription](#mediadescription8)>): void
+
+订阅编码音频第一帧或媒体信息发生变化事件。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 编码音频第一帧或媒体信息发生变化事件回调类型,支持的事件包括:'streamChanged'。
- 'streamChanged':音频编码中发生错误,触发该事件。 |
+| callback | Callback<[MediaDescription](#mediadescription8)> | 是 | 编码音频第一帧或媒体信息发生变化事件回调方法。 |
+
+**示例:**
+
+```js
+/* 将format中的所有内容显示 */
+function printfDescription(obj) {
+ for (let item in obj) {
+ let property = obj[item];
+ console.info('audioEncoder key is ' + item);
+ console.info('audioEncoder value is ' + property);
+ }
+}
+
+audioEncoder.on('streamChanged', (format) => { // 设置编码音频第一帧或媒体信息发生变化事件回调
+ if (typeof(format) != 'undefined') {
+ printfDescription(format);
+ }
+});
+/* 编码音频的媒体信息发生变化时,触发事件 */
+```
+
+### on('needInputData')
+
+on(type: 'needInputData', callback: Callback<[CodecBuffer](#codecbuffer8)>): void
+
+监听音频编码器的输入buffer。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频编码输入音频帧内存事件回调类型,支持的事件包括:'needInputData'。
- 'needInputData':[start()](#audioencodeprocessor_start1)调用之后,触发该事件。 |
+| callback | Callback<[CodecBuffer](#codecbuffer8)> | 是 | 音频编码输入音频帧内存事件回调方法。 - 用户需将要编码的音频帧内容填入[CodecBuffer](#codecbuffer8),再调用[pushInputData()](#audioencodeprocessor_pushinputdata1)方法将[CodecBuffer](#codecbuffer8)推入队列中。 |
+
+**示例:**
+
+```js
+audioEncoder.on('needInputData', (inBuffer) => {
+ console.info('audioEncoder needInputData');
+ /* 将音频帧内容填入inBuffer后,调用pushInputData方法将其推入队列 */
+ audioEncoder.pushInputData(inBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder pushInputData success');
+ } else {
+ console.info(`audioEncoder pushInputData fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### on('newOutputData')
+
+on(type: 'newOutputData', callback: Callback<[CodecBuffer](#codecbuffer8)>): void
+
+监听音频编码器的输出buffer。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | -------------------------------------- | ---- | ------------------------------------------------------------ |
+| type | string | 是 | 音频编码输出音频帧编码后内存事件回调类型,支持的事件包括:'newOutputData'。
\- 'newOutputData':[pushInputData()](#audioencodeprocessor_pushinputdata1)调用之后,触发该事件。 |
+| callback | Callback<[CodecBuffer](#codecbuffer8)> | 是 | 音频编码输出音频帧编码后内存事件。
\- 媒体服务将音频帧编码后的内容通过[CodecBuffer](#codecbuffer8)返回给用户,用户读取内存后,需调用[freeOutputBuffer()](#audioencodeprocessor_freeoutputbuffer1)方法将该内存从队列中移除。 |
+
+**示例:**
+
+```js
+audioEncoder.on('newOutputData', (outBuffer) => {
+ console.info('audioEncoder newOutputData');
+ /* 获取outBuffer中音频帧编码后的时间戳和index后,调用freeOutputBuffer方法将该帧送显,并将该内存从队列中移除 */
+ audioEncoder.freeOutputBuffer(outBuffer, (error) => {
+ if (typeof(error) != 'undefined') {
+ console.log('audioEncoder freeOutputBuffer success');
+ } else {
+ console.info(`audioEncoder freeOutputBuffer fail, errMessage:${error.message}`);
+ }
+ });
+});
+```
+
+### getAudioEncoderCaps
+
+getAudioEncoderCaps(callback: AsyncCallback<[AudioCaps](#audiocaps8)>): void
+
+获取音频编码能力。通过注册回调函数获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**参数:**
+
+| 参数名 | 类型 | 必填 | 说明 |
+| -------- | --------------------------------------- | ---- | ------------------------------ |
+| callback | AsyncCallback<[AudioCaps](#audiocaps8)> | 是 | 获取音频编码能力事件回调函数。 |
+
+**示例:**
+
+```js
+audioEncoder.getAudioEncoderCaps((error, audioCaps) => {
+ if (typeof(audioCaps) != 'undefined') {
+ console.log('audioEncoder getAudioEncoderCaps success');
+ printfDescription(mediaDescription);
+ } else {
+ console.log('audioEncoder getAudioEncoderCaps fail');
+ }
+});
+```
+
+### getAudioEncoderCaps
+
+getAudioEncoderCaps(): Promise<[AudioCaps](#audiocaps8)>
+获取音频编码能力。通过Promise获取执行结果。
+
+**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder
+
+**返回值:**
+
+| 类型 | 说明 |
+| --------------------------------- | --------------------------------- |
+| Promise<[AudioCaps](#audiocaps8)> | 获取音频编码能力的Promise返回值。 |
+
+**示例:**
+
+```js
+function failureCallback(error) {
+ console.info(`audioEncoder failureCallback, error:${error.message}`);
+}
+function catchCallback(error) {
+ console.info(`audioEncoder catchCallback, error:${error.message}`);
+}
+
+await audioEncoder.getAudioEncoderCaps().then((videoCaps) => {
+ console.log('audioEncoder getAudioEncoderCaps success');
+}, failureCallback).catch(catchCallback);
+```
+
+## AudioCaps8+
+
+音频编解码器能力类,用于表示音频编解码器能力范围。
+
+**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.Media.AudioCaps
+
+### 属性
+
+| 名称 | 类型 | 可读 | 可写 | 说明 |
+| -------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
+| codecInfo | [AVCodecInfo](#avcodecinfo8) | 是 | 否 | 编解码器描述信息,包括编解码器名称、功能类型、MIME类型、是否支持硬件加速、是否只支持软件编解码、是否为厂商提供。 |
+| supportedBitrate | [Range](#range8) | 是 | 否 | 音频编解码器支持的比特率范围。 |
+| supportedChannel | [Range](#range8) | 是 | 否 | 音频编解码器支持的声道数范围。 |
+| supportedFormats | Array<[AudioSampleFormat](./js-apis-audio.md#audiosampleformat8)> | 是 | 否 | 音频编解码器支持的RAW数据格式。 |
+| supportedSampleRates | Array | 是 | 否 | 音频编解码器支持的采样率范围。 |
+| supportedProfiles | Array | 是 | 否 | 音频编解码器支持的profile集合。 |