可将许多不同格式的视频文件导入 Unity 中。Unity 将导入的视频文件存储为视频剪辑 (VideoClip) 资源。
为了让 Unity 正确预览视频文件,这些视频文件必须与 Editor 平台(运行 Unity 的平台)兼容。还必须确保文件与构建项目时运行项目的目标平台兼容。Unity 提供了将文件转码为通常支持的格式的选项,但是您也可以自己管理兼容性。有关更多信息,请参阅下面的与目标平台的兼容性。
视频源文件必须使用您的 Editor 平台支持的格式。每个平台都支持不同的视频文件格式子集。
扩展名 | Windows | OSX | Linux |
---|---|---|---|
.asf | ✓ | ||
.avi | ✓ | ||
.dv | ✓ | ✓ | |
.m4v | ✓ | ✓ | |
.mov | ✓ | ✓ | |
.mp4 | ✓ | ✓ | |
.mpg | ✓ | ✓ | |
.mpeg | ✓ | ✓ | |
.ogv | ✓ | ✓ | ✓ |
.vp8 | ✓ | ✓ | ✓ |
.webm | ✓ | ✓ | ✓ |
.wmv | ✓ |
视频文件轨道也必须使用支持的编解码器进行编码。每个平台都支持编解码器的特定子集,该子集因平台的版本而异。
使用不受支持的编解码器编码的轨道会在 Editor 中触发错误消息,必须先使用兼容的编解码器对轨道进行转换/重新编码,然后才能使用。
对于大部分平台,H.264(通常采用 .mp4、.m4v 或 .mov 格式)是支持性最佳的视频编解码器,因为它提供最佳的跨平台兼容性。一个需要注意的例外情况是 Linux。
对于 Linux,最佳编码通常是 .webm 容器,其中的视频轨道使用 VP8 编解码器进行编码,而音频则使用 Vorbis 编解码器进行编码。
有关编解码器支持的信息,请查阅您的 Editor 平台的官方文档。 例如,Windows 和 macOS 都提供了编解码器兼容性文档:
视频剪辑导入器可以对您导入到 Unity 的视频文件进行转码。如果 Editor 平台支持您的视频源使用的编解码器,但您的目标平台不支持,则视频剪辑导入器会非常有用(请参阅下文中的与目标平台的兼容性)。
如果要使用的视频文件与目标平台兼容但与您的 Editor 平台不兼容,请将这些视频文件设置为流媒体资源。例如,即使 Editor 仅支持 VP8,您仍可能希望将 VP9 编解码器用于 Android 构建。
要将视频文件设置为流媒体资源,请将这些视频文件放置在项目的 StreamingAssets
文件夹中。要将视频播放器 (Video Player) 组件指向流媒体资源,请使用 URL 属性。还可以使用 Application.streamingAssetsPath 来通过脚本访问特定于平台的流媒体资源路径。
以这种方式使用视频文件时,无法在 Editor 中预览视频文件。但是,您可以创建与 Editor 兼容的版本以用作占位用途,可以在项目中同时包含兼容和不兼容的版本,还可以在运行时确定使用哪个版本。
以下示例演示了如何针对不同平台使用不同的视频 URL。如需了解更多信息,请参阅平台相关的编译的文档。
void SetupMovieFile(VideoPlayer vp)
{
# if UNITY_EDITOR || UNITY_LINUX
vp.url = pathToMyVp8File;
# elif UNITY_ANDROID
vp.url = pathToMyVp9File;
# elif UNITY_STANDALONE_WIN
vp.url = pathToMyWmvFile;
# else
vp.url = pathToMyMp4File;
# endif
}
VideoPlayer 组件使用您的 Editor 平台的原生音频和视频解码库(请参阅上文与 Editor 平台的兼容性)在 Editor 中播放视频文件。您需要自行确保这些文件符合目标平台的要求。
可用于硬件加速并且本机支持的最优视频编解码器是 H.264
当优先考虑跨平台支持时,VP8 是一个不错的选择。VP8 得到广泛支持并具有全面的功能集,但与硬件加速的编解码器(例如 H.264)相比,需要消耗更多的资源。
Android 使用原生库支持 VP8,因此 VP8 在某些 Android 设备上也可能获得硬件辅助。
尽管 Unity Editor 中支持 .ogv 格式,但其他平台并未广泛支持该格式。应根据目标平台,将 .ogv 文件转码为 .mp4 (H.264) 或 .webm (VP8)。
以下是在编码参数中需要的一些关键值:
分辨率:例如 1280 x 720。
配置文件:适用于 H.264/H.265。配置文件是一组功能和约束;通常是由供应商指定,例如 Baseline 或 Main。请参阅 H.264 或 H.265。
配置文件级别:适用于 H.264/H.265。在一个给定的配置文件中,级别会指定性能要求,例如 Baseline 3.1。请参阅 H.264 或 H.265。
音频编解码器:通常是 AAC(适用于使用 H.264/H.265 的 mp4 视频)或 Vorbis(适用于使用 VP8 的 webm 视频)。
音频通道:取决于平台。例如,针对 Android 的建议是立体声文件,但很多设备都接受 5.1。
视频剪辑导入器提供了将视频剪辑资源转码为以下视频编解码器之一的选项:
转码后的视频剪辑自动使用适当的音频编解码器:
注意: |
---|
视频剪辑导入器仅提供了基本的转码选项。根据源文件的编码方式,使用导入器选项进行转码的剪辑可能无法提供最佳性能。在这种情况下,使用外部转码程序可能会获得更好的结果。 |
如果您已知道目标系统支持您使用的视频,则可以禁用视频剪辑导入器的转码选项。在这种情况下,Unity 根本不会修改文件,而是按原样使用这些文件。您可以使用外部程序来管理编码,从而可以进行更好的控制。
本节提供有关视频兼容性的有用信息,以及指向外部资源的链接。
请务必遵循供应商就编解码器支持给出的建议。编解码器的选择在较旧的移动平台上尤其受到约束。如果您计划将视频包含在要在多台设备上运行的游戏中,则可能需要仔细检查并转换/重新编码视频。
本节将介绍特定平台上的一些已知问题。
并非所有设备都支持大于 640 x 360 的分辨率。系统会执行运行时检查以验证这一点,如果失败,将导致无法播放电影。
对于 Android Lollipop(5.0 和 5.1.1)及更高版本,您可以使用任何分辨率或任意数量的音频通道,只要目标设备支持即可。
格式兼容性问题会显示在 adb logcat
输出中,并且始终以 AndroidVideoMedia
为前缀。
注意特定于设备的错误消息(位于 Unity 错误消息附近):它们对于引擎来说不可用,但通常会说明兼容性问题。
只有直接从磁盘读取的非压缩捆绑包支持从资源包中播放。
不支持原生 webM/VP8 透明度。必须对 VP8 编码的 webM 剪辑进行转码,以确保透明度在 Android 上有效。
下表提供了 H.265 编解码器的特定于平台的要求和编码/解码信息。
平台: | 要求: | 编码/解码: | 注意 |
---|---|---|---|
OSX | SDK 10.13+ |
硬件编码:第 6 代 Intel Core 处理器 软件编码:所有 Mac 机型 硬件解码:第 6 代 Intel Core 处理器 软件解码:所有 Mac 机型 |
|
Windows | Windows 10 + HEVC 扩展 |
编码器 解码器 |
HEVC 扩展(仅硬件) HEVC 扩展(硬件 + 软件支持) |
iOS | SDK 11.0+ |
硬件解码:A9 芯片 软件解码:所有 iOS 设备 |
|
tvOS | SDK 11.0+ | ||
XBox | 请参阅此处 | ||
UWP | Windows 10 + 参阅此处 | 在注明支持 H.265 的情况下,不一定是设备系列中的所有设备都支持。 | |
Android | 5.0+ 参阅此处 |
2019–05–07 页面已修订并进行了编辑审查
Unity 5.6 中的新功能