使用蓝图控制播放

演示如何在蓝图中快进、倒回、暂停和恢复视频播放。

Windows
MacOS
Linux
See Also

除了在基于虚幻引擎4的项目中播放视频,你还可以让播放器通过一系列的蓝图 节点来控制视频的播放。

在本教程中,我们提供了一种方法,通过创建暂停、倒回、快进和恢复播放未播放完的视频的功能,让播放器控制视频的播放。

FinalHero.png

并非所有的播放器插件都支持快进和/或反向播放。请参阅媒体框架技术参考 页面了解更多信息。

初始设置

首先,我们需要定位我们的媒体文件,然后在内容浏览器中设置一个文件夹。这能为我们之后构建蓝图做好准备。

对于本教程,我们使用的是已启用 初学者内容包(Starter Content)蓝图第三人称模板(Blueprint Third Person Template) 项目。 你还需要一个视频进行播放,你可以使用自己的视频或右键单击并下载此示例视频

  1. 内容浏览器(Content Browser) 中,展开 源(Sources) 面板并创建一个名为 电影(Movies) 的文件夹,然后右键单击新建的文件夹,选择 在资源管理器中显示(Show in Explorer)

    ControllingPlayback_01.png

  2. 将示例视频(或你支持的视频)拖动到你计算机上项目的 内容/电影(Content/Movies) 文件夹中。

    ControllingPlayback_02.png

    为了确保视频内容与项目一起打包和部署,内容必须位于项目的 内容>电影(Content>Movies) 文件夹中。

  3. 在你的项目中,创建一个 媒体播放器(Media Player) 和相关的 媒体纹理(Media Texture) 资源,分别命名为 MediaPlayerMediaPlayer_Video

  4. 创建一个名为 视频(Video)文件媒体源(File Media Source) 资源,并在其中将 文件路径(File Path) 指向在 步骤2(Step 2) 中添加的视频。

    ControllingPlayback_03.png

  5. 打开你的 媒体播放器(Media Player) 资源,并禁用 打开即播放(Play on Open) 选项。

    ControllingPlayback_04.png

    在本例中,我们将向播放器提供播放控制,而不是在打开媒体源后让其自动开始播放。

  6. 基本(Basic) 下的 放置Actor(Place Actors) 面板中的主编辑器内,将一个 平面(Plane) 拖动到关卡中并根据需要调整其大小("放置Actor"若未开启,则可以在窗口菜单中找到)。

  7. MediaPlayer_Video 纹理拖动到该 平面(Plane) 上,然后在该平面的 详细信息(Details) 面板中,添加 媒体声音组件(Media Sound Component) 并将其设置为使用你的 媒体播放器(Media Player) 资源。

    点击查看大图。

蓝图设置

接着,我们要设置我们的第一个蓝图,以便之后在其中添加函数。

  1. 从"主工具栏"中,单击 蓝图(Blueprints) 按钮,然后选择 打开关卡蓝图(Open Level Blueprint)

    ControllingPlayback_06.png

  2. 关卡蓝图(Level Blueprint) 中,创建一个名为 MediaPlayer,类型为 媒体播放器对象引用(Media Player Object Reference) 的变量,并将其设置为指向你的 媒体播放器(MediaPlayer) 资源。

  3. 按住 Ctrl 并将 MediaPlayer 变量拖动到图表中,并使用 打开源(Open Source)事件开始播放(Event Begin Play) 以打开你的 视频(Video) 文件媒体源资源。

    ControllingPlayback_07.png

    相反,你可以使用"打开源延迟"(Open Source Latent)节点(而非"打开源"(Open Source)节点),用选项打开指定的媒体源,这样会延迟执行"完成"(Completed)输出引脚,直至源文件打开。

    Open_Source_Latent.PNG

    如果你希望设置源文件的播放速度,你可以用这个方法。

播放/暂停 - 向上

  1. 添加一个连接到 触发器(Flip Flop)向上(Up) 键盘事件,并关闭你的 Media Player 变量,使用 播放(Play)暂停(Pause),如下所示。

    ControllingPlayback_08.png

    当播放器按下 向上(Up) 箭头键盘键时,媒体源将开始播放,而再按一次则会暂停视频。

    暂停对应于将播放速率(Play Rate)设置为0.0,但并非所有媒体源都支持暂停(例如网络摄像头和其他视频捕捉硬件源)。 你可以使用 可以暂停(Can Pause) 蓝图节点来确定媒体源是否支持暂停。

