音视频学习总结
ffmpeg库的使用
可以直接从
7
07-01-FFmpeg解封装解码:如解析出mp4中的各种流,音频流、视频流、字幕流等。主要涉及两个结构体AVFormatContext和AVPacket。AVFormatContext存储流信息,AVPacket存储包信息(可以将流当成很多个包的集合)
代码:本代码功能:打印媒体文件中的流信息(打印AVFormatContext结构体中的信息)
打印流中每个包的信息(打印AVPacket 结构体中的信息)
07-02-AAC ADTS格式(音频格式)分析:ADTS可以在任意帧解码,也就是说它每⼀帧都有头信息。AAC⾳频⽂件(ADTS格式)的每⼀帧由ADTS Header和AAC Audio Data组成。⼀般情况下ADTS的头信息都是7个字节,分为2部分: adts_fixed_header();和adts_variable_header();。ADTS Header存放着采样率、码率、声道数、帧长度等信息。
代码:本代码将媒体文件中的音频利用AAC ADTS格式进行保存。从代码中可以看出,视频流中的AAC数据是没有包含头部的,头部需要自己去写。
07-03-H264 NALU分析:H264简介、IDR为I帧、H264将视频组织成为 序列(GOP)、图⽚(pictrue)、⽚(Slice)、宏块(Macroblock)、⼦块(subblock)五个层次进行网络传输。
NALU (视频流的网络传输单元):H.264原始码流(裸流)是由⼀个接⼀个NALU组成。每个NALU的开头都是一个StartCode("00 00 00 01" 或"00 00 01"),用于标识一个NALU的开始。
av_bsf_get_by_name("h264_mp4toannexb")将mp4模式转换为annexb模式
代码:本代码将媒体文件中的视频利用H264格式进行保存。
07-04-FLV格式分析-FLV封装格式剖析:FLV常用于直播。FLV封装格式是由⼀个⽂件头(file header)和 ⽂件体(file Body)组成。其中,FLV body由⼀ 对对的(Previous Tag Size字段 + tag)组成。
⼀个flv⽂件最多只有⼀个⾳频流,⼀个视频流。(mp4中就可能存在多个同种流)
每⼀个Tag也是由两部分组成:tag header和tag data。FLV Header和Tag Header中都有标识数据类型和长度的字段
tag data有三种:script、video、audio
代码:本代码一个bit一个bit地对flv文件进行解析。首先解析flv文件的头部和tag头部,然后分别解析tag data中包含的h264文件和aac文件,解析h264就是解析出一个个NALU并在NALU前面加上startcode,解析aac就是解析出一个个AAC Audio data并加上ADTS header。
本代码利用解析得到的信息,重新封装得到一个新的flv文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?