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

Unity AVPro Video 加載視頻第一秒圖片與例子

這篇具有很好參考價值的文章主要介紹了Unity AVPro Video 加載視頻第一秒圖片與例子。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用AVPro Video 加載視頻第一秒的圖片
原理:使用AVPro Video插件的MediaPlayer
mediaPlayer.OpenMedia(new MediaPath(url鏈接, MediaPathType.AbsolutePathOrURL), false);
然后等待一定時間
使用ExtractFrame截取視頻
Texture2D texture2D = mediaPlayer.ExtractFrame(null, 1);

UI效果:
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎
點擊圖片進行播放,在點擊一下關閉播放
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎

部分代碼:

using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using UnityEngine;
using UnityEngine.UI;

    [SerializeField] private MediaPlayer mediaPlayer;
    [SerializeField] private DisplayUGUI displayUGUI;           //顯示視頻
    //預制體 => 一個Image
    [SerializeField] private GameObject VideoPlayerPre;         //視頻
    
    [SerializeField] private bool LoadFinish;                   //所有鏈接都加載完成的標記
    
    // Start is called before the first frame update
    void Start()
    {
        Init();
    }
    
	private void Init()
    {
        if (mediaPlayer == null)
        {
            mediaPlayer = transform.Find("MediaPlayer").GetComponent<MediaPlayer>();
        }
        //mediaPlayer.Events.AddListener(OnMediaPlayerEvent); //事件監(jiān)聽

        if (displayUGUI == null)
        {
            displayUGUI = transform.Find("VideoDisplay").GetComponent<DisplayUGUI>();
            if (displayUGUI.CurrentMediaPlayer == null)
            {
                displayUGUI.CurrentMediaPlayer = mediaPlayer;
            }
        }
        //按需添加, 我的需求是設備是攝像機(播放視頻流)時,displayUGUI沒有點擊事件,設備告警(會有mp4視頻鏈接), displayUGUI有點擊事件(可以關閉,打開另一個視頻)
        //EventTriggerListener.Get(displayUGUI.gameObject).OnClick = (go) => CloseVideo();
    }
    
    /// <summary>
    /// 加載視頻第一秒圖片
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    private IEnumerator LoadVideo(List<string> urls)
    {
        yield return null;  //下一幀開始處理

        Debug.Log("開始執(zhí)行...");

        if (urls.Count == 0) yield break;

        for (int i = 0; i < urls.Count; i++)
        {
            mediaPlayer.OpenMedia(new MediaPath(urls[i], MediaPathType.AbsolutePathOrURL), false);
            //等待0.3秒,按需調(diào)整等待時間
            Debug.Log("開始等待0.3秒, i = " + i);
            yield return new WaitForSeconds(0.5f);
            Debug.Log("結(jié)束等待0.3秒, i = " + i);
            //取第一秒的圖
            Texture2D texture2D = mediaPlayer.ExtractFrame(null, 1);
            if (texture2D == null)
            {
                Debug.LogWarning($"需要調(diào)整等待時間 i = {i} url = {urls[i]}");   //加載失敗
                continue;
            }
            //將視頻第一秒加載到圖片上
            GameObject video = Instantiate<GameObject>(VideoPlayerPre);
            video.SetActive(true);
            video.transform.SetParent(scrollRect.content);
            //需要用Image, 我嘗試使用RawImage無法顯示圖像
            video.GetComponent<Image>().sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));
            video.GetComponent<VideoUrlInfo>().videoUrl = urls[i];   //將數(shù)據(jù)保存到VideoUrlInfo組件上
            //給圖片添加點擊事件,我這里的需求是點擊后才播放視頻
            EventTriggerListener.Get(video).OnClick = (go) => PlayVideo(go.GetComponent<VideoUrlInfo>().videoUrl);
            yield return null;
        }

        LoadFinish = true;
    }

所有代碼:

