国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用unity插件AVProVideo制作一個視頻播放器

這篇具有很好參考價(jià)值的文章主要介紹了用unity插件AVProVideo制作一個視頻播放器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一:界面展示

avpro插件,unity,c#,學(xué)習(xí),Powered by 金山文檔

功能鍵有:播放/暫停,是否循環(huán)播放,音量控制,倍速控制,視頻切換,后退前進(jìn),顯示時間。

二:unity面板

avpro插件,unity,c#,學(xué)習(xí),Powered by 金山文檔

將對應(yīng)內(nèi)容拖到對應(yīng)位置即可。

三:代碼

using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class VideoController : MonoBehaviour
{
  
     //持有控制視頻播放的組件
     public MediaPlayer mediaPlayer;
 
     //持有播放暫停切換開關(guān)
     public Toggle m_videoToggle;
 
     //持有是否循環(huán)播放開關(guān)
     public Toggle m_loopToggle;
 
     //持有控制播放速度的下拉列表
     public Dropdown m_playSpeedDropdown;
 
     //持有控制視頻播放進(jìn)度的進(jìn)度條
     public Slider m_processSlider;
 
     //持有顯示當(dāng)前播放與總播放的時間顯示
     public Text m_videoTimeTex;
 
     //持有返回幾秒前按鈕
     public Button m_backSecondsBtn;
     //設(shè)置每次點(diǎn)擊返回的秒數(shù)
     private float m_backSeconds = 3f;
 
     //持有控制音量的Slider
     public Slider m_volumeSlider;
     //持有靜音開關(guān)
     public Toggle m_muteToggle;
     //存儲靜音狀態(tài)前用戶設(shè)置的音量
     private float m_customVolume;

    //切換為上一個視頻,下一個視頻
    public Button lastBtn;  
    public Button nextBtn;

    [Header("視頻名稱")]
    string[] VideoNames;

    //初始化
    void Awake()
     {
        //視頻名稱的路徑
        VideoNames = File.ReadAllLines(Application.streamingAssetsPath + "/name.txt");

        #region 事件監(jiān)聽
        //注冊播放暫停開關(guān)事件
        m_videoToggle.onValueChanged.AddListener(DoPlayOrPause);
         //注冊是否循環(huán)播放開關(guān)事件
         m_loopToggle.onValueChanged.AddListener(DoSetLoop);
         //注冊控制速度的滾動天觸發(fā)事件
        
         //添加下拉列表選項(xiàng)
         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "2倍速"));
         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "1.5倍速"));
         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "1倍速"));
         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "0.5倍"));

         //設(shè)置初始速度顯示值,默認(rèn)為1倍速
         m_playSpeedDropdown.value = 2;
         m_playSpeedDropdown.captionText.text = m_playSpeedDropdown.options[2].text;

         //注冊控制速度的下拉列表觸發(fā)事件
         m_playSpeedDropdown.onValueChanged.AddListener(DoChangeSpeed);
 
         //注冊視頻播放進(jìn)度條值改變觸發(fā)事件
         m_processSlider.onValueChanged.AddListener(OnProcessSliderChange);
 
         //注冊返回n幾秒前按鈕觸發(fā)事件
         m_backSecondsBtn.onClick.AddListener(OnBackSecondsClick);
 
         //注冊音量Slider事件
         m_volumeSlider.onValueChanged.AddListener(OnVolumeSliderChange);
         //注冊靜音開關(guān)事件
         m_muteToggle.onValueChanged.AddListener(OnMuteToggleClick);
 
         //注冊視頻播放觸發(fā)事件
         mediaPlayer.Events.AddListener(MediaEventHandler);

        //上一個按鈕監(jiān)聽
        lastBtn.onClick.AddListener(LastVideo);
        //下一個按鈕監(jiān)聽
        nextBtn.onClick.AddListener(NextVideo);
        #endregion
    }

    // 視頻播放時間觸發(fā)
    private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
     {
         switch (arg1)
         {
             case MediaPlayerEvent .EventType .Closing :
                 Debug.Log("關(guān)閉播放器觸發(fā)");
                 break;
             case MediaPlayerEvent .EventType .Error :
                 Debug.Log("報(bào)錯誤時觸發(fā)");
                 break;
             case MediaPlayerEvent .EventType .FinishedPlaying ://注意:如果視頻設(shè)置為循環(huán)播放模式,則不觸發(fā)此項(xiàng)
                 Debug.Log("播放完成觸發(fā)");
                 break;
             case MediaPlayerEvent .EventType .FirstFrameReady :
                 Debug.Log("準(zhǔn)備完觸發(fā)");
                 break;
             case MediaPlayerEvent.EventType.MetaDataReady:
                 Debug.Log("媒體數(shù)據(jù)準(zhǔn)備準(zhǔn)備中觸發(fā)");
                 break;
             case MediaPlayerEvent .EventType .ReadyToPlay :
                 Debug.Log("準(zhǔn)備去播放觸發(fā)");
                 break;
             case MediaPlayerEvent .EventType .Started ://注意:每暫停之后的開始播放都會觸發(fā)一次
                 Debug.Log("開始播放觸發(fā)");
                 break;
             default :
                 break;
         }
     }
 
     void Start ()
     {
         LoadVideo();
 
         //初始化觸發(fā)一次(同步聲音大小)
         OnVolumeSliderChange(m_volumeSlider .value);
     }
 
     void Update()
     {
         //時刻更新播放進(jìn)度方法
         DoUpdateVideoProcess();
 
         //時刻更新播放時間顯示方法
         UpdateTimeText();
     }

    // 加載視頻方法
    int index = 0;
    void LoadVideo()
     {
         //通過插件中的方法加載(參數(shù)為:1.加載路徑格式(與面板上相對應(yīng))2.加載的文件名 3.默認(rèn)是否開始播放)
         mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, VideoNames[index] + ".mp4", true);
     }

    #region 視頻切換

    // 下一個視頻
    void NextVideo()
    {
        index++;
        if (index > VideoNames.Length - 1)
            index = 0;
        //視頻播放
        LoadVideo();
    }

    // 上一個視頻
    void LastVideo()
    {
        index--;
        if (index<0)
            index = VideoNames.Length - 1;
        //視頻播放
        LoadVideo();
    }

    #endregion

    #region 視頻播放、暫停、循環(huán)
    // 播放與暫停開關(guān)點(diǎn)擊觸發(fā)
    void DoPlayOrPause(bool s_isOn)
     {
         //如果播放,開始播放并文字顯示“播放”
         if (s_isOn)
         {
             //通過持有的MediaPlayer類進(jìn)行操控
             mediaPlayer.Control.Play();
             //更改播放開關(guān)顯示的文字
             m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "暫停";
         }
             //否則,暫停
         else
         {
             mediaPlayer.Control.Pause();
             //更改播放開關(guān)顯示的文字
             m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "播放";
         }
     }

     // 是否循環(huán)播放開關(guān)點(diǎn)擊觸發(fā)
     void DoSetLoop(bool s_isOn)
     {
         //通過持有的MediaPlayer類進(jìn)行操控
         mediaPlayer.Control.SetLooping(s_isOn);
     }
    #endregion

    #region 倍速
    // 改變播放速度方法(正的加速放映,負(fù)的倒放映)
    void DoChangeSpeed(int s_speed)//下拉列表對應(yīng)索引值
     {
         float tSpeed = 1;
         switch (s_speed)
         {
             case 0:
                 tSpeed = 2;
                 break;
             case 1:
                 tSpeed = 1.5f;
                 break;
             case 2:
                 tSpeed = 1;
                 break;
             case 3:
                 tSpeed = 0.5f;
                 break;
             
             default :
                 Debug.Assert(false);
                 break;
         }
         mediaPlayer.Control.SetPlaybackRate(tSpeed);
     }
    #endregion

    #region 進(jìn)度條
    // 時刻更新視頻進(jìn)度到滑動條上
    void DoUpdateVideoProcess()
     {
         //獲取當(dāng)前播放時長
         float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
         //獲取視頻總長度
         float tVideoTime = mediaPlayer.Info.GetDurationMs();
         //計(jì)算出對應(yīng)的播放進(jìn)度賦值給顯示播放進(jìn)度的進(jìn)度條
         m_processSlider.value = tCurrentTime/tVideoTime;
     }
 
     // 更新播放進(jìn)度的時間顯示
     void UpdateTimeText()
     {
         //對當(dāng)前播放時間轉(zhuǎn)換時間格式
         //轉(zhuǎn)化為 秒
         int tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTimeMs()/1000;
         //獲取當(dāng)前分?jǐn)?shù)
         int tCurrentMin = tCurrentSeconds/60;
         //重新賦值剩余多少秒
         tCurrentSeconds = tCurrentSeconds%60;
         string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString();
 
         //對總時間轉(zhuǎn)化時間格式
         //轉(zhuǎn)化為秒
         int tVideoTimeSeconds = (int) mediaPlayer.Info.GetDurationMs()/1000;
         //獲取總的分?jǐn)?shù)
         int tVideoTimeMin = tVideoTimeSeconds/60;
         //重新復(fù)制剩余多少秒
         tVideoTimeSeconds = tVideoTimeSeconds%60;
         string tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString();
 
         //拼接一下時間顯示字符串
         string tTime = string.Format("<color=black>{0}:{1}/{2}:{3}</color>", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr);
 
         m_videoTimeTex.text =  tTime ;;
     }
 
     // 視頻播放進(jìn)度條值改變觸發(fā)
     void OnProcessSliderChange(float value)
     {
         //獲取視頻總長度
         float tVideoTime = mediaPlayer.Info.GetDurationMs();
         //當(dāng)前視頻的時間
         float tCurrentTime = m_processSlider.value*tVideoTime;
         //將視頻時間調(diào)到對應(yīng)的節(jié)點(diǎn)
         mediaPlayer.Control.Seek(tCurrentTime);

        m_processSlider.transform.Find("Fill Area").Find("Fill").GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
        m_processSlider.transform.Find("Handle Slide Area").Find("Handle").GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
     }
 
 
     // 播放進(jìn)度條開始拖動觸發(fā)(EventTrigger觸發(fā))
     public void OnProcessSliderDragBegin()
     {
         //暫停播放
         mediaPlayer.Control.Pause();
     }
 
     // 播放進(jìn)度條結(jié)束拖動觸發(fā)(EventTrigger觸發(fā))
     public void OnProcessSliderDragEnd()
     {
         //開始播放
         mediaPlayer.Control.Play();
     }
 
     // 返回到幾秒之前方法
     void OnBackSecondsClick()
     {
         //獲取當(dāng)前播放進(jìn)度時間
         float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
 
         //10s前進(jìn)度時間(如果存在前十秒則退,不存在還是當(dāng)前時間進(jìn)度)
         tCurrentTime = (tCurrentTime - m_backSeconds * 1000) >= 0 ? tCurrentTime - m_backSeconds*1000 : tCurrentTime;
 
         //設(shè)置進(jìn)度時間
         mediaPlayer.Control.Seek(tCurrentTime);
     }
    #endregion

    #region 音量設(shè)置

    // 音量進(jìn)度條改變觸發(fā)
    void OnVolumeSliderChange(float value)
     {
         //保存當(dāng)前已經(jīng)設(shè)置的音量
         if (value != 0)
         {
             m_customVolume = m_volumeSlider.value;
         }
         //設(shè)置音量
         mediaPlayer.Control.SetVolume(value);
         //如果音量手動調(diào)節(jié)到零,則將靜音模式打開
         if (value > 0)
         {
             m_muteToggle.isOn = false;
         }
         else
         {
             m_muteToggle.isOn = true;
         }
     }
 
     // 靜音開關(guān)觸發(fā)
     void OnMuteToggleClick(bool s_isOn)
     {
         //如果靜音
         if (s_isOn)
         {
             //設(shè)置靜音
             m_volumeSlider.value = 0;
             mediaPlayer.Control.SetVolume(0);
         }
             //不靜音
         else
         {
             m_volumeSlider.value = m_customVolume;
             mediaPlayer.Control.SetVolume(m_customVolume);
         }
     }
    #endregion

}

