我们已经上线了 Agora Unreal SDK,提供了支持 Blueprint 和 C++ 的两个版本 SDK。我们分享了如何基于 Blueprint 在游戏中创建实时音视频功能 。在本文中,我们来分享如何基于声网 Agora Unreal SDK C++版本,在游戏中实现实时音视频功能。
本篇教程较长,建议在 Web 浏览器端浏览,体验更好。
准备工作
需要的开发环境和需要准备的与 Blueprint 一样:
新建项目
如果你已经有 Unreal 项目了,可以跳过这一步。在 Unreal 中创建一个 C++类型的项目。
确保在 [your_project]/Source/[project_name]/[project_name].Build.cs文件的 PrivateDependencyModuleNames一行,去掉注释。Unreal 默认是将它注释掉的,这会导致在编译的时候报错。
// Uncomment if you are using Slate UI PrivateDependencyModuleNames.AddRange(new string[] { "UMG", "Slate", "SlateCore" });
接下来我们在项目中集成 Agora SDK
1.将 SDK 复制到这个路径下 [your_project]/Plugins
2.把插件依赖添加到[your_project]/Source/[project_name]/[project_name].Build.cs文件的私有依赖(Private Dependencies)部分 PrivateDependencyModuleNames.AddRange(new string[] { “AgoraPlugin”, “AgoraBlueprintable” });
3.重启 Unreal
4.点击 Edit->Plugin,在分类中找到 Project->Other,确定插件已经生效
创建新的 Level
接下来我们将创建一个新的 Level,在那里建立我们的游戏环境。有几种不同的方法可以创建一个新的 Level,我们将使用文件菜单的方法,其中列出了关卡选择选项。
在虚幻编辑器里面,点击文件菜单选项,然后选择新建 Level……
然后会打开一个新的对话框 。
选择Empty Level ,然后指定一个存储的路径。
创建核心类
在这里我们要创建两个类:VideoFrameObserver 和VideoCall C++ Class。他们会负责与 Agora SDK 进行通信。
首先是 VideoFrameObserver。VideoFrameObserver 执行的是 agora::media::IVideoFrameObserver。这个方法在 VideoFrameObserver 类中负责管理视频帧的回调。它是用 registerVideoFrameObserver 在 agora::media::IMediaEngine 中注册的。
在 Unreal 编辑器中,选择 File->Add New C++ Class。
父类谁定为 None,然后点击下一步。
为 VideoFrameObserver明明,然后选择 Create Class。
创建 VideoFrameObserver 类接口。
打开 VideoFrameObserver.h 文件然后添加如下代码:
//VideoFrameObserver.h #include "CoreMinimal.h" #include <functional> #include "AgoraMediaEngine.h" class AGORAVIDEOCALL_API VideoFrameObserver : public agora::media::IVideoFrameObserver { public: virtual ~VideoFrameObserver() = default; public: bool onCaptureVideoFrame(VideoFrame& videoFrame) override; bool onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame) override; void setOnCaptureVideoFrameCallback( std::function<void(std::uint8_t*, std::uint32_t, std::uint32_t, std::uint32_t)> callback); void setOnRenderVideoFrameCallback( std::function<void(std::uint8_t*, std::uint32_t, std::uint32_t, std::uint32_t)> callback); virtual VIDEO_FRAME_TYPE getVideoFormatPreference() override { return FRAME_TYPE_RGBA; } private: std::function<void(std::uint8_t*, std::uint32_t, std::uint32_t, std::uint32_t)> OnCaptureVideoFrame; std::function<void(std::uint8_t*, std::uint32_t, std::uint32_t, std::uint32_t)> OnRenderVideoFrame; };
AGORAVIDEOCALL_API 是项目依赖的定义,而不是由Unreal 生成的你自己的定义。
重写onCaptureVideoFrame/onRenderVideoFrame方法
onCaptureVideoFrame 会获取到摄像头捕获的画面,转换为 ARGB 格式并触发 OnCaptureVideoFrame 回调。
onRenderVideoFrame 讲收到的特定用户画面转换为 ARGB 格式,然后触发 onRenderVideoFrame 回调。
//VideoFrameObserver.cpp bool VideoFrameObserver::onCaptureVideoFrame(VideoFrame& Frame) { const auto BufferSize = Frame.yStride*Frame.height; if (OnCaptureVideoFrame) { OnCaptureVideoFrame( static_cast< uint8_t* >( Frame.yBuffer ), Frame.width, Frame.height, BufferSize ); } return true; } bool VideoFrameObserver::onRenderVideoFrame(unsigned int uid, VideoFrame& Frame) { const auto BufferSize = Frame.yStride*Frame.height; if (OnRenderVideoFrame) { OnRenderVideoFrame( static_cast<uint8_t*>(Frame.yBuffer), Frame.width, Frame.height, BufferSize ); } return true; }
增加setOnCaptureVideoFrameCallback/setOnRenderVideoFrameCallback方法。
本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/484921.html
评论列表(10条)
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!
C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解分享!