/* ======================================================================================
*      作 者:
*      主 題:
*      主要功能:

*      詳細描述:

*      創(chuàng)建時間:2022-11-11 19:52:34
*      修改記錄:
*      版 本:1.0
  =======================================================================================*/
using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using UnityEngine;
using UnityEngine.UI;

public class TestAVPro : MonoBehaviour
{
    [SerializeField] private MediaPlayer mediaPlayer;
    [SerializeField] private DisplayUGUI displayUGUI;           //顯示視頻

    [SerializeField] private ScrollRect scrollRect;             //滾動視圖

    //預制體
    [SerializeField] private GameObject VideoPlayerPre;         //視頻

    [SerializeField] private bool LoadFinish;                   //所有鏈接都加載完成的標記

    // Start is called before the first frame update
    void Start()
    {
        Init();
        //測試
        Test();
    }

    /// <summary>
    /// 加載視頻
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    private IEnumerator LoadVideo(List<string> urls)
    {
        yield return null;  //下一幀開始處理

        Debug.Log("開始執(zhí)行...");

        if (urls.Count == 0) yield break;

        for (int i = 0; i < urls.Count; i++)
        {
            mediaPlayer.OpenMedia(new MediaPath(urls[i], MediaPathType.AbsolutePathOrURL), false);
            //等待0.3秒,按需調(diào)整等待時間
            Debug.Log("開始等待0.3秒, i = " + i);
            yield return new WaitForSeconds(0.5f);
            Debug.Log("結(jié)束等待0.3秒, i = " + i);
            //取第一秒的圖
            Texture2D texture2D = mediaPlayer.ExtractFrame(null, 1);
            if (texture2D == null)
            {
                Debug.LogWarning($"需要調(diào)整等待時間 i = {i} url = {urls[i]}");   //加載失敗
                continue;
            }
            //將視頻第一秒加載到圖片上
            GameObject video = Instantiate<GameObject>(VideoPlayerPre);
            video.SetActive(true);
            video.transform.SetParent(scrollRect.content);
            //需要用Image, 我嘗試使用RawImage無法顯示圖像
            video.GetComponent<Image>().sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));
            video.GetComponent<VideoUrlInfo>().videoUrl = urls[i];   //將數(shù)據(jù)保存到VideoUrlInfo組件上
            //給圖片添加點擊事件,我這里的需求是點擊后才播放視頻
            EventTriggerListener.Get(video).OnClick = (go) => PlayVideo(go.GetComponent<VideoUrlInfo>().videoUrl);
            yield return null;
        }

        LoadFinish = true;
    }

    /// <summary>
    /// 圖片被點擊播放視頻(圖片是第一秒的視頻)
    /// </summary>
    /// <param name="url"></param>
    private void PlayVideo(string url)
    {
        if (!LoadFinish) return;
        if (url.IsNullOrEmpty()) return;

        displayUGUI.gameObject.SetActive(true);
        mediaPlayer.OpenMedia(new MediaPath(url, MediaPathType.AbsolutePathOrURL));
    }

    private void Init()
    {
        if (mediaPlayer == null)
        {
            mediaPlayer = transform.Find("MediaPlayer").GetComponent<MediaPlayer>();
        }
        mediaPlayer.Events.AddListener(OnMediaPlayerEvent); //事件監(jiān)聽

        if (displayUGUI == null)
        {
            displayUGUI = transform.Find("VideoDisplay").GetComponent<DisplayUGUI>();
            if (displayUGUI.CurrentMediaPlayer == null)
            {
                displayUGUI.CurrentMediaPlayer = mediaPlayer;
            }
        }
        //按需添加, 我的需求是設備是攝像機(播放視頻流)時,displayUGUI沒有點擊事件,設備告警(會有mp4視頻鏈接), displayUGUI有點擊事件(可以關閉,打開另一個視頻)
        EventTriggerListener.Get(displayUGUI.gameObject).OnClick = (go) => CloseVideo();

        if (scrollRect == null)
        {
            scrollRect = transform.Find("ScrollView").GetComponent<ScrollRect>();
        }

        if (VideoPlayerPre == null)
            this.VideoPlayerPre = transform.Find("VideoPlayerPre").gameObject;
        VideoPlayerPre.SetActive(false);    //不需要顯示
    }

    private void Test()
    {
        List<string> urls = new List<string>();
        //網(wǎng)上找的測試地址
        urls.Add("http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4");    //馴龍高手
        urls.Add("http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");    //緊急救援
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4");    //玩具總動員
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4");    //葉問4 先行預告甄子丹過招美
        urls.Add("http://vfx.mtime.cn/Video/2019/03/18/mp4/190318231014076505.mp4");    //預告劉德華對決古天
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710171112971120.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710122716702150.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710095541348171.mp4");

        //壓測一下
        urls.Add("http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4");    //馴龍高手
        urls.Add("http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");    //緊急救援
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4");    //玩具總動員
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4");    //葉問4 先行預告甄子丹過招美
        urls.Add("http://vfx.mtime.cn/Video/2019/03/18/mp4/190318231014076505.mp4");    //預告劉德華對決古天
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710171112971120.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710122716702150.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710095541348171.mp4");

        urls.Add("http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4");    //馴龍高手
        urls.Add("http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");    //緊急救援
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4");    //玩具總動員
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4");    //葉問4 先行預告甄子丹過招美
        urls.Add("http://vfx.mtime.cn/Video/2019/03/18/mp4/190318231014076505.mp4");    //預告劉德華對決古天
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710171112971120.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710122716702150.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710095541348171.mp4");

        urls.Add("http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4");    //馴龍高手
        urls.Add("http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");    //緊急救援
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4");    //玩具總動員
        urls.Add("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4");    //葉問4 先行預告甄子丹過招美
        urls.Add("http://vfx.mtime.cn/Video/2019/03/18/mp4/190318231014076505.mp4");    //預告劉德華對決古天
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710171112971120.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710122716702150.mp4");
        urls.Add("http://vfx.mtime.cn/Video/2021/07/10/mp4/210710095541348171.mp4");

        StartCoroutine(LoadVideo(urls));
    }

    private void OnMediaPlayerEvent(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
    {
        switch (arg1)
        {
            case MediaPlayerEvent.EventType.Started:    //開始播放的事件
                //videoLoad = true;       //已經(jīng)加載完成
                //quanImage.Deactivate(); //隱藏
                break;
        }

        switch (arg2)
        {
            case ErrorCode.LoadFailed:
                //videoTip.text = "加載出錯,網(wǎng)絡連接不穩(wěn)定, 請稍后重試!!!";
                //videoTip.Activate();     //顯示
                //videoLoad = true;       //加載出錯
                //quanImage.Deactivate();  //隱藏
                break;
            case ErrorCode.DecodeFailed:
                break;
        }
    }

    /// <summary>
    /// 關閉視頻 displayUGUI的點擊事件
    /// </summary>
    private void CloseVideo()
    {
        displayUGUI.gameObject.SetActive(false);
        mediaPlayer.Stop();
    }
}

