視頻有三個參數(shù)需要注意,碼率、幀率、分辨率。因為這三者是關(guān)系到最后視頻貼圖貼在材質(zhì)上的播放的清晰度和流暢度的問題。畢竟,在VR設(shè)備中,刷新幀率至少要大于60幀才不會讓人覺得眩暈,但視頻的清晰度直接影響了刷新率的大小,所以如何在兩者中找到一個平衡點。
一、Media Player對象
將下載的unitypackage導(dǎo)入工程,導(dǎo)入后會看到幾個demo和插件的說明文檔AVPRoVideo-UserManual。詳細(xì)的插件用法包括視頻格式的支持和API在說明文檔中都有,這里先介紹基礎(chǔ)用法,在之后用到更多功能時會進(jìn)行更新說明。 首先創(chuàng)建Media Player對象。在Hierarchy視圖右擊或者選擇菜單欄的GameObject菜單,然后選擇AVPro Video->Media Player。
參數(shù)及基本屬性
基礎(chǔ)設(shè)置包括文件路徑,自動加載播放,循環(huán)音量等信息,這些都是一些視頻的基礎(chǔ)屬性,面板上的設(shè)置信息也很易懂。需要注意一下的是Video Location這個選項,插件會根據(jù)Location的位置去查找相應(yīng)的文件夾,這里推薦使用StreamingAssets文件夾,需要在項目的Assets目錄下新建一個StreamingAssets文件夾,然后將視頻拖進(jìn)去,StreamingAssets中的文件不會被打包到程序資源包中,而是作為一個獨立的目錄自動生成在輸出的程序目錄的Data目錄下。Recent選項可以快速選擇之前選擇過的文件,Browse選項可以快速選擇電腦中的文件。
Events
Events是一個MediaPlayerEvent屬性,繼承了UnityEvent類,使用起來跟UGUI的Button控件的event類似,不同的是我們提供的方法需要有三個參數(shù),MediaPlayer、MediaPlayerEvent.EventType和ErrorCode。其中EventType是播放器的一些狀態(tài),有如下幾種
***MetaDataReady:視頻數(shù)據(jù)準(zhǔn)備完成 ***
ReadyToPlay:視頻加載完成,準(zhǔn)備播放
***Started:視頻開始播放 ***
***FirstFrameReady:第一幀渲染完成 ***
FinishedPlaying:非循環(huán)播放的視頻播放完畢
三個參數(shù)都需聲明,但只需要對EventType進(jìn)行判斷,其余兩個變量是情況使用。
public void OnVideoEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode er)
{
switch (et)
{
case MediaPlayerEvent.EventType.ReadyToPlay:
Debug.Log("ReadyToPlay");
break;
case MediaPlayerEvent.EventType.FirstFrameReady:
Debug.Log("First frame ready");
break;
case MediaPlayerEvent.EventType.FinishedPlaying:
Debug.Log("Finished"); break; }
}
其他設(shè)置
Media Properties:貼圖的過濾、循環(huán)模式和Aniso level的設(shè)置,音頻的立體聲設(shè)置等。
*** Global Settings:***顯示當(dāng)前的開發(fā)平臺,可以設(shè)置是否受TimeScale影響。
Preview:視頻播放時可以查看播放情況,包括拖動進(jìn)度,重播,顯示Alpha通道,查看當(dāng)前幀的貼圖,保存當(dāng)前幀貼圖等。
PlatForm Overrides:可以重寫相應(yīng)平臺播放的視頻路徑等。
About:插件的相關(guān)信息,可以點擊這一項中的按鈕快捷跳轉(zhuǎn)到開發(fā)者的網(wǎng)
創(chuàng)建AVPro Video UGUI
使用腳本動態(tài)控制播放
插件Demo中有一個Demo_VideoControls,包含一個VRC.cs,這個腳本中有詳細(xì)的視頻播放的控制功能,參照這個腳本就能實現(xiàn)自己想要的控制功能。比如一些常用的功能:
public MediaPlayer _mediaPlayer;
// 播放
public void OnPlayButton() {
if( _mediaPlayer ) {
_mediaPlayer.Control.Play();
}
}
// 暫停
public void OnPauseButton() {
if( _mediaPlayer ) {
_mediaPlayer.Control.Pause();
}
}
// 重播
public void OnRewindButton() {
if( _mediaPlayer ) {
_mediaPlayer.Control.Rewind();
}
}
// 調(diào)節(jié)音量
public void OnAudioVolumeSlider() {
if (_mediaPlayer && _audioVolumeSlider && _audioVolumeSlider.value != _setAudioVolumeSliderValue) {
_mediaPlayer.Control.SetVolume(_audioVolumeSlider.value);
}
}
// 靜音
public void OnMuteChange() { if (_mediaPlayer) {
_mediaPlayer.Control.MuteAudio(_MuteToggle.isOn);
}
}
// 拖動進(jìn)度
public void OnVideoSeekSlider() {
if (_mediaPlayer && _videoSeekSlider && _videoSeekSlider.value!= _setVideoSeekSliderValue) {
_mediaPlayer.Control.Seek(_videoSeekSlider.value * _mediaPlayer.Info.GetDurationMs());
}
}
提示:如360度視頻是不能顯示手柄需要在Camera (eye)里面修改參數(shù),如下圖就能顯示手柄