O exemplo de código EasyAVFilter transcodifica arquivos de vídeo sob demanda para o formato de vídeo sob demanda HLS (m3u8+ts)

A seguir está um conjunto completo de código-fonte de desenvolvimento de função de vídeo sob demanda. Com apenas algumas linhas de código, você pode concluir o processo de chamada de transcodificação de vídeo sob demanda muito complexo do ffmpeg original e também pode ser integrado e chamado em seus próprios aplicativos , como java, PHP, cgo, c++ e nodejs não precisam ser chamados por um processo ffmpeg separado. O método é muito simples. Comparado com o uso original de exec para chamar o processo ffmpeg para transcodificação, a eficiência e controlabilidade foram melhorados mais de 10 vezes e o código é excelente:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "EasyAVFilterAPI.h"

#ifdef _WIN32
#pragma comment(lib,"EasyAVFilter.lib")
#endif

Easy_Handle fRTSPHandle = 0;			
int Easy_APICALL __AVFilterCallBack(void* userPtr, EASY_AV_FILTER_STATE_T status, int progress, int errCode, const char *errMsg)
{
    
    
	//各种状态的回调,例如拉流状态/推流状态/转码状态/媒体信息
	return 0;
}

int main(int argc, char** argv)
{
    
    
	// 创建EasyAVFilter实例,相当于创建一个ffmpeg.exe进程
	Easy_Handle avFilterHandle = NULL;
	EasyAVFilter_Create(&avFilterHandle);

	// 信息回调
	EasyAVFilter_SetCallback(avFilterHandle,__AVFilterCallBack,0);

	// 将本地视频文件转成格式化的MP4或者HLS提供点播,参考命令:./ffmpeg.exe -fflags +genpts -hide_banner -i C://temp/La_Isla_Bonita.avi -vcodec copy -acodec aac -ac 2 -strict -2 -f hls -hls_time 16 -hls_list_size 0 C://temp/La_Isla_Bonita.m3u8
	EasyAVFilter_AddInput(avFilterHandle, "C://temp/La_Isla_Bonita.avi", 1);
	EasyAVFilter_AddFilter(avFilterHandle, "-fflags +genpts -hide_banner -vcodec copy -acodec aac -ac 2 -strict -2");//设置音视频转码参数
	EasyAVFilter_AddFilter(avFilterHandle, "-f hls -hls_time 16 -hls_list_size 0");//设置HLS切片参数
	EasyAVFilter_SetOutput(avFilterHandle, "C://temp/La_Isla_Bonita.m3u8", 0);

	//验证命令
	char filterCommand[256] = {
    
     0 };
	EasyAVFilter_GetFilters(avFilterHandle, filterCommand);
	printf("command: %s\n", filterCommand);

	getchar();
	EasyAVFilter_Start(avFilterHandle, 0, 8, 10);//注意,文件转码不需要循环读取,第二个参数从1改成0

	getchar();
	EasyAVFilter_Stop(avFilterHandle);
	EasyAVFilter_Release(&avFilterHandle);
	return 0;
}

A engenharia completa do programa acima pode ser baixada do site oficial da EasyDarwin: www.easydarwin.org
filtro easyav

Acho que você gosta

Origin blog.csdn.net/xiejiashu/article/details/132757956
Recomendado
Clasificación