1. 程式人生 > >關於Unity視頻播放器插件 AVPro Video(一)平面UI視頻播放

關於Unity視頻播放器插件 AVPro Video(一)平面UI視頻播放

omv image 電腦配置 trigger alt -m sys avi provide

1.官網下載該插件或者我分享的鏈接:

鏈接:https://pan.baidu.com/s/1boGeJ8r 密碼:mvbf 2.新建項目導入資源,添加以下遊戲物體與UI到場景中 技術分享圖片

3.此處先建立一個Canvas再創建 技術分享圖片

技術分享圖片

4.將創建好的MediaPlayer組件拖入 技術分享圖片

技術分享圖片

5.根據自定義腳本持有該組件,控制該組件面板上的屬性來間接控制視屏的播放 技術分享圖片

技術分享圖片

技術分享圖片

6.根據自定義的腳本創建自定義的開關,滾動條等顯示UI 技術分享圖片

7.常用的實現功能腳本如下
  1 /*************************************************
  2  * 項目名稱:Unity實現視頻播放功能
3 * 腳本創建人:魔卡 4 * 腳本創建時間:2017.12.21 5 * 腳本功能:控制視頻播放類 6 * ***********************************************/ 7 using System.Collections; 8 using System.Collections.Generic; 9 using RenderHeads.Media.AVProVideo; 10 using UnityEngine; 11 using UnityEngine.UI; 12 13 //控制視頻播放類 14 public class
VideoController : MonoBehaviour 15 { 16 //持有控制視頻播放的組件 17 public MediaPlayer mediaPlayer; 18 19 //持有播放暫停切換開關 20 public Toggle m_videoToggle; 21 22 //持有是否循環播放開關 23 public Toggle m_loopToggle; 24 25 //持有控制播放速度滾動條 26 public Slider m_playSpeedSlider; 27 //持有控制播放速度的下拉列表
28 public Dropdown m_playSpeedDropdown; 29 30 //持有控制視頻播放進度的進度條 31 public Slider m_processSlider; 32 33 //持有顯示當前播放與總播放的時間顯示 34 public Text m_videoTimeTex; 35 36 //持有返回幾秒前按鈕 37 public Button m_backSecondsBtn; 38 //設置每次點擊返回的秒數 39 private float m_backSeconds = 3f; 40 41 //持有控制音量的Slider 42 public Slider m_volumeSlider; 43 //持有靜音開關 44 public Toggle m_muteToggle; 45 //存儲靜音狀態前用戶設置的音量 46 private float m_customVolume; 47 48 void Awake() 49 { 50 //初始化 51 //註冊播放暫停開關事件 52 m_videoToggle.onValueChanged.AddListener(DoPlayOrPause); 53 //註冊是否循環播放開關事件 54 m_loopToggle.onValueChanged.AddListener(DoSetLoop); 55 //註冊控制速度的滾動天觸發事件 56 m_playSpeedSlider.onValueChanged.AddListener(DoChangeSpeed); 57 58 //添加下拉列表選項 59 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+4")); 60 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+3")); 61 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+2")); 62 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+1")); 63 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+0")); 64 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-1")); 65 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-2")); 66 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-3")); 67 m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-4")); 68 //設置初始速度顯示值 69 m_playSpeedDropdown.value = 3; 70 m_playSpeedDropdown.captionText.text = m_playSpeedDropdown.options[3].text; 71 //註冊控制速度的下拉列表觸發事件 72 m_playSpeedDropdown.onValueChanged.AddListener(DoChangeSpeed); 73 74 //註冊視頻播放進度條值改變觸發事件 75 m_processSlider.onValueChanged.AddListener(OnProcessSliderChange); 76 77 //註冊返回1幾秒前按鈕觸發事件 78 m_backSecondsBtn.onClick.AddListener(OnBackSecondsClick); 79 80 //註冊音量Slider事件 81 m_volumeSlider.onValueChanged.AddListener(OnVolumeSliderChange); 82 //註冊靜音開關事件 83 m_muteToggle.onValueChanged.AddListener(OnMuteToggleClick); 84 85 //註冊視頻播放觸發事件 86 mediaPlayer.Events.AddListener(MediaEventHandler); 87 } 88 89 /// <summary> 90 /// 視頻播放時間觸發 91 /// </summary> 92 /// <param name="arg0"></param> 93 /// <param name="arg1"></param> 94 /// <param name="arg2"></param> 95 private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2) 96 { 97 switch (arg1) 98 { 99 case MediaPlayerEvent .EventType .Closing : 100 Debug.Log("關閉播放器觸發"); 101 break; 102 case MediaPlayerEvent .EventType .Error : 103 Debug.Log("報錯誤時觸發"); 104 break; 105 case MediaPlayerEvent .EventType .FinishedPlaying ://註意:如果視頻設置為循環播放模式,則不觸發此項 106 Debug.Log("播放完成觸發"); 107 break; 108 case MediaPlayerEvent .EventType .FirstFrameReady : 109 Debug.Log("準備完觸發"); 110 break; 111 case MediaPlayerEvent.EventType.MetaDataReady: 112 Debug.Log("媒體數據準備準備中觸發"); 113 break; 114 case MediaPlayerEvent .EventType .ReadyToPlay : 115 Debug.Log("準備去播放觸發"); 116 break; 117 case MediaPlayerEvent .EventType .Started ://註意:每暫停之後的開始播放都會觸發一次 118 Debug.Log("開始播放觸發"); 119 break; 120 default : 121 Debug.Assert(false); 122 break; 123 } 124 } 125 126 void Start () 127 { 128 LoadVideo(); 129 130 //初始化觸發一次(同步聲音大小) 131 OnVolumeSliderChange(m_volumeSlider .value); 132 } 133 134 void Update() 135 { 136 //時刻更新播放進度方法 137 DoUpdateVideoProcess(); 138 139 //時刻更新播放時間顯示方法 140 UpdateTimeText(); 141 } 142 143 /// <summary> 144 /// 加載視頻方法 145 /// </summary> 146 void LoadVideo() 147 { 148 //通過插件中的方法加載(參數為:1.加載路徑格式(與面板上相對應)2.加載的文件名 3.默認是否開始播放) 149 mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, "BigBuckBunny_360p30.mp4", false); 150 } 151 /// <summary> 152 /// 播放與暫停開關點擊觸發 153 /// </summary> 154 /// <param name="s_isOn"></param> 155 void DoPlayOrPause(bool s_isOn) 156 { 157 //如果播放,開始播放並文字顯示“播放” 158 if (s_isOn) 159 { 160 //通過持有的MediaPlayer類進行操控 161 mediaPlayer.Control.Play(); 162 //更改播放開關顯示的文字 163 m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "暫停"; 164 } 165 //否則,暫停 166 else 167 { 168 mediaPlayer.Control.Pause(); 169 //更改播放開關顯示的文字 170 m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "播放"; 171 } 172 } 173 /// <summary> 174 /// 是否循環播放開關點擊觸發 175 /// </summary> 176 /// <param name="s_isOn"></param> 177 void DoSetLoop(bool s_isOn) 178 { 179 //通過持有的MediaPlayer類進行操控 180 mediaPlayer.Control.SetLooping(s_isOn); 181 } 182 /// <summary> 183 /// 改變播放速度方法(正的加速放映,負的倒放映) 184 /// </summary> 185 void DoChangeSpeed(float s_speed)//滑動條數值 186 { 187 //有部分瑕疵(正序倒序放調節過快反應會遲緩,與電腦配置有關) 188 mediaPlayer.Control.SetPlaybackRate(s_speed); 189 } 190 /// <summary> 191 /// 改變播放速度方法(正的加速放映,負的倒放映) 192 /// </summary> 193 void DoChangeSpeed(int s_speed)//下拉列表對應索引值 194 { 195 int tSpeed = 1; 196 switch (s_speed) 197 { 198 case 0: 199 tSpeed = 4; 200 break; 201 case 1: 202 tSpeed = 3; 203 break; 204 case 2: 205 tSpeed = 2; 206 break; 207 case 3: 208 tSpeed = 1; 209 break; 210 case 4: 211 tSpeed = 0; 212 break; 213 case 5: 214 tSpeed = -1; 215 break; 216 case 6: 217 tSpeed = -2; 218 break; 219 case 7: 220 tSpeed = -3; 221 break; 222 case 8: 223 tSpeed = -4; 224 break; 225 default : 226 Debug.Assert(false); 227 break; 228 } 229 //有部分瑕疵(正序倒序放調節過快反應會遲緩,與電腦配置有關) 230 mediaPlayer.Control.SetPlaybackRate(tSpeed); 231 } 232 233 /// <summary> 234 /// 時刻更新視頻進度到滑動條上 235 /// </summary> 236 void DoUpdateVideoProcess() 237 { 238 //獲取當前播放時長 239 float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs(); 240 //獲取視頻總長度 241 float tVideoTime = mediaPlayer.Info.GetDurationMs(); 242 //計算出對應的播放進度賦值給顯示播放進度的進度條 243 m_processSlider.value = tCurrentTime/tVideoTime; 244 } 245 246 /// <summary> 247 /// 更新播放進度的時間顯示 248 /// </summary> 249 void UpdateTimeText() 250 { 251 //對當前播放時間轉換時間格式 252 //轉化為 秒 253 int tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTimeMs()/1000; 254 //獲取當前分數 255 int tCurrentMin = tCurrentSeconds/60; 256 //重新賦值剩余多少秒 257 tCurrentSeconds = tCurrentSeconds%60; 258 string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString(); 259 260 //對總時間轉化時間格式 261 //轉化為秒 262 int tVideoTimeSeconds = (int) mediaPlayer.Info.GetDurationMs()/1000; 263 //獲取總的分數 264 int tVideoTimeMin = tVideoTimeSeconds/60; 265 //重新復制剩余多少秒 266 tVideoTimeSeconds = tVideoTimeSeconds%60; 267 string tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString(); 268 269 //拼接一下時間顯示字符串 270 string tTime = string.Format("<color=red>{0}:{1}/{2}:{3}</color>", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr); 271 //string tTime = string.Format("<b>{0}:{1}/{2}:{3}</b>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds); 272 //string tTime = string.Format("<i>{0}:{1}/{2}:{3}</i>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds); 273 274 m_videoTimeTex.text = tTime ;; 275 } 276 277 /// <summary> 278 /// 視頻播放進度條值改變觸發 279 /// </summary> 280 /// <param name="value"></param> 281 void OnProcessSliderChange(float value) 282 { 283 //獲取視頻總長度 284 float tVideoTime = mediaPlayer.Info.GetDurationMs(); 285 //當前視頻的時間 286 float tCurrentTime = m_processSlider.value*tVideoTime; 287 //將視頻時間調到對應的節點 288 mediaPlayer.Control.Seek(tCurrentTime); 289 } 290 291 292 /// <summary> 293 /// 播放進度條開始拖動觸發(EventTrigger觸發) 294 /// </summary> 295 public void OnProcessSliderDragBegin() 296 { 297 //暫停播放 298 mediaPlayer.Control.Pause(); 299 } 300 301 /// <summary> 302 /// 播放進度條結束拖動觸發(EventTrigger觸發) 303 /// </summary> 304 public void OnProcessSliderDragEnd() 305 { 306 //開始播放 307 mediaPlayer.Control.Play(); 308 } 309 310 311 /// <summary> 312 /// 返回到幾秒之前方法 313 /// </summary> 314 void OnBackSecondsClick() 315 { 316 //獲取當前播放進度時間 317 float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs(); 318 319 //10s前進度時間(如果存在前十秒則退,不存在還是當前時間進度) 320 tCurrentTime = (tCurrentTime - m_backSeconds * 1000) >= 0 ? tCurrentTime - m_backSeconds*1000 : tCurrentTime; 321 322 //設置進度時間 323 mediaPlayer.Control.Seek(tCurrentTime); 324 } 325 326 /// <summary> 327 /// 音量進度條改變觸發 328 /// </summary> 329 /// <param name="value"></param> 330 void OnVolumeSliderChange(float value) 331 { 332 //保存當前已經設置的音量 333 if (value != 0) 334 { 335 m_customVolume = m_volumeSlider.value; 336 } 337 //設置音量 338 mediaPlayer.Control.SetVolume(value); 339 //如果音量手動調節到零,則將靜音模式打開 340 if (value > 0) 341 { 342 m_muteToggle.isOn = false; 343 } 344 else 345 { 346 m_muteToggle.isOn = true; 347 } 348 } 349 350 /// <summary> 351 /// 靜音開關觸發 352 /// </summary> 353 /// <param name="s_isOn"></param> 354 void OnMuteToggleClick(bool s_isOn) 355 { 356 //如果靜音 357 if (s_isOn) 358 { 359 //設置靜音 360 m_volumeSlider.value = 0; 361 mediaPlayer.Control.SetVolume(0); 362 } 363 //不靜音 364 else 365 { 366 m_volumeSlider.value = m_customVolume; 367 mediaPlayer.Control.SetVolume(m_customVolume); 368 } 369 } 370 }

技術分享圖片

關於Unity視頻播放器插件 AVPro Video(一)平面UI視頻播放