c++ ffmpeg库的使用

下载ffmpegsdk:

ffmpeg-4.1.1-win32-dev:包含头文件和lib库

ffmpeg-4.1.1-win32-shared:包含动态库和可执行程序

https://ffmpeg.zeranoe.com/builds/

 C++工程引用

 

 

 

// SimpleFFmpeg.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>

#define __STDC_CONSTANT_MACROS
#pragma warning(disable:4996)

#ifdef _WIN32
//windows
#ifdef __cplusplus
extern "C"
{
#endif
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/avfilter.h"
#ifdef __cplusplus
}
#endif
#else
//linux
#ifdef __cplusplus
extern "C"
{
#endif
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/avfilter.h"
#ifdef __cplusplus
}
#endif
#endif

//FIX
struct URLProtocol;

/**
 * Protocol Support Information
 */
char * urlprotocolinfo()
{
	char* info = (char*)malloc(40000);
	memset(info, 0, 40000);
	av_register_all();

	struct URLProtocol *pup = NULL;
	//input
	struct URLProtocol **p_temp = &pup;
	avio_enum_protocols((void **)p_temp,0);
	while ((*p_temp) != NULL)
	{
		sprintf(info, "%s[In][%10s]\n", info, avio_enum_protocols((void **)p_temp, 0));
	}
	pup = NULL;
	//output
	avio_enum_protocols((void**)p_temp, 1);
	while ((*p_temp) != NULL)
	{
		sprintf(info, "%s[Out][%10s]\n", info, avio_enum_protocols((void**)p_temp, 1));
	}
	return info;
}


/**
 * AVFormat Support information
 */
char * avformatinfo()
{
	char* info = (char*)malloc(40000);
	memset(info, 0, 40000);
	av_register_all();
	AVInputFormat *if_temp = av_iformat_next(NULL);
	AVOutputFormat *of_temp = av_oformat_next(NULL);
	//input
	while (if_temp != NULL)
	{
		sprintf(info, "%s[In] %10s\n", info, if_temp->name);
		if_temp = if_temp->next;
	}
	//output
	while (of_temp != NULL)
	{
		sprintf(info, "%s[In] %10s\n", info, of_temp->name);
		of_temp = of_temp->next;
	}
	return info;
}

/**
 * AVCodec Support Information
 */
char* avcodecinfo()
{
	char* info = (char*)malloc(40000);
	memset(info, 0, 40000);
	av_register_all();

	AVCodec* c_temp = av_codec_next(NULL);
	while (c_temp != NULL)
	{
		if (c_temp->decode != NULL)
		{
			sprintf(info, "%s[Dec]", info);
		}
		else
		{
			sprintf(info, "%s[Enc]", info);
		}
		switch (c_temp->type)
		{
		case AVMEDIA_TYPE_VIDEO:
			sprintf(info, "%s[Video]", info);
			break;
		case AVMEDIA_TYPE_AUDIO:
			sprintf(info, "%s[Audio]", info);
			break;
		default:
			sprintf(info, "%s[Other]", info);
			break;
		}
		sprintf(info, "%s %10s\n", info, c_temp->name);
		c_temp = c_temp->next;
	}
	return info;
}

/** 
 * AVFilter Support Information
 */
char* avfilterinfo()
{
	char* info = (char*)malloc(40000);
	memset(info,0,40000);
	avfilter_register_all();

	AVFilter *f_temp = (AVFilter*)avfilter_next(NULL);
	while (f_temp != NULL)
	{
		sprintf(info, "%s[%15s]\n", info, f_temp->name);
		f_temp = f_temp->next;
	}
	return info;
}


/*
 * Configuration Information
 */
char* configurationinfo()
{
	char* info = (char*)malloc(40000);
	memset(info, 0, 40000);
	av_register_all();
	sprintf(info, "%s\n", avcodec_configuration());

	return info;
}

int main()
{
	char* infostr = NULL;
	infostr = configurationinfo();
	printf("\n<<Configuration>>\n%s", infostr);
	free(infostr);

	infostr = urlprotocolinfo();
	printf("\n<<URLProtocol>>\n%s", infostr);
	free(infostr);

	infostr = avformatinfo();
	printf("\n<<AVFormat>>\n%s", infostr);
	free(infostr);

	infostr = avcodecinfo();
	printf("\n<<AVCodec>>\n%s", infostr);
	free(infostr);

	infostr = avfilterinfo();
	printf("\n<<AVFilter>>\n%s", infostr);
	free(infostr);
    return 0;
}

 

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值