1. 程式人生 > >【Unity3d】在Unity3d中播放視訊:AVPro Video的使用

【Unity3d】在Unity3d中播放視訊:AVPro Video的使用

1、外掛介紹

之前講到使用Unity的MoveTexture和Image來實現簡單的播放器,雖然可以實現簡單的視訊播放功能,但是對於商業化或者移動端的專案來說遠遠不夠。RenderHeads提供了一款unity3d使用的具有強大功能的視訊播放外掛,不僅可以實現基礎的播放功能,還能實現進度條拖放和速率調整,播放4K視訊,360度全景視訊等,並對不同的平臺進行了優化。這裡簡單講一下基於UGUI的視訊播放功能。
這裡寫圖片描述

2、建立Media Player物件

將下載的unitypackage匯入工程,匯入後會看到幾個demo和外掛的說明文件AVProVideo-UserManual。詳細的外掛用法包括視訊格式的支援和API在說明文件中都有,這裡先介紹基礎用法,在之後用到更多功能時會進行更新說明。
首先建立Media Player物件。在Hierarchy檢視右擊或者選擇選單欄的GameObject選單,然後選擇AVPro Video->Media Player。
建立Media Player

這裡寫圖片描述
Media Player物件包括基礎設定,Media Properties(視訊的影象和音訊設定),Global Settings(全域性設定),Preview(預覽,只在Play時有效),Events(回撥事件),Platform(多平臺重寫)和About(外掛資訊)。其中我們一般需要進行設定的只有基礎設定和Events。

2.1、基礎設定

基礎設定包括檔案路徑,自動載入播放,迴圈音量等資訊,這些都是一些視訊的基礎屬性,面板上的設定資訊也很易懂。需要注意一下的是Video Location這個選項,外掛會根據Location的位置去查詢相應的資料夾,這裡推薦使用StreamingAssets資料夾,需要在專案的Assets目錄下新建一個StreamingAssets資料夾,然後將視訊拖進去,StreamingAssets中的檔案不會被打包到程式資源包中,而是作為一個獨立的目錄自動生成在輸出的程式目錄的Data目錄下。Recent選項可以快速選擇之前選擇過的檔案,Browse選項可以快速選擇電腦中的檔案。
基礎設定

Video Location

2.2、Events

Events是一個MediaPlayerEvent屬性,繼承了UnityEvent類,使用起來跟UGUI的Button控制元件的event類似,不同的是我們提供的方法需要有三個引數,MediaPlayer、MediaPlayerEvent.EventType和ErrorCode。其中EventType是播放器的一些狀態,有如下幾種:

MetaDataReady:視訊資料準備完成
ReadyToPlay:視訊載入完成,準備播放
Started:視訊開始播放
FirstFrameReady:第一幀渲染完成
FinishedPlaying:非迴圈播放的視訊播放完畢

三個引數都需宣告,但只需要對EventType進行判斷,其餘兩個變數是情況使用。

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;
    }
}

Events

2.3、其他設定

其他的設定一般不需要去更改。這裡簡單介紹一下:

  1. Media Properties:貼圖的過濾、迴圈模式和Aniso level的設定,音訊的立體聲設定等。
  2. Global Settings:顯示當前的開發平臺,可以設定是否受TimeScale影響。
  3. Preview:視訊播放時可以檢視播放情況,包括拖動進度,重播,顯示Alpha通道,檢視當前幀的貼圖,儲存當前幀貼圖等。
  4. PlatForm Overrides:可以重寫相應平臺播放的視訊路徑等。
  5. About:外掛的相關資訊,可以點選這一項中的按鈕快捷跳轉到開發者的網頁。
    這裡寫圖片描述
    其他設定

3、建立AVPro Video物件

在Hierarchy檢視右擊或者選擇選單欄的GameObject選單,然後選擇UI->AVPro Video。
AVPro Video
AVPro Video
然後將剛剛的Media Player物件拖給面板中的Media Player屬性,Default Texture和No Default Display可以設定顯示縮略預覽圖,Keep Aspect Ratio可以選擇是否保持視訊解析度。其他的設定和UGUI的Image類似,不再贅述。
AVPro Video

