媒体框架

MediaBanner.png

UE4 中现有一个 MoviePlayer 系统,它只能用于引擎加载时播放启动影片。它无法在游戏中作为 UI 元素的一部分播放影片, 或在关卡中的一个静态网格体上播放影片(如一台正在播放电影的电视机)。媒体框架(Media Framework) 应运而生,它不仅能 执行上述的两个例子,还提供了更多的总体媒体播放功能(概述在下方列出)。

虚幻引擎 4 中的媒体框架为...

  • 引擎和 Slate 独立

  • 支持本地化音频及视频

  • 可在内容浏览器、材质编辑器以及声音系统中使用

  • 可与蓝图和 UMG UI 设计器共用

  • 支持流媒体

  • 可在媒体上执行快进、倒退、播放、暂停和移动操作

  • 支持可插拔播放器

如上所述,媒体框架自身为引擎和 Slate 独立,意味着其可在任意应用中使用(而不是只能在游戏引擎 或编辑器中使用)。框架上有多个层,为其他子系统提供媒体播放功能,如 引擎蓝图SlateUMG UI 设计器。可以覆盖多数使用实例,如游戏内的纹理和 UI、编辑器内的视频教程、以及市场视频。

媒体框架仍在实验阶段,尚不适合用于生产。部分功能可能无法正常工作,我们正努力 解决这些问题,同时添加额外的功能与支持。

什么是媒体框架

媒体框架很大程度上是 C++ 界面的一个合集、常规使用实例的一些助手类、以及一个媒体播放器工厂 (可根据所谓的媒体播放器插件进行延展)。播放影片和其他媒体文件等有趣工作均在插件中执行。

程序员须知:

  • 媒体框架的代码位于此路径中:/Engine/Source/Runtime/Media/

  • 现有的播放器插件位于此路径中:/Engine/Plugins/Media/

当前使用的 Windows 播放器插件底层应用的是 Windows Media Foundation API。MacOS 插件使用的是 Apple 的 AV Foundation, 当前功能有限,但可在 iOS 上使用。已开始制作 Android 播放器插件。

虽然 Windows 插件相对完善,但它执行部分影片格式时会出现问题(如 H.264 编码的 .mp4 文件)。

媒体资源类型与媒体导入

应用媒体框架后,可在内容编辑器中创建三种新资源类型。

媒体播放器资源

媒体播放器资源代表媒体源播放器,如硬盘上的电影文件、或网络上的流媒体 URL。与虚幻引擎 3 中 的 UTextureMovie 不同,媒体播放器资源实际上不含任何数据,它只存储媒体源的路径或 URL。

如下所示,可通过多种方法创建媒体播放器资源。

创建媒体播放器资源

  1. 点击 Create 按钮,然后选择 MiscellaneousMedia Player

    CreateMediaPlayerAsset.png

除点击 Create 按钮外,还可在 Content Browser单击右键 呼出快捷菜单。

  1. 此操作将创建媒体播放器资源(双击 打开)。

    MediaPlayerAsset.png

  2. 在媒体播放器资源的 Details 面板中点击 Browse 按钮。

    BrowseMediaPlayer.jpg

  3. 浏览媒体并选择文件。

    BrowseToMovie.png

  4. 添加文件后,可 点击 媒体播放器中的 Play 按钮进行播放。

    MediaPlay.png

  5. Details 面板中可能存在一个警告图标。

    EpicMovieMediaFrameWorkFile.jpg

  6. 为正确打包,本地媒体文件必须放置在项目的 Content/Movies/ 目录中。

    EpicMovieMediaFrameWorkWMV.jpg

    将媒体文件放置在项目的 Content/Movies/ 文件夹内后,警告图标将消失。

拖放导入

拖放是导入媒体文件的最简单方法。

  1. 媒体文位于项目的 Content/Movies/ 文件夹内时,将其 拖放 进 Content Browser。

    DragAndDropMedia.png

    此操作将自动创建媒体播放器资源并指定其位置。

媒体播放器资源细节

媒体播放器资源可输出诸多内容流,包括音频、视频和标题文字。可通过播放功能键下方媒体窗口顶端的下拉 菜单进行设置。

OutputStreams.png

可在 Details 面板中查看媒体源的属性。

EpicMovieMediaFrameWork.jpg

Playback 选项中,勾选 Looping 复选框可启用媒体循环播放。

Source 部分中,可指定媒体的本地路径或网络 URL 路径,并对流模式进行设置。

媒体纹理资源

