永兴县网站建设服务商,网站的基本要素,wordpress外观编辑,电子商城网站一、FFmpeg编码流程二、流程关键函数avcodec_find_encoder#xff1a;根据指定的AVCodecID查找注册的编码器。
avcodec_alloc_context3#xff1a;为AVCodecContext分配内存。
avcodec_open2#xff1a;打开编码器。
avcodec_send_frame#xff1a;将AVFrame⾮压缩数据给…一、FFmpeg编码流程二、流程关键函数avcodec_find_encoder根据指定的AVCodecID查找注册的编码器。
avcodec_alloc_context3为AVCodecContext分配内存。
avcodec_open2打开编码器。
avcodec_send_frame将AVFrame⾮压缩数据给编码器。
avcodec_receive_packet获取到编码后的AVPacket数据收到的packet需要⾃⼰释放内存。
av_frame_get_buffer: 为⾳频或视频帧分配新的buffer。在调⽤这个函数之前必须在AVFame上设
置好以下属性format(视频为像素格式⾳频为样本格式)、nb_samples(样本个数针对⾳频)、
channel_layout(通道类型针对⾳频)、width/height(宽⾼针对视频。
av_frame_make_writable确保AVFrame是可写的使⽤av_frame_make_writable()的问题是在
最坏的情况下它会在您使⽤encode再次更改整个输⼊frame之前复制它. 如果frame不可写
av_frame_make_writable()将分配新的缓冲区并复制这个输⼊input frame数据避免和编码器需
要缓存该帧时造成冲突。
av_samples_fill_arrays 填充⾳频帧
flush encoder 调⽤⼀次 avcodec_send_frame(NULL)(返回成功)然后不停调⽤
avcodec_receive_packet() 直到其返回 AVERROR_EOF取出所有缓存帧
avcodec_receive_packet() 返回 AVERROR_EOF 这⼀次是没有有效数据的仅仅获取到⼀
个结束标志三、PCM涉及的参数1. Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
2. Sample Size : 量化位数。通常该值为16-bit。
3. Number of Channels : 通道个数。常⻅的⾳频有⽴体声(stereo)和单声道(mono)两种类型⽴体声包 含左声道和右声道。另外还有环绕⽴体声等其它不太常⽤的类型。
4. Sign : 表示样本数据是否是有符号位⽐如⽤⼀字节表示的样本数据有符号的话表示范围为-128 ~ 127⽆符号是0 ~ 255。有符号位16bits数据取值范围为-32768~32767。
5. Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说 明⻅第4节。
6. Integer Or Floating Point : 整形或浮点型。⼤多数格式的PCM样本数据使⽤整形表示⽽在⼀些对 精度要求⾼的应⽤⽅⾯使⽤浮点类型表示PCM样本数据浮点数 float值域为 [-1.0, 1.0]。四、FFmpeg中Packed和Planar的PCM数据区别 packed格式1 AV_SAMPLE_FMT_U8, /// unsigned 8 bits
2 AV_SAMPLE_FMT_S16, /// signed 16 bits
3 AV_SAMPLE_FMT_S32, /// signed 32 bits
4 AV_SAMPLE_FMT_FLT, /// float
5 AV_SAMPLE_FMT_DBL, /// double只能保存在AVFrame的uint8_t *data[0];planar格式1 AV_SAMPLE_FMT_U8P, /// unsigned 8 bits, planar
2 AV_SAMPLE_FMT_S16P, /// signed 16 bits, planar
3 AV_SAMPLE_FMT_S32P, /// signed 32 bits, planar
4 AV_SAMPLE_FMT_FLTP, /// float, planar
5 AV_SAMPLE_FMT_DBLP, /// double, planar
6 AV_SAMPLE_FMT_S64, /// signed 64 bits
7 AV_SAMPLE_FMT_S64P, /// signed 64 bits, planar注planar为FFmpeg内部存储⾳频使⽤的采样格式所有的Planar格式后⾯都有字⺟P标识。Packed: L R L R L R L R 识记Packed拥挤的 左拥右抱Planar : L L L L ... R R R Planar 平面的) 分层plane 0对于uint8_t *data[0]plane 1对于uint8_t *data[1]FFmpeg默认的AAC编码器不⽀持AV_SAMPLE_FMT_S16格式的编码只⽀持 AV_SAMPLE_FMT_FLTPFFmpeg⾳频解码后和编码前的数据是存放在AVFrame结构中的。 Packed格式frame.data[0]或frame.extended_data[0]包含所有的⾳频数据中。 Planar格式 frame.data[i]或者frame.extended_data[i]表示第i个声道的数据假设声道0是第⼀ 个, AVFrame.data数组⼤⼩固定为8如果声道数超过8需要从frame.extended_data获取声道数 据。 五、PCM数据播放ffplay -f f32le -ac 2 -ar 48000 a.pcm 播放格式为f32le双声道采样频率48000Hz的PCM数据