在Unity中播放视频可以选择自带视频组件VideoPlayer或者插件AVPro等,这里我们简单了解一下如何使用VideoPlayer的常用功能。
一、播放准备工作
1.1UI,在UI界面播放创建RawImage
1.2 新建RenderTexture
Assets文件夹下右键Create->RenderTexture
1.3添加组件VideoPlayer
在新创建的RawImage中AddComponent搜索VideoPlayer并添加
将TargetTexture更换为新建的RenderTexture
将组件RawImage中的Texture更换为新建的RenderTexture
1.4视频资源
1.4.1如果使用Source为VideoClip,将视频资源导入unity中,拖到Clip;
如果需要多个视频资源的使用看下面第二部分
1.4.2若使用Soure为URL则浏览视频资源所在目录
以上工作完成之后就可以正常播放视频了。
二、视频暂停与播放、下一个视频、上一个视频、播放速度快进与后退、静音、播放时长功能的实现
创建脚本,在脚本中声明变量videoplayer,后续直接使用videoplayer说明,注意将VideoPlayer组件拖入脚本 中
public VideoPlayer videoplayer;
1.视频播放:
videoplayer.Play();
这里可以写在Start中或你需要操作之后再播放视频的函数中
2.视频暂停:
videoplayer.Pause();
3.多个视频的使用:下一个视频、上一个视频
脚本声明变量VideoClip数组,将需要的视频资源都拖入脚本VideoClip数组中
public VideoClip []videoclip;
在Start中先设定要播放的视频资源或在你需要播放视频的函数中:
videoplayer.clip = videoclip[i];
i为你拖入视频资源的任意数0,1,2...
3.1下一个视频:
可以直接i++,如果超过videoclip数组长度-1则i=0;上一个视频同理小于0则i变为数组长度-1
4.播放速度
获取当前视频播放速度videoplayer.playbackSpeed;设置你需要的播放速度VideoSpeed,
videoPlayer.playbackSpeed=VideoSpeed;
5.静音(这里使用单轨道视频)
将视频的音频轨道设置为禁止播放videoPlayer.SetDirectAudioMute(0, false);
6.播放时长(采用Clip播放视频资源)
6.1视频总时长:
VideoAllTime = (int)videoPlayer.clip.length;
6.2当前时长:
(int)videoPlayer.time;
这里可以添加时间转换,将得到的时长转为int,添加功能转为日常看到的,例如我转为00:00:00
public string TimeShow(int time)
{
int Hour, Minute, Second;
Hour = time / 3600;
time -= Hour * 3600;
Minute = time/ 60;
time -= Minute * 60;
Second = time;
return Hour.ToString("00")+":"+Minute.ToString("00") + ":"+Second.ToString("00");
}
7.URL中视频播放时长的获取
7.1视频总时长:
VideoAllTime = videoplayer.totalFrames / videoplayer.frameRate;
其中totalFrames代表总帧数,frameRate代表帧率
7.2当前时长:
videoplayer.frame / videoplayer.frameRate;
其中frame代表当前帧数
三、URL视频资源转Webgl
在Unity中项目导出webgl时,视频不可以使用Clip,不支持导致无法加载
所以这里采用URL的方式,这里最好提前设置好路径否则在其他设备无法查看该视频资源
path = Path.Combine(Application.streamingAssetsPath, "4.mp4");
videoplayer.url = path;
必须把视频资源放在Assets中的StreamingAssets文件夹下才可以在其他设备浏览器播放。