我是靠谱客的博主 傲娇西装,最近开发中收集的这篇文章主要介绍AVProVideo插件实现文件夹中的视频文件循环播放说明:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

说明:


最近项目需要循环播放一个视频列表,使用的是【AVProVideo插件】,发现只能一个视频的循环播放,不能实现一个文件夹下的所有视频的循环播放。


解决如下:
插件下载 提取码:bdgh
在这里插入图片描述
根据上图所示声明一个事件方法,形参与之对应。为MediaPlayer添加事件,这里实现的是当前视频播放完成后,在【FinishedPlaying】里实现播放下一个视频的逻辑。
补充说明:在切换视频时,会看到UI后面的界面,可以在AVPro Video下的【Display UGUI】组件上设置默认纹理,我这里设置的时【 displayUGUI.color】,在播完完当前视频后(FinishedPlaying)颜色设为黑色,在第一帧准备完成后(FirstFrameReady)颜色设为白色

 public void OnAddEvents(MediaPlayer mp,MediaPlayerEvent.EventType eventType,ErrorCode errorCode)
    {
        switch (eventType)
        {
            case MediaPlayerEvent.EventType.MetaDataReady:
                break;
            case MediaPlayerEvent.EventType.ReadyToPlay:
                print("ReadyToPlay状态");
                break;
            case MediaPlayerEvent.EventType.Started:
                print("Started状态");
                break;
            case MediaPlayerEvent.EventType.FirstFrameReady:
                print("第一帧准备完成");
                if (displayUGUI != null)
                    displayUGUI.color = new Color(255, 255, 255);
                break;
            case MediaPlayerEvent.EventType.FinishedPlaying:
                print("完成当前的视频播放");
                videoIndex++;  

                if (videoIndex>=videoCount)
                    videoIndex = 0;
                
                displayUGUI.color = new Color(0, 0, 0);

                mp.m_VideoPath = videoPaths[videoIndex];
                mp.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, mp.m_VideoPath);
                break;
            default:
                break;
        }
    }

MediaPlayerEvent.EventType 枚举类型如下,可以自行了解
在这里插入图片描述
以上已经实现了当前视频播放完后播放下一个视频的逻辑,所以我们需要有一个视频列表,在播放完当前,将播放地址更换为下一个。

/// <summary>
    /// 获取视频路径
    /// </summary>
    /// <param name="path">视频的根文件夹</param>
    /// <param name="suffix">后缀</param>
    /// <param name="videoLists">存放路径的列表</param>
    private void GetVideoList(string path,string suffix,ref List<string> videoLists)
    {
        string videoName;
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo[] fileInfo = dir.GetFiles();

        foreach (FileInfo item in fileInfo)
        {
            videoName = item.FullName;
            //print(fileName);
            if (videoName.EndsWith(suffix))
            {
                //添加到列表中
                videoLists.Add(videoName);
                print("当前添加到列表中的路径为"+videoName);
            }
        }
    }

完整脚本如下:


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

/// <summary>
/// 控制视频的循环播放
/// </summary>
public class VideoLoop : MonoBehaviour
{
    private int videoIndex;    //播放视频的索引
    private int videoCount;    //视频数量

    private MediaPlayer mediaPlayer;
    private DisplayUGUI displayUGUI;

    //当前的视频播放列表
    private List<string> videoPaths = new List<string>();
    string videoRootPath;

    string path;
    private void Awake()
    {
        videoRootPath = Application.streamingAssetsPath + "/Video";

        GetVideoList(videoRootPath, "mp4", ref videoPaths);
        videoCount = videoPaths.Count;
    }
    void Start()
    {
        videoIndex=0;
        
        displayUGUI = GameObject.Find("AVPro Video").GetComponent<DisplayUGUI>();
        mediaPlayer = transform.GetComponent<MediaPlayer>();
        InitPlay();
    }

    //初始化 默认播放第一个
    private void InitPlay()
    {
        if (videoCount>0)
             path = videoPaths[0];
        mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, path);
    }
 
    public void OnAddEvents(MediaPlayer mp,MediaPlayerEvent.EventType eventType,ErrorCode errorCode)
    {
        switch (eventType)
        {
            case MediaPlayerEvent.EventType.MetaDataReady:
                break;
            case MediaPlayerEvent.EventType.ReadyToPlay:
                print("ReadyToPlay状态");
                break;
            case MediaPlayerEvent.EventType.Started:
                print("Started状态");
                break;
            case MediaPlayerEvent.EventType.FirstFrameReady:
                print("第一帧准备完成"); 
                if (displayUGUI != null)
                    displayUGUI.color = new Color(255, 255, 255);
                break;
            case MediaPlayerEvent.EventType.FinishedPlaying:
                print("完成当前的视频播放");
                videoIndex++;  

                if (videoIndex>=videoCount)
                    videoIndex = 0;
                
                displayUGUI.color = new Color(0, 0, 0);

                mp.m_VideoPath = videoPaths[videoIndex];
                mp.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, mp.m_VideoPath);
                break;
            default:
                break;
        }
    }

    /// <summary>
    /// 获取视频路径
    /// </summary>
    /// <param name="path">视频的根文件夹</param>
    /// <param name="suffix">后缀</param>
    /// <param name="videoLists">存放路径的列表</param>
    private void GetVideoList(string path,string suffix,ref List<string> videoLists)
    {
        string videoName;
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo[] fileInfo = dir.GetFiles();

        foreach (FileInfo item in fileInfo)
        {
            videoName = item.FullName;
            //print(fileName);
            if (videoName.EndsWith(suffix))
            {
                //添加到列表中
                videoLists.Add(videoName);
                print("当前添加到列表中的路径为"+videoName);
            }
        }
    }
}

最后

以上就是傲娇西装为你收集整理的AVProVideo插件实现文件夹中的视频文件循环播放说明:的全部内容,希望文章能够帮你解决AVProVideo插件实现文件夹中的视频文件循环播放说明:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部