1. 程式人生 > >Unity3D使用EasyMovieTexture插件播放視頻

Unity3D使用EasyMovieTexture插件播放視頻

target gin cti system ont mat api public auto

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 }

關於視頻的播放進度條的顯示,已經通過拉動進度條調整視頻播放進度,這些功能我們做一些簡單的計算就能實現,很簡單,這裏就不上代碼了。

Unity3D使用EasyMovieTexture插件播放視頻