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