EasyMovieTexture插件使用教學(xué)

這里我用UGUI做了一個簡單的視頻播放器界面,界面就如下所示

:所寫腳本如下

using UnityEngine; ?

using System.Collections; ?

using UnityEngine.UI; ?


public class PlayMovie : MonoBehaviour ?

{ ?

public Text totalTime; ?

public Text movieTime; ?

public Slider movieSlider; ?

public Material renderMaterial; ?

public int movieSpeed = 1000; ?


private MediaPlayerCtrl mediaPlayerCtrl; ?

private RawImage movieRawImage; ?

private Vector2 reducteOffsetMax; ?

private bool isFinish = false; ?

private bool isPlay = false; ?

private bool isCtrlMovie = false; ?

private int fastbackTemp = 0; ?

private int totaltime = 0;?

//記錄視頻播放器的大小位置

Vector2 maxOffsetTextrue;

Vector2 minOffsetTextrue;

void Start () { ?

Init(); ?

mediaPlayerCtrl.OnEnd += OnEnd; ?

maxOffsetTextrue = movieRawImage.rectTransform.offsetMax;

minOffsetTextrue = movieRawImage.rectTransform.offsetMin;

} ?


/// 初始化函數(shù) ?

public void Init() ?

{ ?

mediaPlayerCtrl = this.transform.GetComponent<MediaPlayerCtrl>(); ?

movieRawImage = this.transform.GetComponent<RawImage>(); ?

mediaPlayerCtrl.m_bAutoPlay = false; ?

if (movieRawImage.material == null) ?

movieRawImage.material = renderMaterial; ?

reducteOffsetMax = movieRawImage.rectTransform.offsetMax; ?

} ?


// Update is called once per frame ?

void Update () ?

{ ?

UpdateMovieSlider(); ?

UpdateMovieTime(); ?

UpdateTotalTime(); ?

} ?


// 更新視頻進度條 ?

public void UpdateMovieSlider() ?

{ ?

if (mediaPlayerCtrl.GetSeekPosition() != 0 && !isCtrlMovie) ?

{ ?

float slider = (float) mediaPlayerCtrl.GetSeekPosition()/(float) mediaPlayerCtrl.GetDuration(); ?

movieSlider.value = slider; ?

} ?

} ?


// 更新視頻總時間 ?

public void UpdateTotalTime() ?

{ ?

if (this.totalTime.text != null && isPlay) ?

{ ?

if (totaltime != mediaPlayerCtrl.GetDuration() / 1000) ?

{ ?

totaltime = mediaPlayerCtrl.GetDuration() / 1000; ?

int min = totaltime / 60; ?

int seconds = totaltime - min * 60; ?

// this.totalTime.text = min + ":" + seconds; ?

if (min<=9||seconds<=9) {

if (min<=9&&seconds<=9) {

this.totalTime.text = "0"+min + ":" + "0"+ seconds;

}

if (min<=9&&seconds>=10) {

this.totalTime.text = "0"+min + ":" + seconds;

}

if (min>=10&&seconds<=-9) {

this.totalTime.text =min + ":" + "0"+ seconds;

}


} else if (min>=10&&seconds>=10) {

this.totalTime.text = min + ":" + ?seconds;

}

} ?

} ??

} ?

//更新視頻時間 ?

public void UpdateMovieTime() ?

{ ?

if (this.movieTime.text != null && isPlay) ?

{ ?

int movieTime = mediaPlayerCtrl.GetSeekPosition() / 1000; ?

int min = movieTime / 60;?

int seconds = movieTime - min * 60;

if (min<=9||seconds<=9) {

if (min<=9&&seconds<=9) {

this.movieTime.text = "0"+min + ":" + "0"+ seconds;

}

if (min<=9&&seconds>=10) {

this.movieTime.text = "0"+min + ":" + seconds;

}

if (min>=10&&seconds<=9) {

this.movieTime.text =min + ":" + "0"+ seconds;

}


} else if (min>=10&&seconds>=10) {

this.movieTime.text = min + ":" + ?seconds;

}

} ?

} ?


// 視頻播放 ?

public void MoviePlay() ?

{ ?

mediaPlayerCtrl.Play(); ?

isPlay = true; ?

isFinish = false; ?

} ?


// 視頻暫停 ?

public void MoviePause() ?

{ ?

isPlay = false; ?

mediaPlayerCtrl.Pause(); ?

} ?


// 視頻停止 ?

public void MovieStop() ?

{ ?

isPlay = false; ?

mediaPlayerCtrl.Stop(); ?

} ?


// 讀取視頻 ?

// namePtah讀取視頻的路徑

public void MovieLoad(string namePtah) ?

{ ?

mediaPlayerCtrl.Load(namePtah); ?

mediaPlayerCtrl.m_bAutoPlay = false; ?

isPlay = false; ?

isFinish = false; ?

} ?


// 視頻設(shè)置循環(huán)播放 ?

public void MovieLoop() ?

{ ?

mediaPlayerCtrl.m_bLoop = !mediaPlayerCtrl.m_bLoop; ?

} ?

/// 視頻全屏顯示 ?

public void OnClickFullScreen() ?

{ ?

if (!mediaPlayerCtrl.m_bFullScreen) ?

{ ?

mediaPlayerCtrl.m_bFullScreen = true; ?

movieRawImage.rectTransform.offsetMax = new Vector2(0, 0); ?

movieRawImage.rectTransform.offsetMin = -new Vector2(0, 0); ?

} ?

else ?

{ ?

mediaPlayerCtrl.m_bFullScreen = false; ?

movieRawImage.rectTransform.offsetMax = maxOffsetTextrue;

movieRawImage.rectTransform.offsetMin = minOffsetTextrue; ?

} ? ??

} ?

// 關(guān)閉視頻界面 ?

public void OnClickClose() ?

{ ?

mediaPlayerCtrl.Stop(); ?

movieRawImage.gameObject.SetActive(false); ?

} ?

/// 移動視頻進度條 ?

public void OnDragSlider() ?

{ ?

if (!isPlay) ?

return; ?

int seekPos = (int)(movieSlider.value * mediaPlayerCtrl.GetDuration()); ?

mediaPlayerCtrl.SeekTo(seekPos); ?

} ?

// 按下視頻進度條 ?

public void OnPoniterDownSlider() ?

{ ?

if (!isPlay) ?

return; ?

isCtrlMovie = true; ?

??} ?

/// 彈起視頻進度條 ?

public void OnPoniterUpSlider() ?

{ ?

if(!isPlay) ?

return; ?

int seekPos = (int)(movieSlider.value * mediaPlayerCtrl.GetDuration()); ?

mediaPlayerCtrl.SeekTo(seekPos);

isCtrlMovie = false;?

} ?

public bool GetIsFullScreen() ?

{ ?

return mediaPlayerCtrl.m_bFullScreen; ?

} ?

public bool GetIsLoop() ?

{ ?

return mediaPlayerCtrl.m_bLoop; ?

} ?

void OnEnd() ?

{ ?

isFinish = true; ?

} ?

} ?

將該腳本和Media Player Ctrl腳本放到RawImage組建里面,其中圖中的test.mp4為本地視頻,放在StreamingAssets文件夾下,可以寫想要播放的視頻鏈接地址,接著我們要在要改改RawImage的錨點設(shè)置,改成全屏自動拉伸的錨點。如圖:


然后我們?yōu)镾lider組件添加事件監(jiān)聽器,用來控制視頻的快進和倒退,詳細的如圖所示:

大家將一些按鈕點擊事件綁定好后,一個視頻播放器就OK了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,906評論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評論 18 399
  • scheduler定時調(diào)度系統(tǒng)是大多行業(yè)項目都需要的,傳統(tǒng)的spring-job模式,個人感覺已經(jīng)out了,因為存...
    安琪拉_4b7e閱讀 2,961評論 4 6
  • 昏黃的路燈下 冒著細雨 一個人狂奔 側(cè)身的車輛呼嘯而過 雨水打在臉上 淋在身上 也落在了心里 我想,我是真的累了 ...
    紅塵多擾閱讀 286評論 1 1

友情鏈接更多精彩內(nèi)容