4、在Text上播放視訊

雖然感覺不是很有用,但是很炫酷的功能。方法很簡單,先建立一個Media Player物件,然後建立一個Text物件,在Text上新增Apply To Material指令碼。建立一個Shader為UI/Default Font-Extra Texture的材質,對Apply To Material進行如下圖所示設定即可:
Apply To Material

5、使用指令碼動態控制播放。

外掛Demo中有一個Demo_VideoControls,包含一個VRC.cs,這個指令碼中有詳細的視訊播放的控制功能,參照這個指令碼就能實現自己想要的控制功能。比如一些常用的功能:

    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();
        }
    }
    // 調節音量
    public void OnAudioVolumeSlider()
    {
        if (_mediaPlayer && _audioVolumeSlider && _audioVolumeSlider.value != _setAudioVolumeSliderValue)
        {
            _mediaPlayer.Control.SetVolume(_audioVolumeSlider.value);
        }
    }
    // 靜音
    public void OnMuteChange()
    {
        if (_mediaPlayer)
        {
            _mediaPlayer.Control.MuteAudio(_MuteToggle.isOn);
        }
    }
    // 拖動進度
    public void OnVideoSeekSlider()
    {
        if (_mediaPlayer && _videoSeekSlider && _videoSeekSlider.value != _setVideoSeekSliderValue)
        {
            _mediaPlayer.Control.Seek(_videoSeekSlider.value * _mediaPlayer.Info.GetDurationMs());
        }
    }

6、外掛效果

播放效果展示:
效果一
官方Apply To Material效果:
效果二

by:蔣志傑

相關推薦

Unity3dUnity3d播放視訊AVPro Video的使用

1、外掛介紹 之前講到使用Unity的MoveTexture和Image來實現簡單的播放器,雖然可以實現簡單的視訊播放功能,但是對於商業化或者移動端的專案來說遠遠不夠。RenderHeads提供了一款unity3d使用的具有強大功能的視訊播放外掛,不僅可以實現

Unity3d的Tcp socket通訊(開源)

轉自:https://blog.csdn.net/hiramtan/article/details/72621787HiSocket_unity如何使用可以從此連結下載最新的unity package: 功能Tcp socketUdp socket可伸縮位元組表高效能位元組塊

Unity3dUGUI小貼士使用不規則按鈕

在平時的遊戲和平面程式開發中,難免會遇到需要使用不規則按鈕的需求,而Unity3d中使用UGUI的Button控制元件只能實現規則的長方形按鈕。不過其實unity的Image提供了一個eventAlphaThreshold的屬性(在5.4以上版本中改為alphaHitTestMinimumThreshold)

實戰Unity3d實戰之Unity3d網路遊戲實戰篇(6)服務端框架的搭建

Unity3d實戰之Unity3d網路遊戲實戰篇(6):服務端框架的搭建 學習書籍《Unity3d網路遊戲實戰》 羅培羽著 機械工業出版社 本文是作者在學習過程中遇到的認為值得記錄的點,