其中視頻存放在streamingAssets文件夾中,視頻名稱存放在一個名為“name”的txt文件中,通過讀取name中視頻的名稱控制上一個,下一個視頻的播放。

四:程序包

鏈接:https://pan.baidu.com/s/1A3L3lMaJFHrK2lIGD13NWA?pwd=jl98

提取碼:jl98文章來源地址http://www.zghlxwxcb.cn/news/detail-674617.html

到了這里,關(guān)于用unity插件AVProVideo制作一個視頻播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python制作一個多功能音樂播放器

    制作一個多功能音樂播放器的思路 確定播放器的需求和功能,例如支持哪些音頻格式、播放列表管理、循環(huán)播放、暫停、進(jìn)度條顯示等等。 選擇合適的Python GUI庫,例如Tkinter、PyQt等。這些庫可以幫助我們在圖形界面中實(shí)現(xiàn)播放器的各種功能。 創(chuàng)建播放器窗口、菜單、按鈕、

    2024年02月08日
    瀏覽(28)
  • 【Unity】代碼控制視頻的播放(視頻播放器-更新)

    【Unity】代碼控制視頻的播放(視頻播放器-更新)

    ?結(jié)果如上圖,之前寫過一個使用代碼控制視頻播放器的Demo,但是好多小伙伴說我附帶的鏈接沒法下載,這次我直接做一個完整版的,不用下載,照著一步一步做就能做出來。 之前寫了如何設(shè)置RawImage進(jìn)行自動播放,大家可以看一下基礎(chǔ)操作這篇文章:,大佬勿怪。 【Unity】

    2024年02月09日
    瀏覽(23)
  • 瀏覽器不需要安裝插件,前端播放在線視頻方案,幾款播放器介紹,hls協(xié)議下的h.265視頻播放方案推薦

    瀏覽器不需要安裝插件,前端播放在線視頻方案,幾款播放器介紹,hls協(xié)議下的h.265視頻播放方案推薦

    一般我們播放本地視頻都是使用 video標(biāo)簽,但是 video 元素只支持三種視頻格式:MP4、WebM、Ogg ,對于在線視頻直接使用video是沒法播放的,這里介紹幾款這兩天我在做播放在線監(jiān)控視頻功能時使用過的幾款播放器,初次接觸流媒體踩了一堆坑,到目前為止對這部分內(nèi)容都還了

    2024年02月08日
    瀏覽(38)
  • QT5.9實(shí)現(xiàn)一個視頻播放器播放 暫停進(jìn)度條

    QT5.9實(shí)現(xiàn)一個視頻播放器播放 暫停進(jìn)度條

    參考博主 1https://blog.csdn.net/liji_digital/article/details/83691035 參考博主2https://blog.csdn.net/qq_41071706/article/details/89855986 通過選擇按鈕選擇本地視頻文件 點(diǎn)擊播放按鈕播放文本框中的文件(不支持其他類型文件的異常檢測) 支持mp4 avi等等 如果不支持見參考博主2的內(nèi)容 點(diǎn)擊暫停按鈕

    2023年04月22日
    瀏覽(28)
  • Unity播放器插件-AVPro Video - Ultra Edition介紹

    Unity播放器插件-AVPro Video - Ultra Edition介紹

    c# AVPro Video - Ultra Edition官方插件使用介紹 AvproVideo,官網(wǎng)中有免費(fèi)的,免費(fèi)的帶了水印。不介意水印去下載,挺好使的。收費(fèi)的在Unity商店中能找到:(這里我從淘寶上花“重金”買了一個玩玩)以前都是用的AvPro免費(fèi)版的,1點(diǎn)幾那種版本的,也挺好使,相對這個來說,這個就

    2024年02月09日
    瀏覽(21)
  • H.265視頻無插件流媒體播放器EasyPlayer.js播放webrtc斷流重連的異常修復(fù)

    H.265視頻無插件流媒體播放器EasyPlayer.js播放webrtc斷流重連的異常修復(fù)

    H5無插件流媒體播放器EasyPlayer屬于一款高效、精煉、穩(wěn)定且免費(fèi)的流媒體播放器,可支持多種流媒體協(xié)議播放,可支持H.264與H.265編碼格式,性能穩(wěn)定、播放流暢,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的視頻流,并且已實(shí)現(xiàn)網(wǎng)頁端實(shí)時錄像、在iOS上實(shí)現(xiàn)低延時直

    2024年02月10日
    瀏覽(30)
  • 【FAQ】H.265視頻無插件流媒體播放器EasyPlayer.js播放webrtc斷流重連的異常修復(fù)

    【FAQ】H.265視頻無插件流媒體播放器EasyPlayer.js播放webrtc斷流重連的異常修復(fù)

    H5無插件流媒體播放器EasyPlayer屬于一款高效、精煉、穩(wěn)定且免費(fèi)的流媒體播放器,可支持多種流媒體協(xié)議播放,可支持H.264與H.265編碼格式,性能穩(wěn)定、播放流暢,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的視頻流,并且已實(shí)現(xiàn)網(wǎng)頁端實(shí)時錄像、在iOS上實(shí)現(xiàn)低延時直

    2024年02月11日
    瀏覽(94)
  • 用Python編寫一個通用視頻播放器:讓您觀看任何類型的正經(jīng)視頻!

    用Python編寫一個通用視頻播放器:讓您觀看任何類型的正經(jīng)視頻! 在這篇文章中,我將向您展示如何使用Python編寫一個簡單但功能強(qiáng)大的視頻播放器。這個播放器將能夠處理各種視頻文件格式,并提供基本的播放、暫停、停止和進(jìn)度控制功能。讓我們開始吧! 首先,我們需

    2024年02月03日
    瀏覽(24)
  • uniapp - 微信小程序接入騰訊視頻播放器功能插件,uniapp開發(fā)微信小程序端調(diào)用引入并使用騰訊視頻播放組件完整全流程(詳細(xì)示例源碼,一鍵復(fù)制開箱即用)

    uniapp - 微信小程序接入騰訊視頻播放器功能插件,uniapp開發(fā)微信小程序端調(diào)用引入并使用騰訊視頻播放組件完整全流程(詳細(xì)示例源碼,一鍵復(fù)制開箱即用)

    在uniapp 微信小程序項(xiàng)目中,集成騰訊視頻功能插件,實(shí)現(xiàn)播放騰訊視頻效果,附帶詳細(xì)示例源碼及注釋, 你可以跟著步驟一步步來,保證幾分鐘就能快速在uniapp小程序項(xiàng)目中植入騰訊視頻功能!

    2024年02月12日
    瀏覽(95)
  • Unity 視頻播放器,基于VideoPlayer,實(shí)現(xiàn)滑動進(jìn)度條,顯示視頻時長,全屏顯示,音量調(diào)節(jié)

    Unity 視頻播放器,基于VideoPlayer,實(shí)現(xiàn)滑動進(jìn)度條,顯示視頻時長,全屏顯示,音量調(diào)節(jié)

    unity播放視頻的方式有很多種,但即輕量又好用的,還是unity自帶的VideoPlayer,但沒有視頻基礎(chǔ)操作的UI組件,本篇帶大家對視頻的播放,以及UI組件的實(shí)現(xiàn) 效果展示: Unity帶UI操作,視頻播放器 ? DEMO下載: https://gitee.com/jacobkay/videoplayer 一、安裝方式 1、下載文件 2、將文件拖

    2024年02月02日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包