FFMpeg数据流处理
1.基本概念
(1)多媒体文件里面其实是流的容器
(2)流有很多种比如,stream/track…但是各路流互不影响
(3)每种流是由不同的编码器编码的
(4)从流中解码出的数据称为包
(5)在一个包中包含着一个或者多个帧
2.重要结构体
(1)AVFormatContext 上下文,连接多个api的桥梁
(2)AVStream 通过AVStream可以获取各种包
(3)AVPacket 包中包含的就是数据帧
3.操作流的基本步骤
(1)【解复用】-【获取流】-【读取数据包】-【释放资源】
4.(实战)FFMpeg打印音频的Meta信息
(1)API
av_register_all();
AVFormatContext avformat_open_input();
avformat_close_input(AVFormatContext *);
av_dump_format();
av_err2str(ret);
(2)代码
void handleMedia(){
AVFormatContext* fmt_ctx = NULL;
int ret;
av_register_all();
//打开多媒体文件
ret = avformat_open_input(&fmt_ctx,
"./test.mp4",
/*输入文件格式,比如mp4*/NULL,
/*通过命令行传入的参数,一般不用*/NULL);
if(ret < 0){
av_log(NULL,AV_LOG_ERROR,"Can't open file,%s\n",av_err2str(ret));
}else{
av_dump_format(fmt_ctx
,/*s索引值,一般是0*/0
,/*文件路径*/