倒回/快进 - 左/右

  1. 添加 向左(Left)向右(Right) 键盘事件,然后关闭你的 Media Player 变量,使左键在 -2 处,右键在 2 处。

    ControllingPlayback_09.png

    这将使播放器能够按下左箭头键盘键把视频播放速率(Play Rate)设置为-2(以两倍的速度反向播放视频,值为1.0是正常的正向播放)。

    当你按下右箭头键后,视频将以两倍正常播放速率快进。

    你可以添加额外的蓝图逻辑来确定播放器按下倒回或快进键的次数,并将播放速率(Play Rate)从2倍增加或减少到4倍、6倍或更高。

    即使播放器插件支持1.0之外的播放速率,可以选择的实际播放速率也将取决于正在使用的媒体源。你可以使用 获取支持速率(Get Supported Rate) 函数确定是否支持该速率。

    SupportRates.jpg

    注意,稀疏化(Thinned)非稀疏化(Unthinned) 速率之间存在区别。"稀疏化"意味着使用此速率时某些帧将被略过,而"非稀疏化"意味着使用此速率时所有帧都将被解码。

结束/恢复播放 - 向下

  1. 添加一个连接到 触发器(Flip Flop)向下(Down) 键盘事件,然后关闭 媒体播放器(Media Player) 引用,使用 获取时间(Get Time) 函数调用。

    ControllingPlayback_10.png

    获取时间(Get Time) 函数调用将返回当前播放时间,当我们想要重新打开视频和恢复视频播放时,将存储和使用该当前播放时间。

  2. 右键单击 获取时间(Get Time) 节点的 返回值(Return Value),并将其提升至名为 停止时间(Stop Time) 的变量,然后将所有节点连接到 关闭(Close) 函数调用,如图所示。

    ControllingPlayback_11.png

    这样将在按下向下箭头键盘键时关闭媒体播放器,但存储媒体播放器被停止于某个变量时的当前时间。

  3. 关闭 触发器(Flip Flop)B 引脚,使用 打开源(Open Source) 节点并将 媒体源(Media Source) 设置为你的 视频(Video) 媒体源。

    ControllingPlayback_12.png

    这样将重新打开你的视频,但会从头开始播放视频,我们将在接下来的几个步骤中解决这个问题。

  4. 拖走 媒体播放器(Media Player) 引用,使用 在打开的媒体上指定(Assign On Media Opened) 事件调度器,并进行连接,如图所示。

    ControllingPlayback_13.png

    这样将创建一个事件调度器 ,该调度器仅在媒体源完全打开时才会调用连接的事件。 在向媒体播放器发出命令时,以这种方式操作是一种好办法,因为它可以确保在试图告诉媒体播放器做某事之前已经打开媒体源。 如果我们在打开媒体播放器后直接向它发出命令,则不能保证该媒体源已经完全打开并能够接收命令,而这可能会导致命令失败。

  5. 关闭你的 媒体播放器(Media Player) 引用,调用 Seek 函数,然后调用 Play 函数。

  6. Stop Time 变量连接到 寻找(Seek) 节点的 时间(Time) 引脚。然后将 寻找(Seek)播放(Play) 节点连接到 OnMediaOpened 事件,如图所示。

    ControllingPlayback_14.png

    现在,当播放器按向下箭头键时,当前时间将在关闭媒体播放器之前存储。 再次按下时,视频(Video) 媒体源将打开,而且当其完全打开后,在播放视频之前,该视频会移动到指定的 停止时间(Stop Time)(恢复播放)。

  7. 关闭 关卡蓝图(Level Blueprint) 并从主工具栏单击 播放(Play) 按钮以在编辑器中播放。

最终结果

你现在可以使用 向上(Up)向下(Down)向左(Left)向右(Right) 方向键来控制视频的播放。

按下 向上(Up) 方向键将播放/暂停视频,按下 向下(Down) 方向键将关闭/重新播放视频,按下 向左(Left) 方向键将倒回视频,按下 向右(Right) 方向键将快进视频。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback