实现在unity上播放视频有很多种:
第一种新建一个Cube直接将视频文件放到Cube上运行就可以播放了
第二种使用插件Easy
MovieTexture
t或者是AVProVideo
第三种
在移动端播放影片,在你打包时你会发现 Unity 会提示你类似于“没有发现 Movie Texture 类型”这样的错误,这是因为移动平台不支持这个类。所以我们需要用到 Handheld.PlayFullScreenMovie 方法来实现移动平台上视频的播放。移动平台支持 .mov, .mp4, .mpv, and .3gp 四种格式视频。
Handheld.PlayFullScreenMovie 方法专用于移动平台(IOS,Android)播放视频,在视频播放时,Unity会暂停运行,直至视频结束。也就是说当视频结束后,才会开始执行这行代码的下一行代码。
Handheld.PlayFullScreenMovie 方法共有四个重载方法,这里分别介绍一下每个参数:
path:
表示文件的路径。需要加载的影片必须放在 Assets/ StreamingAssets/ 路径下,此路径作为影片文件的根目录,若无子目录,则直接通过“Movie.mp4”文件名来表示 Movie 文件的路径。
bgColor:
表示背景颜色。通常指定为 Color.black。
controlMode:
表示视频的控制模式,此为 FullScreenMovieControlMode 类型的结构体,共四个成员:
FullScreenMovieControlMode.Full 表示播放视频时应用完整的视频控制器,如进度条、暂停等;
FullScreenMovieControlMode.Minimal 表示播放视频时应用最简的视频控制器;
FullScreenMovieControlMode.CancelOnInput 表示播放视频时点击屏幕即关闭视频;
FullScreenMovieControlMode.Hidden 表示不接受任何控制,直到视频播放完成。
scalingMode:
表示视频的缩放模式,此为 FullScreenMovieScalingMode 类型的结构体,共有四个成员:
FullScreenMovieScalingMode.None 不缩放该视频;
FullScreenMovieScalingMode.AspectFit 缩放视频直到尺寸适合屏幕;
FullScreenMovieScalingMode.AspectFill 缩放视频直到视频填充整个屏幕;
FullScreenMovieScalingMode.Fill 缩放视频直到长宽完全适合屏幕。
第四种 先上代码
//图像
public RawImage image;
//播放器
public VideoPlayer vPlayer;
//播放
public Button btn_Play;
//暂停
public Button btn_Pause;
//视频控制器
public Slider sliderVideo;
//当前视频时间
public Text text_Time;
//当前视频时间传递
public int textTime=0;
//视频总时长
public Text text_Count;
//视频总时长传递
public int textCount=0;
//音频组件
//public AudioSource source;
//需要添加播放器的物体
public GameObject obj;
//是否拿到视频总时长
public bool isShow=false;
//前进后退的大小
public float numBer = 20f;
//时 分的转换
private int hour, mint;
private float time;
private float time_Count;
private float time_Current;
//视频是否播放完成
public bool isVideo;
private bool isBoFangfang = true;
// Use this for initialization
void Start () {
image = obj.GetComponent<RawImage>();
vPlayer = obj.AddComponent<VideoPlayer>();
//这3个参数不设置也会没声音 唤醒时就播放关闭
vPlayer.playOnAwake = false;
// source.playOnAwake = false;
// source.Pause();
isShow = true;
//初始化 string url = Application.streamingAssetsPath + “/EasyMovieTexture.mp4”;
//Init(Application.streamingAssetsPath + “/GuangChangWu.mp4”);
Init(Application.streamingAssetsPath + “/1.mp4”);
btn_Play.onClick.AddListener(delegate { OnClick(0); });
btn_Pause.onClick.AddListener(delegate { OnClick(1); });
// sliderVideo.onValueChanged.AddListener(delegate { ChangeVideo(sliderVideo.value); });
}
/// <summary>
/// 初始化VideoPlayer
/// </summary>
/// <param name=”url”></param>
private void Init(string url) {
isVideo = true;
isShow = true;
time_Count = 0;
time_Current = 0;
sliderVideo.value = 0;
//设置为URL模式
vPlayer.source = VideoSource.Url;
//设置播放路径
vPlayer.url = url;
//在视频中嵌入的音频类型
vPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
//把声音组件赋值给VideoPlayer
// vPlayer.SetTargetAudioSource(0, source);
//当VideoPlayer全部设置好的时候调用
// vPlayer.prepareCompleted += Prepared;
//启动播放器
vPlayer.Prepare();
}
private void OnClick(int num) {
switch (num)
{
case 0:
isShow = true;
isBoFangfang = true;
vPlayer.Play();
isVideo = true;
break;
case 1:
isBoFangfang = false;
isShow = false;
vPlayer.Pause();
break;
default:
break;
}
}
void Update ()
{
if (!isBoFangfang)
{
vPlayer.Pause();
}
if (vPlayer.isPlaying && isShow)
{
//把图像赋给RawImage
image.texture = vPlayer.texture;
//帧数/帧速率=总时长 如果是本地直接赋值的视频,我们可以通过VideoClip.length获取总时长
sliderVideo.maxValue = vPlayer.frameCount/vPlayer.frameRate;
time = sliderVideo.maxValue;
hour = (int)time / 60;
mint = (int)time % 60;
textCount = hour * 60 + mint;
text_Count.text = string.Format(“/ {0:D2}:{1:D2}”, hour.ToString(), mint.ToString());
}
if (Mathf.Abs((int)vPlayer.time – (int)sliderVideo.maxValue) == 0)
{
vPlayer.frame = (long)vPlayer.frameCount;
vPlayer.Stop();
Debug.Log(“播放完成!”);
isVideo = false;
sliderVideo.value = 0;
hour = 0;
mint = 0;
text_Time.text = string.Format(“{0:D2}:{1:D2}”, hour.ToString(), mint.ToString());
return;
}
else if (isVideo && vPlayer.isPlaying)
{
time_Count += Time.deltaTime;
if ((time_Count – time_Current) >=1)
{
sliderVideo.value += 1f;
time_Current = time_Count;
time = (float)vPlayer.time;
hour = (int)time / 60;
mint = (int)time % 60;
textTime = hour * 60 + mint;
text_Time.text = string.Format(“{0:D2}:{1:D2}”, hour.ToString(), mint.ToString());
}
}
}
原理就是使用unity中的VideoPlayer组件赋值和控制等等
新建canves新建RawImage物体,给物体挂上脚本就可以了