音视频基础知识
1.MPEG-4是一套用于音频,视频信息的亚索编码标准。
2.常见的封装格式
MP4 MOV
AVI:压缩标准可以任意选择
FLV :FLV封装格式详细参考
TS:直播流媒体使用;
3.常用视频编码格式
H264(AVC Part 10),具体H264相关参考如下
H264参考一 H264参考二 H264参考三
4.常用音频编码格式
AAC
5.封装格式与编码格式之间的关系
6.图像格式相关详细解读
7.PCM音频相关参数
采样率 sample_rate ,即每秒种采集多少次声音,通用使用44100(CD)
通道 channels 即在几个点采集,通用使用2(双声道)
样本大小 (格式) sample_size ,每个声音使用多大来存储,通用使用 AV_SAMPLE_FMP_S16 两个字节存放一个音 ; AV_SAMPLE_FMP_FLTP 四个字节来存放一个声音
样本类型 planar ,样本在内存中的存储格式,分为 平面格式与 非 平面格式 ,平面格式为连续存储即aaabbbccc,非平面为 abcabcabc
8.MP4格式相关解读
解封装(Demux)
1.av_register_all( ); 作用是初始化封装库相关,必须在调用解放装前使用。
2.avformat_network_init( ); 初始化网络库 (可以打开rtsp rtmp http 协议的流媒体视频)
3.解封装
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options);
@ps ,格式化上下文 @url ,文件名称或者网络流地址 @fmt,指定输入封装格式,传递nullptr会自动探测
@options,字典数组,可以设置相关预设值,例如如下设置
//参数设置AVDictionary *opts = NULL;//设置rtsp流已tcp协议打开av_dict_set(&opts, "rtmp_transport", "tcp", 0);//网络延时时间av_dict_set(&opts, "max_delay", "500", 0);
4.针对网络流需要调用
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
5.寻找音视频的索引
int av_find_best_stream(AVFormatContext *ic,enum AVMediaType type,int wanted_stream_nb,int related_stream,AVCodec **decoder_ret,int flags);
6.读取每一帧
int av_read_frame(AVFormatContext *s, AVPacket *pkt);