2025-09-13 16:38:19 +08:00

95 lines
2.5 KiB
C#

using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class AVProValue : MonoBehaviour
{
MediaPlayer mediaPlayer;
/// <summary>
/// 视频播放时长
/// </summary>
double duration;
/// <summary>
/// 视频播放进度
/// </summary>
public float PlayValue;
/// <summary>
/// 视频是否加载完成并准备播放
/// </summary>
bool isLoaded = false;
// Start is called before the first frame update
[SerializeField]
string VideoPath;
private void OnEnable()
{
mediaPlayer = GetComponent<MediaPlayer>();
if (mediaPlayer != null)
{
mediaPlayer.Events.AddListener(OnMediaEvent);
}
}
void Start()
{
//duration = mediaPlayer.Info.GetDuration();
bool isOpen = mediaPlayer.OpenMedia(MediaPathType.RelativeToStreamingAssetsFolder, VideoPath, true);
//mediaPlayer.Control.Play();
}
private void OnMediaEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
{
//Debug.Log($"触发事件:{et},错误码:{errorCode}");
switch (et)
{
//视频加载完成并准备好播放
//case MediaPlayerEvent.EventType.ReadyToPlay:
case MediaPlayerEvent.EventType.Unpaused:
this.Log("视频加载完成并准备好播放");
isLoaded = true;
duration = mediaPlayer.Info.GetDuration();
this.Error("这里得到的视频的时长为什么是:" + duration);
break;
case MediaPlayerEvent.EventType.Started:
this.Error("正在加载视频");
isLoaded = false;
break;
// 加载失败(如文件不存在、格式不支持等)
case MediaPlayerEvent.EventType.Error:
isLoaded = false;
Debug.LogError($"视频加载失败!错误码:{errorCode}");
break;
// 视频卸载(如切换视频源时)
case MediaPlayerEvent.EventType.Closing:
isLoaded = false;
Debug.Log("视频已卸载");
break;
default:
break;
}
}
/// <summary>
/// 根据value控制视频播放进度
/// </summary>
public void PlayVideoAsValue()
{
double PlayTime = PlayValue * duration;
if (isLoaded)
{
mediaPlayer.Control.Seek(PlayTime);
//mediaPlayer.Control.Play();
}
}
private void OnDisable()
{
isLoaded = false;
}
}