Untiy的Webgl端网页端视频播放,又不想直接mp4格式等格式的。

针对Untiy的Webgl端网页端视频播放,又不想直接mp4格式等格式的一些小技巧方式。

1.安装AVPro Video插件。

2.场景ui布局类似如下图:

3.UI中新建image,改名VideoDisplay,把image组件删除,添加Displayugui组件,关联mediaplayer。

4.UI中新建gameobject,添加mediapalyer组件,并关联你要播放的某个视频。

5.新建gameobject,添加HTML5VideoPlayer组件,并设置如下,videofilename的名称就是你的视频名称,视频位置webgl网页端主要是放在StreamingAssets中,视频的后缀名可以改为我这个名称。然后你同步设置也要同名称。

6.这个组件可以播放多个视频,你只要有多个panel拷贝下就行了。

相关的HTML5VideoPlayer代码如下:

csharp 复制代码
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Collections;
using RenderHeads.Media.AVProVideo;

[System.Serializable]
public class VideoGroup
{
    public UnityEngine.UI.Button playButton;
    public UnityEngine.UI.Button pauseButton;
    public UnityEngine.UI.Button stopButton;
    public DisplayUGUI displayUGUI;
    public MediaPlayer mediaPlayer;  
    public string videoFileName = "11.longyugxq";
    
    [HideInInspector] public bool isLoaded = false;
}

public class HTML5VideoPlayer : MonoBehaviour
{
    [SerializeField] private List<VideoGroup> videoGroups = new List<VideoGroup>();

    private void Start()
    {
        StartCoroutine(InitializeAsync());
    }

    private IEnumerator InitializeAsync()
    {
        for (int i = 0; i < videoGroups.Count; i++)
        {
            yield return InitializeVideoGroupAsync(videoGroups[i], i);
        }
    }

    private IEnumerator InitializeVideoGroupAsync(VideoGroup group, int groupIndex)
    {
        // 检查MediaPlayer是否已在Inspector中设置
        if (group.mediaPlayer == null)
        {
            Debug.LogError($"VideoGroup {groupIndex} 未配置 MediaPlayer");
            yield break;
        }

        // 打开视频文件
        bool opened = group.mediaPlayer.OpenMedia(
            new MediaPath(group.videoFileName, MediaPathType.RelativeToStreamingAssetsFolder),
            autoPlay: false
        );

        if (!opened)
        {
            Debug.LogError($"打开视频失败: {group.videoFileName}");
            yield break;
        }

        // 等待加载完成
        yield return new WaitForSeconds(0.01f);

        Debug.Log($"VideoGroup {groupIndex} - {group.videoFileName} 加载完成");

        // 绑定按钮事件
        if (group.playButton != null)
            group.playButton.onClick.AddListener(() => PlayVideo(groupIndex));
        if (group.pauseButton != null)
            group.pauseButton.onClick.AddListener(() => PauseVideo(groupIndex));
        if (group.stopButton != null)
            group.stopButton.onClick.AddListener(() => StopVideo(groupIndex));

        group.isLoaded = true;
    }

    public void PlayVideo(int groupIndex)
    {
        if (groupIndex >= 0 && groupIndex < videoGroups.Count && videoGroups[groupIndex].isLoaded && videoGroups[groupIndex].mediaPlayer != null)
        {
            videoGroups[groupIndex].mediaPlayer.Play();
        }
    }

    public void PauseVideo(int groupIndex)
    {
        if (groupIndex >= 0 && groupIndex < videoGroups.Count && videoGroups[groupIndex].mediaPlayer != null)
        {
            videoGroups[groupIndex].mediaPlayer.Pause();
        }
    }

    public void StopVideo(int groupIndex)
    {
        if (groupIndex >= 0 && groupIndex < videoGroups.Count && videoGroups[groupIndex].mediaPlayer != null)
        {
            MediaPlayer mediaPlayer = videoGroups[groupIndex].mediaPlayer;
            mediaPlayer.Stop();
            mediaPlayer.Control.Seek(0.0);
        }
    }
}
相关推荐
avi91114 小时前
Unity毛玻璃渲染模糊渲染Shader数学入门
unity·aigc·图形学·shader·hlsl
微光守望者5 小时前
Unity小知识【1】:刚体(Rigidbody)与碰撞器(Collider)的区别,你真的清楚吗?
unity·游戏引擎
Leo July7 小时前
【AI】AI视频生成:技术跃迁、产业落地与合规实践全解析
人工智能·音视频
大大祥9 小时前
穿山甲广告sdk接入
android·kotlin·音视频·视频播放器·广告sdk
June bug10 小时前
【配环境】unity项目开发环境
unity·游戏引擎
JQLvopkk10 小时前
C#调用Unity实现设备仿真开发浅述
开发语言·unity·c#
千里马学框架11 小时前
跟着google官方文档学习车载音频Car audio configuration
学习·configuration·音视频·aaos·安卓framework开发·audio·车机
souyuanzhanvip11 小时前
Dopamine v3.0.2 本地音频管理工具新版发布
音视频
线束线缆组件品替网11 小时前
Same Sky 标准化音频与电源线缆接口技术详解
人工智能·数码相机·电脑·音视频·硬件工程·材料工程