Unity3D使用EasyMovieTexture插件播放视频

Unity3D对于视频的播放兼容个人感觉很差劲,之前写过一篇使用Unity3D自己自带的一些功能去播放视频,链接如下:

http://www.cnblogs.com/xiaoyulong/p/8627016.html

今天我们使用EasyMovieTexture插件播放视频播放视频。个人觉得EasyMovieTexture插件还是比较好用的,里面封装了很多API,使用起来很方便。有一个不好的地方就是很多方法只有在视频播放时才有效果,就是觉得这个有点坑。

如上图,新建一个物体,挂上 MediaPlayerCtrl 脚本就基本上能完成视频的播放了。关于MediaPlayerCtrl脚本的详细介绍可以看这个链接https://wenku.baidu.com/view/4cea74a918e8b8f67c1cfad6195f312b3169ebfe.html,我这里说几个简单的

StrFileName:输入传统文件名表示在StreamingAssets文件夹中。我们也是可以输入路径的。

Target Material:连接GameObject更新视频贴图。说白了就是你想在哪个物体上显示画面,就把哪个物体拖进去。

B Loop:是否循环播放。

B Auto Play:是否激活时自动播放。

下面是我封装了一些常用的方法,应该能满足一个简单视频播放器的开发了,很简单,代码如下:

  1 using System.Collections;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4 
  5 public class VideoController : MonoBehaviour
  6 {
  7     private MediaPlayerCtrl _mediaPlayer;
  8     private bool _isPlaying;//视频是否正在播放
  9     private float _totalTime;//视频总时长
 10     private float _currentTime;//视频当前播放时长
 11 
 12     private void Start()
 13     {
 14         Init();
 15     }
 16 
 17     private void Init()
 18     {
 19         _mediaPlayer = this.GetComponent<MediaPlayerCtrl>();
 20     }
 21 
 22     /// <summary>
 23     /// 视频是否正在播放
 24     /// </summary>
 25     public bool isPlaying
 26     {
 27         get
 28         {
 29             if (_mediaPlayer.GetCurrentState() == MediaPlayerCtrl.MEDIAPLAYER_STATE.PLAYING)
 30             {
 31                 _isPlaying = true;
 32             }
 33             else
 34             {
 35                 _isPlaying = false;
 36             }
 37             return _isPlaying;
 38         }
 39     }
 40     /// <summary>
 41     /// 视频总时长
 42     /// </summary>
 43     public float totalTime
 44     {
 45         get
 46         {
 47             if (isPlaying)
 48             {
 49                 return _mediaPlayer.GetDuration() / 1000;
 50             }
 51             return -1;
 52         }
 53     }
 54     /// <summary>
 55     /// 视频当前播放时长
 56     /// </summary>
 57     public float currentTime
 58     {
 59         get
 60         {
 61             if (isPlaying)
 62             {
 63                 return _mediaPlayer.GetSeekPosition() / 1000;
 64             }
 65             return -1;
 66         }
 67     }
 68     /// <summary>
 69     /// 视频是否循环播放
 70     /// </summary>
 71     public bool isLoop
 72     {
 73         get
 74         {
 75             return _mediaPlayer.m_bLoop;
 76         }
 77         set
 78         {
 79             _mediaPlayer.m_bLoop = value;
 80         }
 81     }
 82 
 83     /// <summary>
 84     /// 读取视频
 85     /// </summary>
 86     /// <param name="_path">视频路径</param>
 87     public void LoadMovie(string _path)
 88     {
 89         _mediaPlayer.Load(_path);
 90     }
 91     /// <summary>
 92     /// 视频播放
 93     /// </summary>
 94     public void MoviePlay()
 95     {
 96         _mediaPlayer.Play();
 97     }
 98     /// <summary>
 99     /// 视频暂停
100     /// </summary>
101     public void MoviePause()
102     {
103         _mediaPlayer.Pause();
104     }
105     /// <summary>
106     /// 视频停止播放。
107     /// 停止与暂停的区别是:停止后,视频会从头开始播放,而暂停是接着暂停的位置播放。
108     /// </summary>
109     public void MovieStop()
110     {
111         _mediaPlayer.Stop();
112     }
113     /// <summary>
114     /// 视频重播
115     /// </summary>
116     public void MovieReplay()
117     {
118         _mediaPlayer.Stop();
119         _mediaPlayer.Play();
120     }
121     /// <summary>
122     /// 设置视频播放速度。
123     /// 这个方法可以用来做快进功能,但是无法做快退功能
124     /// </summary>
125     /// <param name="_i"></param>
126     public void SetMovieSpeed(int _i)
127     {
128         _mediaPlayer.SetSpeed(_i);
129     }
130     /// <summary>
131     /// 视频跳到指定时间播放
132     /// </summary>
133     /// <param name="time"></param>
134     public void MovieToTime(float time)
135     {
136         _mediaPlayer.SeekTo((int)(time * 1000));
137     }
138 }

关于视频的播放进度条的显示,已经通过拉动进度条调整视频播放进度,这些功能我们做一些简单的计算就能实现,很简单,这里就不上代码了。

猜你喜欢

转载自www.cnblogs.com/xiaoyulong/p/9062176.html