RawImage创建,添加VideoPlayer
新建一个RenderTexture,将其拖入到新建的 RawIamge 和 VideoPlayer 中TargetTexture中。
VidePlayer 中属性:
source:代表播放源的来源,有Video Clip,URL两个选项,前者需要直接手动引用视频资源,后者的既可以在栏URL直接填链接地址,也可以在代码中指定,网络链接和本地地址皆可,这里用的就是URL源
Play On Awake:字面意思,组件激活时就直接播放
Loop:字面意思,循环播放
Playback Speed:字面意思,播放速度
Render Mode:字面意思,渲染模式,这个需要详细介绍一下,包含5个选项
- CameraFarPlane(基于摄像机的渲染,渲染在摄像机的远平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用于背景播放器)
- CameraNearPlane***(基于摄像机的渲染,渲染在摄像机的近平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用作前景播放器)
- RenderTexture(渲染在RenderTexture上,可以用来做基于UGUI的播放器,这个时我们要用的)
- MaterialOverride(将视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频和VR视频)
- APIOnly(没研究出来干嘛用的,官方文档也没提到)
AspectRatio:屏幕长宽比适应(目前发现在RenderTexture模式下不起作用,所以用了AspectRatioFitter)
- no Scale :不使用缩放。 视频位于目标矩形的中心。
- Fit Vertically :缩放源以使其垂直适合目标矩形,并在必要时剪裁左侧和右侧或在每侧保留黑色区域。 源宽高比被保留。
- Fit Horizontally:缩放源以使其水平适合目标矩形,裁剪顶部和底部区域,或者在需要时在上方和下方保留黑色区域。 源宽高比被保留。
- Fit Inside:缩放源以适合目标矩形,而无需裁剪。 根据需要在左侧,右侧或上方和下方保留黑色区域。 源宽高比被保留。
- Fit Outside:缩放源以适合目标矩形,而不会在左侧,右侧或上方和下方留下黑色区域,并根据需要进行裁剪。 源宽高比被保留。
- Stretch:水平或垂直缩放以适合目标矩形。 源宽高比未保留。
AudioOutputMode:音频输出模式
- None:不播放声音
- AudioSource:用AudioSource播放使用
- ControlledTracks:控制音轨,填需要的数量,再把对应AudioSource节点拖上去引用
VideoPlayer组件的相应播放方法:
- vp.Prepare()
为播放做好准备 - vp.Play()
开始播放 - vp.Stop()
停止播放 - vp.prepareCompleted
视频准备完成时的执行事件 - vp.errorReceived
播放发生错误时的执行事件 - vp.loopPointReached
视频播放到最后时的执行事件,循环状态下,每一次循环播放到最后都会执行
注意事项
- unity 使用RenderTexture播放视频的问题
RenderTexture 停留在最后一帧像素导致播放不同视频出现闪屏,使用新的RenderTexture
RenderTexture texture = new RenderTexture(renderTexture);
- 视频不能被压缩问题
视频文件手动放到StreamingAssets文件夹下,可以使用路径加载的方式进行加载,不必使用WWW
/// <summary>
/// 获取视频路径
/// </summary>
/// <param name="foldPath">文件路径</param>
/// <param name="fileName">视频名称</param>
/// <param name="fileFormat">视频后缀名</param>
/// <returns></returns>
string GetFilePath(string foldPath, string fileName, string fileFormat = ".mp4")
{
string filePath;
if (!string.IsNullOrEmpty(foldPath))
{
filePath = Application.streamingAssetsPath + "/" + foldPath + "/" + fileName + fileFormat;
}
else
{
filePath = Application.streamingAssetsPath + "/" + fileName + fileFormat;
}
return filePath;
}