FFmpeg:av_dump_format()

最近在研究ffmpeg,雷神的博客给了很大的帮助,可惜雷神走了。在雷神博客里面发现没有av_dump_format()这个函数,那就自己写篇文章来记录下。

av_dump_format是打印输入和输出格式的详细信息,声明位于libavformat/avformat.h下,如下所示

/**
 * Print detailed information about the input or output format, such as
 * duration, bitrate, streams, container, programs, metadata, side data,
 * codec and time base.
 *
 * @param ic        the context to analyze
 * @param index     index of the stream to dump information about
 * @param url       the URL to print, such as source or destination file
 * @param is_output Select whether the specified context is an input(0) or output(1)
 */
void av_dump_format(AVFormatContext *ic,
                    int index,
                    const char *url,
                    int is_output);

这里的参数只需要注意两个一个是ic,一个是is_output。

ic:输入的AVFormatContext
is_output:如果是解封装的话是写输入0,需要输出话是写输出1

函数没有返回值。

#include <iostream>

using namespace std;

extern "C"
{
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"

}
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
int main()
{
	//解封装
	cout << "Test Demux" << endl;
	const char *url = "v1080.mp4";
	//注册所有的 解封装 解码
	av_register_all();
	
	//初始化网络
	avformat_network_init();

	//解封装上下文
	AVFormatContext *ic = NULL;
	AVDictionary *opt = NULL;
	av_dict_set(&opt, "rtsp_transport", "tcp", 0);
	//设置网络延时
	av_dict_set(&opt, "max_delay", "500", 0);

	//返回0 代表成功
	int ret = avformat_open_input(
		&ic,	//解封装上下文
		url,	//文件或网络地址
		NULL,   //设置NULL自动获取
		&opt
	);
	//容错
	if (ret != 0)
	{
		char buf[1024] = { 0 };
		av_strerror(ret, buf, sizeof(buf) - 1);
		cout << "open " << url << "failed " << buf << endl;
		return -1;
	}
	cout << "open " << url << " success " << endl;
	
        //打印输入或输出格式的详细信息
	av_dump_format(ic, 0, NULL, 0);

	//释放上下文 容错
	if(ic)
	{ 
		avformat_close_input(&ic);
	}
	return 0;
}

接下来是代码运行之后,一个视频的详细信息:

可以发现 他视频的编码格式是h264,音频的编码格式是aac,还有一些其他信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值