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

猜你喜欢

转载自blog.csdn.net/qq_24127015/article/details/87918409