Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
52c77585
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
52c77585
编写于
7月 27, 2023
作者:
O
openharmony_ci
提交者:
Gitee
7月 27, 2023
浏览文件
操作
浏览文件
下载
差异文件
!21467 编码示例代码修改
Merge pull request !21467 from guoyao/master
上级
812ed027
b5b1adb5
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
202 addition
and
211 deletion
+202
-211
zh-cn/application-dev/media/audio-encoding.md
zh-cn/application-dev/media/audio-encoding.md
+202
-211
未找到文件。
zh-cn/application-dev/media/audio-encoding.md
浏览文件 @
52c77585
...
...
@@ -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_S
32P
constexpr OH_BitsPerSample SAMPLE_AAC_FORMAT =OH_BitsPerSample::SAMPLE_S32P
;
// 配置音频位深(必须)aac只有SAMPLE_F
32P
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_SetInt
Value(format,MediaDescriptionKey::MD_KEY_BITRATE.data(), DEFAULT_BITRATE);
OH_AVFormat_SetLong
Value
(
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录