UI
1.創(chuàng)建一個空對象并添加TestAVPro(自己寫的腳本)
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎
2.創(chuàng)建Scroll View
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎
3.給Scroll View 的Content添加Grid Layout Group 和 Content Size Fitter組件,按需調(diào)整里面參數(shù)
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎

4創(chuàng)建MediaPlayer和displayUGUI組件
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎
mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎

5.關閉自動播放和自動打開mediaplayer.openmedia,工作記錄,unity,音視頻,游戲引擎6.需要改名稱和腳本中對應(按照自己的來改)

7.一個工具類型,給UI添加點擊事件

using UnityEngine;
using UnityEngine.EventSystems;

/// <summary>
/// UI添加點擊事件
/// </summary>
public class EventTriggerListener : EventTrigger
{
    public delegate void voidDelegate(GameObject obj);
    public voidDelegate OnBtnDown;
    public voidDelegate OnBtnUp;
    public voidDelegate OnEnter;
    public voidDelegate OnExit;
    public voidDelegate OnStay;
    public voidDelegate OnClick;
    public voidDelegate OnDoubleClick;
    private bool isEnter = false;
    public void Update()
    {
        if (isEnter)
        {
            if (OnStay != null)
            {
                OnStay(gameObject);
            }
        }
    }
    public static EventTriggerListener Get(GameObject obj)
    {
        EventTriggerListener eventTriggerListener = obj.GetComponent<EventTriggerListener>();
        if (eventTriggerListener == null)
        {
            eventTriggerListener = obj.AddComponent<EventTriggerListener>();
        }
        return eventTriggerListener;
    }
    /// <summary>
    /// 判斷是否是第二次點擊
    /// </summary>
    private bool isTwo = true;
    private bool isOver = true;
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (OnBtnDown != null)
        {
            OnBtnDown(gameObject);
        }
        isTwo = !isTwo;
        if (!isOver)
        {
            return;
        }
        isOver = false;
        Invoke("SelectClick", 0.3f);
    }

    public void SelectClick()
    {
        if (isTwo)
        {
            if (OnDoubleClick != null)
            {
                OnDoubleClick(gameObject);
            }
        }
        else
        {
            if (OnClick != null)
            {
                OnClick(gameObject);
            }
        }
        isTwo = true;
        isOver = true;
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (OnBtnUp != null)
        {
            OnBtnUp(gameObject);
        }
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (OnEnter != null)
        {
            OnEnter(gameObject);
        }
        isEnter = true;
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (OnExit != null)
        {
            OnExit(gameObject);
        }
        isEnter = false;
    }
}