實用JavaScriptVideo使用詳解過程(多視訊列表迴圈播放

做過一個專案裡有用到插入多個視訊類似列表迴圈播放的,視訊資訊是從後臺資料庫傳入的 核心JS程式碼片段 <script type="text/javascript"> var videoArray=new Array(); var relative

C#的兩把雙刃劍抽象類和接口

實例 可維護 對象 為什麽不使用 程序 一定的 代碼 方式 索引 轉:http://www.cnblogs.com/djzxjblogs/p/7587735.html 第一次面試的時候, 面試官問我,抽象類和接口的區別。 本人也是,按照面試寶典上的回答,說了一大堆。

unity3d 在Sphere上播放視訊

播放音訊使用VideoPlayer元件。 首先搭建如下場景,場景中建立一個Sphere. 在Sphere上面新增VideoPlayer元件,並且給VideoClip賦值一個視訊(MP4格式)。 給Sphere新增如下指令碼:     public Button b

Flutter For Android Developers如何在Flutter設計FrameLayout。

此部落格適用於希望應用現有Android知識的Android開發人員使用Flutter構建移動應用程式。在這篇部落格中,我們將探討Flutter中FrameLayout的等效設計小部件。 原文:https://medium.com/flutter-community/flutter-for-an

轉載C# 的委託和事件(詳解簡單易懂的講解) C# 的委託和事件(詳解)

本文轉載自http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html C# 中的委託和事件(詳解) C# 中的委託和事件

Unity3DUnity3D工具、Mono工具、內部指令碼工作原理以及跨平臺特性

Unity3D工具、Mono工具、內部指令碼工作原理以及跨平臺特性 1、幾個概念的理解: Unity3D主要包括兩個部分:Unity Engine和Unity Editor。提供了UnityEngine.dll和UnityEditor.dll兩個動態庫。 Unity En

筆記shiro的session設定

1.匯入依賴包<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-guartz</artifactId><version>

unity3dunity3d第一個專案

 開啟unity3d之後,進入如下場景 點選new之後新建一個專案,如果是要開啟原來已經存在的檔案,則應該點選open 第一個是輸入projectname,也就是專案名稱,locaton也就是專案儲存的路徑,需要安放在預先建立的資料夾裡面,第三個不用去管,然後在左

筆記shiro的RememberMe設定

修改spring-shiro.xml檔案<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"><property name="name" value="m

Unity3D Shader 新手教程(5/6) —— Bumped Diffuse Shader

動機 如果你滿足以下條件,我建議你閱讀這篇教程: 你想學習片段著色器(Fragment Shader)。你想實現複雜的多通道著色器(multipass),但是對其不是很瞭解。你想使用上面提到的兩種技術(片段著色器和多Pass)來實現描邊效果的Toon shader,你就

C++用結構體完成程式設計求出3個學生某個學生的平均成績

//用結構體完成:程式設計求出3個學生中某個學生的平均成績 #include <iostream> #include <string.h> using namespace st

JavaScript10.解決chplayer視訊播放器在本地能載入視訊,放到伺服器上載入視訊失敗的問題

 最近除錯一個視訊播放器鬱悶了自己好長時間,上傳了flv或者MP4檔案到伺服器,可輸入正確地址通過http協議來訪問總是出現“載入視訊失敗!”這就表明MP4格式檔案是伺服器無法識別的,其實這是沒有在II

debugvs2013定義的全域性變數count在使用時提示“不明確的符號”

今天用vs2013編寫程式時遇到以下這麼一個bug 提示錯誤資訊:count:不明確的符號,,count明明定義為全域性變數,怎麼成為不明確的符號了呢??百思不得其解 查閱資料找到了答案:名稱空間s

NPRUnity3D非真實感渲染----鉛筆畫濾鏡

寫在前面 實現思維描述      鉛筆 素描,是一種以樸素的方式去描繪客觀事物,並且通常以單色的筆觸及點、線、面來塑造形體的方法。從字面而言,素描可以被理解為單色畫。廣義而言,它是一種運用線

unity3d在android上播放視訊及remote的使用

我覺得大家可以多看看unity的使用者手冊,瞭解各個平臺的特性,我主要看了一下android的。大家去聖典裡面看吧http://game.ceeger.com/Manual/。 1. android不支援unity3d的movie texture,不過可以用iPhoneUt

Unityunity3d FingerGestures 單點 多點觸控 手勢

FingerGestures最大的好處就是結合unity3d進行多點觸控,手勢識別,編寫一次程式碼 ,通過配置來進行多平臺釋出 FingerGestures提供了3種不同的方法來檢測由使用者執行的拖動手勢。 方法1:使用預設的手勢事件 每個手指的手勢事件:為每個單獨的手