假设您需要将游戏保存为视频文件,或者您希望直播游戏,据我所知,没有简单的方法可以使用蓝图,也没有用于此目的的插件。要解决这个问题,你需要以某种方式获得游戏的视频和音频。经过一些研究,我发现了一种从Viewport获取游戏视频的方法。您可以通过继承UGameViewportClient并覆盖Draw方法来实现此目的。
void UMyGameViewportClient::Draw(FViewport* Viewport, FCanvas* SceneCanvas)
您可以在Viewport上调用ReadPixel来获取RGBA表示,并使用FFmpeg库对此颜色缓冲区进行编码。
TArray<FColor> ColorBuffer;
if (!Viewport->ReadPixels(ColorBuffer, FReadSurfaceDataFlags(),
FIntRect(0, 0, ViewportSize.X, ViewportSize.Y)))
{
UE_LOG(LogTemp, Error, TEXT("Cannot read from viewport"));
return;
}
以下是问题Encoding frames to video with ffmpeg
的答案到目前为止一切顺利。那音频怎么样?虚幻引擎中的哪个类负责混合所有音频以获得要播放的单个最终音频?如何从该课程中获取音频?