天天看點

Unity播放視訊

Unity視訊播放

Unity視訊簡單介紹(代碼在最下方)

1、在遊戲開發和VR開發中我們常常會用到播放視訊的要求

比如:遊戲開始時通過視訊來交代遊戲的背景;劇情觸發 時通過視訊來表現劇情發展。

2、目前主流的視訊播放器VideoPlayer元件;第三方插件AVPro Video(VideoPlayer元件幾乎能夠滿足我們日常開發中所有的視訊播放)

一、視訊格式和編解碼器(視訊的格式和編解碼器會影響Unity在不同平台是否能正常播放視訊)

1、視訊檔案的本質

視訊檔案的本質上就是一個”資料容器“它不僅僅可以包含視訊資料本身它還包含

  1. 音頻
  2. 字幕
  3. 軌道資訊(軌道還可以有很多,比如不同語言的字幕,不同語言的音頻)

    2、視訊檔案的格式

    比如:.mp4、.mov、.avi、.webm等(這些不同格式的視訊差別就是存讀資料的方式方法不同而已)

    Unity播放視訊

    3、視訊的編碼器和解碼器

    我們了解到視訊的本質就是一堆資料的集合,為了節省帶寬和存儲空間,視訊中每個軌道(不同的音頻、字幕等等資訊)都使用”編解碼器“進行編碼和解碼

    編碼器:負責壓縮資料,節約空間。

    解碼器:負責解壓資料,解壓後才能播放

    常見的視訊編解碼格式為H.264

    常見的音頻編解碼格式為AAC

    4、硬體解碼

    目前大多數的裝置都有專用于解碼視訊的硬體,一般由GPU(圖形處理器,顯示卡的核心硬體)來進行硬體解碼。

    優點:使用GPU進行硬體解碼可以降低CPU的工作負荷,降低功耗,節省電量,節省性能。缺點:無法支援所有的視訊格式檔案,畫質不是特别清除(Unity會自己幫助我們判斷來進行硬體解碼)

    5、軟體解碼

    優點:能夠解碼所有視訊格式檔案,畫質更加清晰

    缺點:增加CPU工作負荷,更耗電,解碼時會造成明顯的卡頓

    6、Unity中的視訊相容性

    Unity播放視訊
    保險搭配方式:MP4格式 + H.264或VP8編解碼器,可以在大多數的作業系統上正常播放(能用H.265就用H.265)

Unity使用視訊

1、參數介紹

Unity播放視訊

2、如何添加Video Player元件

方法一:在Hierarchy視窗點選加号,選擇Video > Video Player

方法二:選擇場景上任何一個對象,為其添加Video Player元件

方法三:直接将視訊檔案托入到Hierarchy視窗中

3、Video Player元件介紹

Unity播放視訊
Unity播放視訊
Unity播放視訊

4、通過代碼播放視訊

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class Exercises : MonoBehaviour
{
    public Slider slider;
    public VideoPlayer video;
    private bool isOver;
    public Button btn;
    public Sprite play;
    public Sprite pause;
    //結合UGUI 制作一個視訊播放的進度條 我們可以通過進度條控制視訊播放的時間
    // Start is called before the first frame update
    void Start()
    {
       
        slider.onValueChanged.AddListener((value) =>
        {
            //通過總時長來控制播放時間
            video.time = video.length * value; 
        });
        //避免視訊還沒有播放 就拖動進度條
        slider.interactable = false;

        //準備視訊資料
        video.Prepare();

        video.prepareCompleted += (v) =>
        {
            //準備完成後  播放
            video.Play();
            isOver = true;
            if(isOver)
            {
                btn.image.sprite = play;
            }
            //點選按鈕的時候
            btn.onClick.AddListener(() =>
            {
                if(isOver)
                {
                    btn.image.sprite = pause;
                    isOver = false;
                    video.Pause();
                }
                else
                {
                    btn.image.sprite = play;
                    video.Play();
                    isOver = true;
                }
            });
            slider.interactable = true;
        };
    }

    // Update is called once per frame
    void Update()
    {
        //一定是進度條可以被拖動 再更新進度
        if(slider.interactable)
        {
            slider.value = (float)(video.time / video.length);
        }
    }
}

           
Unity播放視訊

繼續閱讀