工程地址
提取碼:o93j

插件僅供學習交流,請勿用于商業(yè)用途文章來源地址http://www.zghlxwxcb.cn/news/detail-550305.html

到了這里,關于Unity AVPro Video 加載視頻第一秒圖片與例子的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【Unity】AVPro使用踩坑,編輯器模式使用視頻播放正常,打包后視頻無法播放的問題

    【Unity】AVPro使用踩坑,編輯器模式使用視頻播放正常,打包后視頻無法播放的問題

    這個主要是AVPro的坑 一般使用會直接Browse給取文件路徑,然后面板上面就能看到視頻文件的名字,這個方法在編輯器模式下播放是可以獲取到文件的,所以沒問題。 但是打包后路徑變化,拉取到的地址就不對了。 首先把視頻資源改存到StreamingAssets文件夾路徑下,然后路徑獲

    2024年02月16日
    瀏覽(164)
  • vue 使用vue-video-player加載視頻(鋪滿容器)

    安裝 main.js 引入 使用 使視頻鋪滿容器

    2024年02月13日
    瀏覽(19)
  • uniapp video(倍速功能、層級過高、視頻第一幀做封面 等問題)

    uniapp video(倍速功能、層級過高、視頻第一幀做封面 等問題)

    ?????????由于上次寫video組件的問題,過于劃水,沒講清楚,導致自己花費了很多時間,重新踩坑,對自己很抱歉。 效果圖如下:倍速的顯示和隱藏,需在全屏的時候 和 顯示控制組件時 代碼邏輯 1. 實現(xiàn)倍速的核心是創(chuàng)建視頻組件控制器,調(diào)用它的倍速方法 =》官方文檔

    2024年02月08日
    瀏覽(27)
  • 圖片生成視頻來了:Stable Video Diffusion使用教程

    11月22日 Stability AI 發(fā)布了一個AI視頻的開源項目:Stable Video Diffusion,它可以基于一張圖片生成數(shù)秒鐘的視頻,效果比較驚艷,本文就給大家分享下如何安裝和使用。 視頻不方便分享,我這里做成了gif動圖,可以看到畫面很穩(wěn)定,基本上是沒有閃爍的。 這個程序?qū)︼@卡的要求

    2024年04月14日
    瀏覽(475)
  • 使用【Blob、Base64】兩種方式顯示【文本、圖片、視頻】 & 使用 video 組件播放視頻

    使用【Blob、Base64】兩種方式顯示【文本、圖片、視頻】 & 使用 video 組件播放視頻

    Blob 對象的類型是由 MIME 類型(Multipurpose Internet Mail Extensions)來確定的。MIME 類型是一種標準,用于表示文檔、圖像、音頻、視頻等多媒體文件的類型。以下是一些常見的 Blob 對象類型: text/plain :純文本文件。 text/html :HTML文件。 text/xml :XML文件。 image/png :PNG格式的圖像

    2024年02月03日
    瀏覽(22)
  • 多模態(tài)——使用stable-video-diffusion將圖片生成視頻

    多模態(tài)——使用stable-video-diffusion將圖片生成視頻

    近期,stabilityAI發(fā)布了一個新的項目,是將圖片作為基礎,生成一個相關的小視頻,其實也算是其之前研究內(nèi)容的擴展。早在stable-diffusion的模型開源出來的時候,除了由prompt生成圖片之外,也可以生成連續(xù)幀的短視頻。 本文主要是體驗一下stable-video-diffusion的使用,以及對其

    2024年02月05日
    瀏覽(126)
  • Unity視頻播放之Video Player的簡單使用

    Unity視頻播放之Video Player的簡單使用

    使用Unity自帶的VideoPlayer來播放視頻 一、準備視頻 Unity3D常用視頻格式:.mov、.mpg、.mpeg、.mp4、.avi、.asf 如果都不識別,試試轉(zhuǎn)換成ogv格式。轉(zhuǎn)換完成之后,將視頻素材文件拖入Unity Assets 文件夾內(nèi)。 二、創(chuàng)建UI及添加組件 創(chuàng)建RenderTexture資源,設置分辨率,跟視頻分辨率一致

    2024年01月18日
    瀏覽(41)
  • Unity2020Video player發(fā)布后無法播放視頻問題

    我也是小白,用Unity過程中也是遇到很多草蛋問題,我在做demo的時候第一次用到Unity的video player,聽說ogv格式能直接播放,我就把視頻轉(zhuǎn)了ogv格式,然后放到clip里,編輯器里運行完全沒問題,發(fā)布打包后就播放不了,黑屏都沒有,直接視頻沒了,百度搜的絕對路徑說是放到

    2024年02月15日
    瀏覽(26)
  • 使用vant+video.js實現(xiàn)輪播圖圖片和視頻輪播播放

    使用vant+video.js實現(xiàn)輪播圖圖片和視頻輪播播放

    先上效果圖 1. 安裝 2. 在需要用到的頁面引入 3. 具體頁面使用 假設傳給子組件的數(shù)組結(jié)構(gòu) 按照步驟來使用,其他地方視頻播放情況都還好,至少安卓是好的,只是點擊播放和暫停時候,ios需要點擊多下才能觸發(fā)點擊事件; 然后以為是video.js插件可能沒更新,ios版本迭代超過

    2023年04月08日
    瀏覽(29)
  • 前端Vue自定義輪播圖視頻播放組件 仿京東商品詳情輪播圖視頻Video播放效果 可圖片預覽

    前端Vue自定義輪播圖視頻播放組件 仿京東商品詳情輪播圖視頻Video播放效果 可圖片預覽

    隨著技術的發(fā)展,開發(fā)的復雜度也越來越高,傳統(tǒng)開發(fā)方式將一個系統(tǒng)做成了整塊應用,經(jīng)常出現(xiàn)的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發(fā)而動全身。通過組件化開發(fā),可以有效實現(xiàn)單獨開發(fā),單獨維護,而且他們之間可以隨

    2024年02月15日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包