小编Mhe*_*yan的帖子

使用ffmpeg将帧编码为视频

我正在尝试使用C++在虚幻引擎4中编码视频.我可以访问单独的框架.下面是读取viewport's显示像素并存储在缓冲区中的代码.

//Safely get render target resource.
FRenderTarget* RenderTarget = TextureRenderTarget->GameThread_GetRenderTargetResource();
FIntPoint Size = RenderTarget->GetSizeXY();
auto ImageBytes = Size.X* Size.Y * static_cast<int32>(sizeof(FColor));
TArray<uint8> RawData;
RawData.AddUninitialized(ImageBytes);

//Get image raw data.
if (!RenderTarget->ReadPixelsPtr((FColor*)RawData.GetData()))
{
    RawData.Empty();
    UE_LOG(ExportRenderTargetBPFLibrary, Error, TEXT("ExportRenderTargetAsImage: Failed to get raw data."));
    return false;
}

Buffer::getInstance().add(RawData);
Run Code Online (Sandbox Code Playgroud)

虚幻引擎IImageWrapperModule可以从帧中获取图像,但注意到视频编码.我想要的是实时编码帧以用于直播服务.

我发现这篇文章使用FFMPEG屏幕截图编码到一个视频中,这是我想要的,但我在为我的情况调整此解决方案时遇到了问题.代码已过时(例如,avcodec_encode_video更改为avcodec_encode_video2使用不同的参数).

贝娄是编码器的代码.

void Compressor::DoWork()
{
AVCodec* codec;
AVCodecContext* c = NULL;
//uint8_t* outbuf;
//int /*i, out_size,*/ outbuf_size;

UE_LOG(LogTemp, Warning, TEXT("encoding"));

codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO); …
Run Code Online (Sandbox Code Playgroud)

c++ ffmpeg video-encoding unreal-engine4

1
推荐指数
1
解决办法
4215
查看次数

标签 统计

c++ ×1

ffmpeg ×1

unreal-engine4 ×1

video-encoding ×1