目录
(1). 直接PixelStreamingInput绑定(OnInputEvent)
(2). 直接使用组件PixelStreamingInput上的(OnInputEvent)
参考
UE 像素流Pixel Streaming基本介绍和使用方法
UE4-PixelStreaming(虚幻引擎4-像素流)笔记
虚幻UE 插件-像素流送实现和优化_ue5.3像素流-CSDN博客
使用
1.像素流连接成功(On New Connection)
必须使用GetPixelStreamingDelegates 这个节点。直接使用PixelStreamingInput这个组件是不行的
2.像素流断开连接(OnClosedConnection)
3.UE接收像素流String信息
(1). 直接PixelStreamingInput绑定(OnInputEvent)
优势就是测试方便。本地测试数据的时候直接调用绑定的事件就好。
(2). 直接使用组件PixelStreamingInput上的(OnInputEvent)
没有半毛钱优势。测试还要重新把这后面的代码复制粘贴一份。
4.UE给像素流传信息
内存溢出(只有参考资料)
5.1
PixelStreaming Memory Leak at UE5.1 - Programming & Scripting - Epic Developer Community Forums
上面连接测试出来不是因为像素流问题导致的内存溢出崩溃。而是场景中的平面反射(Planar Reflection)。删除场景中的平面反射他就好了。
*目前根据客户反馈确实项目没有再崩溃过。内存也比较稳定
5.2+
Pixelstreaming Memory leak - Multiplayer & Networking - Epic Developer Community Forums
- 将 NVCodecs 文件夹从 engine 目录复制到项目的 Plugins 文件夹。
- 根据 Github 上 PR10637(PR10673这个连接我点击是404,所以我只能在各种回答里面找有关的代码。不保证是正确的。有待测试) 中提供的说明修改代码。
- 更新 NVCodecs 插件的信息。
- 在编辑器中,确保选中此插件的版本。
- 打包您的项目。
(...\Engine\Plugins\Experimental\AVCodecs\AVCodecsCore\Source\AVCodecsCore\Public\Video\VideoEncoder.h->166行)
return this->Child->SendFrame(MappedResource, Timestamp, bForceKeyframe);
修改成:
Result = this->Child->SendFrame(MappedResource, Timestamp, bForceKeyframe);
MappedResource.Reset();
return Result;
(...\Engine\Plugins\Experimental\AVCodecs\NVCodecs\Source\NVCodecs\Private\Video\Resources\VideoResourceCUDA.cpp->137行)
添加
if (ExternalSemaphore)
{
CUresult const Result = FCUDAModule:CUDA().cuDestroyExternalSemaphore(ExternalSemaphore);
if (Result != CUDA_SUCCESS)
{
FAVResult::Log(EAVResult::ErrorUnmapping, TEXT("Failed to destroy external semaphore"), TEXT("CUDA"), Result);
}
}
官方以外的一种部署方式
不知道能不能解决内存溢出的问题。只是在搜索相关资料中看到的一个国内做的一种轻量化的部署
资料:
下载连接(git)
我只学会了第一个连接。第二个和第一个有啥区别我也是不知道的。会玩的大佬自然会玩。不会玩的还是和我一样有教程就会玩。
https://github.com/inveta/PeerStreamEnterprise
视频教程:
(UE5)像素流送:国内最佳部署入门|Peer-Stream|_哔哩哔哩_bilibili
百度云盘资源: