7.Unity进阶视频播放总结

7.总结


7.1 知识点

学习的主要内容

总结讲什么

兼容性问题

播放需求


7.2 核心要点速览

视频剪辑设置

以下是视频剪辑设置的相关知识整理为表格形式:

类别 参数 介绍
设置参数 sRGB 是否开启 sRGB,sRGB 是通用色彩标准,避免不同设备出现色差,一般默认勾选
Transcode 是否开启转码,开启后下方参数才能设置
Dimensions 控制源文件内容大小调整方式:
1. Original:保持原始大小
2. Three Quarter Res:调整为原始宽高的四分之三
3. Half Res:调整为原始宽高的一半
4. Quarter Res:调整为原始宽高的四分之一
5. Square(1024x1024):调整为 1024x1024 正方形图像,宽高比可控
6. Square(512x512):调整为 512x512 正方形图像,宽高比可控
7. Square(256x256):调整为 256x256 正方形图像,宽高比可控
8. Custom:调整为自定义分辨率,宽高比可控,可设置Width(生成图像的宽)、Height(生成图像的高)
9. Aspect Ratio:调整图像大小时的宽高比,有No Scaling(添加黑色区域保留原始宽高比)、Stretch(拉伸原始内容填充目标分辨率)
Codec 选择用于转码的解编码器:
1. Auto:为目标平台选择最合适的视频编解码器
2. H264:MPEG–4 高级视频编码 (AVC) 视频编解码器,受大多数平台硬件支持
3. H265:MPEG-H Part 2 或高效视频编码 (HEVC) 视频编解码器,受某些平台硬件支持
4. VP8:VP8 视频编解码器,受大多数平台软件支持,部分平台(如 Android 和 WebGL)硬件支持
Bitrate Mode 相对于所选编解码器的基线配置文件的低、中或高比特率
Spatial Quality 决定视频图像在转码过程中是否压缩大小:
1. Low Spatial Quality:转码时图像大小显著减小(通常为原始尺寸的四分之一),播放时扩展回原始大小,节省存储空间但播放时模糊度最大
2. Medium Spatial Quality:转码时图像大小适度减小(通常为原始尺寸的一半),播放时扩展回原始大小,图像更清晰,存储空间有所减少
3. High Spatial Quality:不调整大小,保持视频原始视觉清晰度
Keep Alpha 保留 Alpha 透明通道并在转码期间将其编码,仅对具有 Alpha 通道的源显示,Android 平台原生 VP8 不支持透明度,需启用转码
Deinterlace(去交错设置) 控制隔行扫描源在转码期间如何解除隔行扫描,优化动态画面清晰度:
1. Off:源文件没有隔行扫描,不进行隔行扫描
2. Even:采用每个帧的偶数行,插入创建缺失内容,丢弃奇数行
3. Odd:采用每个帧的奇数行,插入创建缺失内容,丢弃偶数行
隔行扫描和逐行扫描区别
隔行扫描:每一帧被分割为两场,包含奇数或偶数扫描行,交替显示,存在闪烁,人眼易疲劳
逐行扫描:每次显示整个扫描帧,画面更平滑,闪烁较小
Filp Horizontally 选中时,转码时将视频源文件内容沿水平轴翻转实现上下翻转
Flip Vertically 选中时,转码时将视频源文件内容沿垂直轴翻转实现左右翻转
Import Audio 只有存在音频轨道的视频才会出现该选项,勾选时,转码期间会导入音频轨道

VideoPlay视频播放器

VideoPlayer组件参数

参数分类 参数名称 参数说明
视频源设置 Source 视频源类型,有 Video Clip 和 URL 两种选择
Video Clip 可直接将视频剪辑拖入或选择视频剪辑进行关联
URL 选择视频的路径,可以是远程视频路径,可点击 Browse 选择,也能通过代码关联
播放控制 Play On Awake 场景启动时自动播放视频,若想自行控制播放时机则取消勾选
Wait For First Frame 勾选后,Unity 等待视频第一帧准备好显示;取消勾选可能丢弃前几帧以同步游戏时间
Loop 设置视频是否循环播放
Skip On Drop 决定是否允许视频播放器跳过帧以赶上当前时间
Playback Speed 播放速度的乘数,取值范围 0 - 10,1 为正常速度,2 表示两倍速播放
渲染方式 Render Mode 包括 Camera Far Plane、Camera Near Plane、Render Texture、Material Override、API Only 等多种渲染模式:
- Camera Far Plane:在摄像机的远平面上渲染视频,Camera 定义接受视频的摄像机,Alpha 可设置视频的全局透明度,3D Layout 包含不同的 3D 布局渲染方式
- Camera Near Plane:在摄像机的近平面上渲染视频
- Render Texture:将视频渲染到渲染纹理中,Target Texture 用于指定渲染图像的渲染纹理,分辨率最好和视频一致,可通过 UI 创建 image 关联视频纹理
- Material Override:通过游戏对象渲染器的材质将视频渲染到游戏对象的选定纹理属性中,Renderer 用于指定渲染图像的渲染器,若为 None 则使用 Video Player 依附对象的渲染器
- API Only:不预先设置渲染位置,通过代码使用 Video Player 中的 texture 属性设置视频渲染位置
宽高比设置 Aspect Ratio 有 No Scaling、Fit Vertically、Fit Horizontally、Fit Inside、Fit Outside、Stretch 等多种宽高比设置方式:
- No Scaling:不使用缩放
- Fit Vertically:垂直适应目标矩形,必要时裁剪左右或留黑边保留原宽高比
- Fit Horizontally:水平适应目标矩形,必要时裁剪上下或留黑边保留原宽高比
- Fit Inside:对原视频缩放不裁剪,但可能留黑边
- Fit Outside:对原视频缩放,可能裁剪但不留黑边
- Stretch:水平和垂直方向均缩放以适应目标矩形,不保留源宽高比
音频输出设置 Audio Output Mode 包括 None、Audio Source、Direct、API Only 等音频输出模式:
- None:不播放音频
- Audio Source:将音频发送给指定的音频源对象,允许 Unity 的音频处理,关联音频源后可通过其控制视频声音
- Direct:直接绕过 Unity 音频处理,发送给音频输出硬件输出,如手机硬件
- API Only:通过代码将音频样本发送到关联的 AudioSampleProvider 听诊器
Mute 设置静音
Volume 调节音量
Track Enabled 启用关联的音频轨道用于播放,必须在播放前设置,如“Track 0[en, 2 ch]”表示双声道音频轨道

VideoPlayer参数和方法

参数设置

// 是否自动播放,设置为 false 表示不自动播放
videoPlayer.playOnAwake = false; 
// 设置渲染模式为在摄像机的远平面上渲染
videoPlayer.renderMode = VideoRenderMode.CameraFarPlane; 
// 设置目标渲染贴图为 renderTexture(需提前定义)
videoPlayer.targetTexture = renderTexture; 
// 设置目标摄像机为名为 "Main Camera" 的摄像机
videoPlayer.targetCamera = GameObject.Find("Main Camera"); 
// 设置目标摄像机的透明度为 0.5
videoPlayer.targetCameraAlpha = 0.5f; 
// 以 Over-Under3D 格式呈现视频
videoPlayer.targetCamera3DLayout = Video3DLayout.OverUnder3D; 
// 设置视频源模式为使用视频剪辑
videoPlayer.source = VideoSource.VideoClip; 
videoPlayer.clip = videoClip; 
// 或者设置视频源模式为使用 URL 路径
// videoPlayer.source = VideoSource.Url; 
// videoPlayer.url = Application.streamingAssetsPath + "/Video.mp4"; 
// 设置视频不循环播放
videoPlayer.isLooping = false; 

视频状态输出

// 输出视频总时长,单位为秒
print(videoPlayer.length); 
// 输出当前视频播放的时长,单位为秒
print(videoPlayer.time); 
// 输出视频的总帧数
print(videoPlayer.frameCount); 
// 输出当前视频播放到的帧
print(videoPlayer.frame); 

方法

// 播放视频
videoPlayer.Play(); 
// 停止视频,再次播放时会从头开始
videoPlayer.Stop(); 
// 暂停视频播放
videoPlayer.Pause(); 
// 为视频准备数据,提前调用可避免播放时卡顿
videoPlayer.Prepare(); 

事件

// 准备完成事件,当视频准备完成后触发,可用于避免播放卡顿
videoPlayer.prepareCompleted += (v) =>
{
    print("准备完成");
    isPrepareCompleted = true;
};
// 开始事件,当执行 videoPlayer.Play() 方法后调用
videoPlayer.started += (v) =>
{
    print("当执行 player 播放方法后 会调用的事件");
};
// 结尾事件,当视频播放到结尾处时调用
videoPlayer.loopPointReached += (v) =>
{
    print("视频播放到结尾处时会调用的事件");
};

全景视频

Unity 支持两种类型的全景视频:

  • 等距圆柱投影布局:也被称为球面投影、简化圆柱投影、矩形投影或普通圆柱投影。这种布局的全景视频,其宽高比通常为 2:1(对应 360 度内容)或 1:1(对应 180 度内容)。
  • 立方体贴图布局:由六个正方形纹理的集合构成。该布局的全景视频宽高比包括 1:6、3:4、4:3、6:1 等。可以通过视频分辨率的比值来判断该全景视频属于哪种布局类型。

在 Unity 中使用全景视频

  1. 导入等距圆柱投影布局的视频文件时,可以通过观察其分辨率是否为 2:1 来进行初步判定。
  2. 使用 Video Player 组件,将其渲染模式设置为以 Render Texture(渲染纹理)来播放视频。
  3. 设置接受渲染纹理的天空盒材质,具体操作为将天空盒材质的着色器设置为 Skybox>Panoramic。
  4. 配置场景,使其使用所设置的天空盒材质。
  5. 运行测试,尝试旋转摄像机的角度,查看全景视频的播放效果。

注意:为了获得更好的视觉效果,尽量使用较高分辨率的全景视频,如 4K 或 8K 分辨率。但对于一些老旧设备或者移动设备,由于性能限制,可能最多只能支持 2K 分辨率,具体情况需根据实际设备性能来确定。

使用全景视频时的注意事项

  1. Render Texture(渲染纹理)

    • 确保 Render Texture 的 Size(尺寸)与视频的尺寸保持一致,可以在视频预览窗口中选择 Source Info(源信息)来查看视频的分辨率。
    • 将渲染纹理的 Depth Buffer(深度缓冲区)设置为 No depth buffer(无深度缓冲区)。
  2. 天空盒材质

    • 对于等距圆柱投影布局,在天空盒材质中将 Mapping(映射)设置为 Latitude Longitude Layout(经纬度布局),然后根据视频是 180 视图还是 360 视图,相应地选择 360 degree(360 度)或者 180 degree(180 度)。
    • 对于立方体贴图布局,将 Mapping 设置为 6 Frames Layout(6 帧布局)。
    • 如果视频是 VR 视频:
      • 当视频内容分为左右双眼显示时,需要将天空盒材质的 3D Layout(3D 布局)设置为 Side by Side(并排)。
      • 当左右侧内容在视频中呈上下分布时,3D Layout 应设置为 Over Under(上下)。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