未验证 提交 52c77585 编写于 作者: O openharmony_ci 提交者: Gitee

!21467 编码示例代码修改

Merge pull request !21467 from guoyao/master
......@@ -28,7 +28,6 @@
参考以下示例代码,完成音频编码的全流程,包括:创建编码器,设置编码参数(采样率/码率/声道数等),开始,刷新,重置,销毁资源。
在应用开发过程中,开发者应按一定顺序调用方法,执行对应操作,否则系统可能会抛出异常或生成其他未定义的行为。具体顺序可参考下列开发步骤及对应说明。
完整代码请参考[示例程序](https://gitee.com/openharmony/multimedia_av_codec/blob/master/test/nativedemo/audio_demo/avcodec_audio_aac_encoder_demo.cpp)
......@@ -45,12 +44,10 @@
const char *name = OH_AVCapability_GetName(capability);
OH_AVCodec *audioEnc = OH_AudioEncoder_CreateByName(name);
```
```cpp
//通过媒体类型创建编码器
OH_AVCodec *audioEnc = OH_AudioEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
```
```cpp
// 初始化队列
class AEncSignal {
......@@ -69,7 +66,6 @@
};
AEncSignal *signal_ = new AEncSignal();
```
2. 调用OH_AudioEncoder_SetCallback()设置回调函数。
注册回调函数指针集合OH_AVCodecAsyncCallback,包括:
......@@ -126,7 +122,6 @@
// 配置异步回调
int32_t ret = OH_AudioEncoder_SetCallback(audioEnc, cb, userData);
```
3. 调用OH_AudioEncoder_Configure设置编码器
设置必选项:采样率,码率,以及声道数,声道类型、位深;可选项:最大输入长度
flac编码: 需要额外标识兼容性级别(Compliance Level)和采样精度
......@@ -140,15 +135,15 @@
// 配置音频采样率(必须)
constexpr uint32_t DEFAULT_SMAPLERATE = 44100;
// 配置音频码率(必须)
constexpr uint32_t DEFAULT_BITRATE = 32000;
constexpr uint64_t DEFAULT_BITRATE = 32000;
// 配置音频声道数(必须)
constexpr uint32_t DEFAULT_CHANNEL_COUNT = 2;
// 配置音频声道类型(必须)
constexpr AudioChannelLayout CHANNEL_LAYOUT =AudioChannelLayout::STEREO;
// 配置音频位深(必须) flac 只有SAMPLE_S16LE和SAMPLE_S32LE
constexpr OH_BitsPerSample SAMPLE_FORMAT =OH_BitsPerSample::SAMPLE_S32LE;
// 配置音频位深(必须)aac只有SAMPLE_S32P
constexpr OH_BitsPerSample SAMPLE_AAC_FORMAT =OH_BitsPerSample::SAMPLE_S32P;
// 配置音频位深(必须)aac只有SAMPLE_F32P
constexpr OH_BitsPerSample SAMPLE_AAC_FORMAT = OH_BitsPerSample::SAMPLE_F32LE;
// 配置音频compliance level (默认值0,取值范围-2~2)
constexpr int32_t COMPLIANCE_LEVEL = 0;
// 配置音频精度(必须) SAMPLE_S16LE和SAMPLE_S24LE和SAMPLE_S32LE
......@@ -158,7 +153,7 @@
OH_AVFormat *format = OH_AVFormat_Create();
// 写入format
OH_AVFormat_SetIntValue(format,MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(),DEFAULT_SMAPLERATE);
OH_AVFormat_SetIntValue(format,MediaDescriptionKey::MD_KEY_BITRATE.data(), DEFAULT_BITRATE);
OH_AVFormat_SetLongValue(format,MediaDescriptionKey::MD_KEY_BITRATE.data(), DEFAULT_BITRATE);
OH_AVFormat_SetIntValue(format,MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(),DEFAULT_CHANNEL_COUNT);
OH_AVFormat_SetIntValue(format,MediaDescriptionKey::MD_KEY_MAX_INPUT_SIZE.data(),DEFAULT_MAX_INPUT_SIZE);
OH_AVFormat_SetLongValue(format,MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT.data(),CHANNEL_LAYOUT);
......@@ -176,13 +171,11 @@
// 异常处理
}
```
4. 调用OH_AudioEncoder_Prepare(),编码器就绪。
```c++
OH_AudioEncoder_Prepare(audioEnc);
```
5. 调用OH_AudioEncoder_Start()启动编码器,进入运行态。
```c++
......@@ -198,7 +191,6 @@
// 异常处理
}
```
6. 调用OH_AudioEncoder_PushInputData(),写入待编码器的数据。
如果是结束,需要对flag标识成AVCODEC_BUFFER_FLAGS_EOS
......@@ -220,6 +212,7 @@
**注意**:aac的样点数固定为1024,其他值会直接返回错误码,flac的样点数建议根据采样率按照表格传入,大于这个值也会返回错误码,如果小于有可能出现编码文件损坏问题。
```c++
constexpr int32_t FRAME_SIZE = 1024; //aac
constexpr int32_t DEFAULT_CHANNEL_COUNT =2;
......@@ -245,7 +238,6 @@
// 异常处理
}
```
7. 调用OH_AudioEncoder_FreeOutputData(),输出编码格式码流
```c++
......@@ -265,11 +257,11 @@
break;
}
```
8. (可选)调用OH_AudioEncoder_Flush()刷新编码器。
调用OH_AudioEncoder_Flush()后,编码器处于Flush状态,会将当前编码队列清空。
此时需要调用OH_AudioEncoder_Start()重新开始编码。
使用情况:
* 在文件EOS之后,需要调用刷新
* 在执行过程中遇到可继续执行的错误时(即OH_AudioEncoder_IsValid 为true)可以调用,然后重新调用OH_AudioEncoder_Start
......@@ -285,7 +277,6 @@
// 异常处理
}
```
9. (可选)调用OH_AudioEncoder_Reset()重置编码器。
调用OH_AudioEncoder_Reset()后,编码器回到初始化的状态,需要调用OH_AudioEncoder_Configure()重新配置,然后调用OH_AudioEncoder_Start()重新开始编码。。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册