重要的结构体:
AVFormatContext:这个结构描述了媒体信息和媒体流的基本信息,是FFMpeg最基本的数据结构,是一个多媒体文件或流的根本抽象。
主要成员其中主要的成员:
struct AVInputFormat *iformat:输入文件的格式。
AVIOContext *pb:IO上下文结构体,这个以后详细介绍。
unsigned int nb_streams:文件中流的数量。(比如值为2,一个音频流,一个视频流)
AVStream **streams:流结构体。以后详细介绍。
char filename[1024]:文件名。
int64_t duration:流的持续时间,单位微秒?
int64_t bit_rate:比特率。单位bps
int64_t probesize:判断文件格式(format)需要读入的文件尺寸
int max_ts_probe:解码TS格式时,在得到第一个PTS前可解码的最大packet的数量。
int ts_id:TS格式中流的pid。
AVDictionary:
是ffmpeg键值对存储工具,经常使用它来设置读取内部参数。
AVDictionary* opt = NULL;
av_dict_set(&opt, "rtsp_transport","tcp",0);
av_dict_set(&opt,"max_delay","550",0);
1、打开文件或者网络文件。
代码如下:
/*
av_register_all初始化所有组件,只有调用了该函数才能使用复用器和解码器。
*/
av_register_all();
avformat_network_init();
//AVFormatContext设备上下文
/*
*/
AVFormatContext* pFormatContext = NULL;
const char* path = "rtmp://58.200.131.2:1935/livetv/cctv1";
AVDictionary* opt = NULL;
av_dict_set(&opt, "rtsp_transport","tcp",0);
av_dict_set(&opt,"max_delay","550",0);
//int ret=avformat_open_input(&pFormatContext, path,NULL,NULL);//打开文件
int ret=avformat_open_input(&pFormatContext, path,NULL,&opt);//打开网络流
if (ret)
{
//打开失败
return;
}
//打开成功
//寻找解码器信息,h264还是h265,
ret=avformat_find_stream_info(pFormatContext,NULL);
if (ret)
{
//寻找解码器失败
return;
}
int time = pFormatContext->duration;
int mbitime = (time / 1000000)/60;
cout << "时间" << mbitime;
//打印输出或者输入格式的详细信息,比如持续时间,比特率,编解码器,编码格式
av_dump_format(pFormatContext, NULL, path, 0);