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

!21467 编码示例代码修改

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