倒回和快进播放

除播放视频外,媒体框架还可控制播放速率,倒回、暂停或快进视频。 在此指南中,玩家在关卡中进行游戏时可通过一个按键倒回、一个按键快进,一个按键播放视频。

在此指南中,我们使用的是启用了 Starter ContentBlueprint Third Person Template 项目。 此外还需要在电脑上存储一些 支持的视频文件 ,以便添加到播放列表进行播放。可使用您的本地视频,或 点击右键 下载该 视频样本

步骤

  1. 在项目中创建一个名为 Movies 的文件夹,然后在浏览器中将视频添加到 Movies 文件夹。

    ControllingPlayback_01.png

  2. 创建一个 文件媒体源(File Media Source)(或其他源资源)并将资源指向视频。

    ControllingPlayback_02.png

  3. 创建一个名为 VideoPlayer媒体播放器(Media Player) 资源和相关的 媒体声波(Media Sound Wave)媒体纹理(Media Texture) 资源。

    ControllingPlayback_03.png

  4. Media Player 资源中,取消勾选 Play on Open 选项。

    ControllingPlayback_04.png

  5. Content BrowserStarterContent/Shapes 中,将一个 Shape_Plane 拖入关卡。

    ControllingPlayback_05.png

  6. 使用 平移(W)旋转(E)缩放(R) 工具将静态网格体调整到理想的大小和位置。

  7. 按住 Ctrl 选中 Sound WaveMedia Texture 资源,将它们放置在关卡中的 静态网格体 上。此操作将自动创建一个 材质 并将其应用到静态网格体。

    ControllingPlayback_06.png

  8. 在工具栏上,点击 Blueprints 按钮和 Open Level Blueprint

    ControllingPlayback_07.png

  9. 添加 Media Player Reference 类型的一个 变量(名为 MediaPlayer),并将其设为 VideoPlayer 媒体播放器资源。指定 默认值 之前可能需要进行 编译

    ControllingPlayback_08.png

  10. 添加一个 Event Begin Play 节点和 Media Player 变量,然后使用 Open Source 打开 MyVideo 文件媒体源资源。

    ControllingPlayback_09.png

  11. 添加一个 2 键盘事件,将 Pressed 设为 播放 MediaPlayer 资源。

    ControllingPlayback_10.png

  12. 添加 13 键盘事件(两者均使用 MediaPlayer 资源的 Set Rate)并调整每个节点的 Rate 数值。Rate 设为 -1.0 后视频将反向播放;Rate 设为 2.0 将 2 倍加速向前播放。

    ControllingPlayback_11.png

    在当前版本中,向媒体播放器资源发出命令时声音同步可能出现问题。建议在命令之间插入短暂延迟,为播放器留出处理时间。我们已知此问题并正在研究修复方法,争取在之后的引擎更新中将其完美解决。

  13. 关闭 关卡蓝图,点击 Play 按钮在编辑器中开始游戏。

最终结果

在编辑器中进行游戏时,关卡加载后视频不会立即开始播放。玩家按下 2 键后视频将开始播放。 按下 1 键将倒回视频;按下 3 键将快进视频。

倒回和快进的速率由 Set Rate 节点上的 Rate 数值决定。调整数值加快倒回和快进时的播放速率。

此例是绑定到键盘按键,也可在以 UMG 构建的用户界面中执行相同功能(在此界面中玩家点击按钮可执行相同命令)。

其他注意事项

部分高级播放功能的使用取决于媒体源,以及使用的播放器插件。 例如,并非所有媒体源都支持寻找和修改播放速率,并非所有播放器插件都支持这些功能。

部分媒体源和播放器的组合可进行速率修改,但只能在特定的速率范围内进行,否则播放将被削减(即出现跳帧)。 部分播放功能可通过蓝图进行查询,如 CanPause、GetForwardRates、GetReverseRates。 所有播放函数(Play、Rewind、Pause、SetRate 等)将提供一个布尔返回值,说明所需操作是否成功。

Windows 的 WmfMedia 播放器插件当前也存在限制,无法进行播放函数的链式调用。举例而言,将命令链中的命令串在一起,如 Play -> SetRate -> Pause -> SetRate -> Play:

点击查看全图。

媒体播放器的状态机可能出现故障,恢复的唯一方法是重新打开媒体源或播放列表。

如需进行链式调用,一个也许可行的解决方法是在每个调用之间插入 Delay 节点,为播放器留出足够时间来处理当前的命令。

ExampleChainDelays.png

相关页面