type
status
date
slug
summary
tags
category
icon
password
Property
Mar 25, 2023 08:46 AM
前置知识
FFmpeg 流程
从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。
示例的流程如下所示:
对于 flush encoder的操作:
编码器通常的冲洗⽅法:调⽤⼀次 avcodec_send_frame(NULL)(返回成功),然后不停调⽤
avcodec_receive_packet() 直到其返回 AVERROR_EOF,取出所有缓存帧,avcodec_receive_packet() 返回 AVERROR_EOF 这⼀次是没有有效数据的,仅仅获取到⼀个结束标志
相关结构体
AVCodec
:是 FFmpeg 中的 libavcodec 库中定义的一个结构体,用于表示音视频编解码器的信息。- AVCodec 结构体中包含了音视频编解码器的名称、媒体类型、编解码器 ID、描述、支持的编解码器配置文件、编解码器的初始化、编码、解码、关闭和刷新函数等信息。
- 在 FFmpeg 中,可以使用 avcodec_find_decoder() 或 avcodec_find_encoder() 函数查找特定的音视频编解码器,并使用找到的编解码器的 AVCodec 结构体信息来打开编解码器并初始化编解码器上下文。
AVCodec 结构体的定义如下:
AVCodecContext
:是 FFmpeg 中的 libavcodec 库中定义的一个结构体,用于表示音视频编解码器的上下文信息。- AVCodecContext 结构体中包含了音视频编解码器的上下文信息,如比特率、帧率、像素格式、采样格式、通道布局等信息。这些信息可以被设置和读取,以控制编解码器的行为和获取编解码器的状态。
- 在 FFmpeg 中,可以使用 avcodec_alloc_context3() 函数分配一个 AVCodecContext 上下文结构体,并使用 avcodec_open2() 函数将其与特定的音视频编解码器关联。
AVCodecContext 结构体的定义如下:
PCM 样本格式
FFmpeg 支持的 PCM 数据格式
s是有符号,u是无符号,f是浮点数。
be是⼤端,le是小端。
FFmpeg 中 Packed 和 Planar 的 PCM 数据区别
PCM 字节序
libfdk_aac 编码器
libfdk_aac 是一种高质量的 AAC 音频编码器,是 Fraunhofer Gesellschaft 开发的自由软件库,用于编码高品质的音频流,特别适用于音乐流媒体和高保真音频存储。它可以产生比许多其他 AAC 编码器更高的音频质量,并具有更高的编码效率。
PCM 编码为 AAC 代码
check_sample_fmt()
:检测该编码器是否支持该采样格式
相关依据为源码中的定义:以 AV_SAMPLE_FMT_NONE 为结尾
check_sample_rate()
: 检测该编码器是否支持该采样率
相关依据为源码中的定义:以 0 为结尾
check_channel_layout()
:检查该编解码器是否支持特定的声道布局
需要注意的是,并不是每个编解码器都会提供支持的声道布局列表,因此该函数只能用作参考,而不是确定该编解码器是否支持特定声道布局的唯一方法。
- 作者:OctalZero
- 链接:https://octalzero.com/article/88a0d789-5f79-46d9-8706-2c5f063a5157
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章