ffmpeg从入门到放弃(三) 打开本地文件和网络文件

重要的结构体:

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);

 

 

 

 

 

 

 

 

 

 

 

 

 

   

上一篇:代码复制多节目流


下一篇:让 OpenAL 也支持 S16 Planar(辅以 FFmpeg)