创建媒体播放器资源后,即可创建一个 媒体纹理 资源,对视频流进行提取。可为媒体纹理选择一个视频流 (如有多个可用)并以引擎中其他纹理的方式进行使用。

如需在媒体播放器中创建媒体纹理,在媒体播放器资源上 单击右键,然后 选择 Create Media Texture 选项。

MediaTextureAsset.png

之后新媒体纹理资源将被创建。

MediaTextureCreated.png

在媒体纹理上 单击右键 并创建 材质,其使用方法与引擎中其他材质相同。

CreateMaterial.png

材质未在纹理上播放而在媒体资源编辑器中播放,则很可能选择了错误的视频。在媒体播放器的 Details 面板中 双击 媒体纹理打开纹理编辑器 选择视频即可完成修改。

如此操作未解决问题,在媒体播放器资源中勾选 Auto Play 选项,确定视频是否在纹理中流出。如此操作 将问题解决,可继续使用 Auto Play 或通过 Blueprints 设置播放资源的脚本 (查看本页的 带蓝图的媒体框架 部分)。

媒体声波

媒体声波 是可放置在关卡中的声音组件(与其他声音 Actor 方式相同)。其依赖于媒体播放器资源,因此需要对 媒体播放器资源发出播放指令(如未设为 Auto Play)。

在媒体播放器资源上 单击右键 并选择 Create Media Sound Wave 即可创建媒体声波。

MediaSoundWave.png

媒体声波仍处于早期开发阶段。之后将更新更多文档。

带纹理和材质的媒体框架

该部分说明如何快速掌握带纹理和材质的媒体框架的使用方法。

纹理

以下是媒体纹理在电视机上播放的范例(点击播放)。

在此例中,我们从 Learn 标签上的 Realistic Rendering 项目 迁移 SM_TV 资源。

  1. 根据此页说明的步骤使用视频创建媒体播放器和媒体纹理资源。

  2. 打开媒体播放器资源并将其 设为 Auto Play

  3. 打开 Game/ArchVis/Materials 文件夹中的“M_TV”材质。

  4. 将媒体纹理 拖入 “M_TV”材质并 放置ScreenColor 节点旁边。

    Texture1.png

  5. 删除 ScreenColor 节点并将纹理 插入 Lerp 节点。

  6. 添加 一个 TextureCoordinate 节点并连接至 Texture Sample,然后根据需要调整“UTiling”和“VTiling”。

    Texture2.png

材质

材质而言,从媒体纹理创建一个材质并应用到物体即可。

MaterialsExample.png

在上图中,我们将材质应用到关卡里一个简单立方体上。媒体播放器资源被设为 Auto Play。

蓝图的媒体框架

还可通过蓝图直接访问并控制媒体播放器资源。在此例中,应用了媒体纹理的电视机前设置了一个 触发器。媒体播放器资源未被设为 Auto Play。

Blueprint1.png

玩家进入触发器后,应用到电视机上的媒体纹理将开始播放;玩家离开触发器后,将暂停播放(点击播放)。

关卡蓝图 中创建了下列脚本。

点击查看全图。

我们创建了一个媒体播放器类型的新变量,并将媒体播放器资源指定为默认值。如上所述,玩家角色 (MyCharacter)与触发框发生重叠时,媒体播放器资源(已指定给变量)将开始播放

玩家角色离开触发框时将执行相同操作,使用的是 Pause 节点。退出 Play in Editor 会话后,Event End Play 节点 也可暂停媒体播放器。只有两个节点可与媒体播放器共用。 拖动 MediaPlayer 变量时将看到可以共用的几个节点。

BlueprintActions.png

带 UMG 的媒体框架

如需将媒体播放设为 UI 的一部分或游戏中的影片播放器,可通过 UMG 执行 - 创建一个 控件蓝图 并制定一个 从媒体纹理创建的材质(媒体纹理从媒体播放器资源创建)。

在下例中,玩家在游戏中按下 M 键将在屏幕上呼出一个影片播放器,并带有播放、暂停、倒回功能键 (点击播放)。

如下图所示,首先创建一个 控件蓝图

WidgetBlueprint.png

在控件蓝图Image 中指定使用媒体纹理的材质

BrushImage.png

控件蓝图的图表只在播放、倒回和暂停按键上存在命令。

此外还添加了一个 MediaPlayer 变量并指派需要使用的媒体播放器资源。

WidgetBlueprint2.png

为将材质应用到笔刷,需要执行一个小更改,将其设为 Emissive。

Material.png

在关卡蓝图中设置脚本,以便启用/禁用创建好的游戏内影片播放器。

点击查看全图。

Content ExamplesUMGMedia 中可找到更多范例。