using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VideoControl : MonoBehaviour
{
private MediaPlayer m_MdiaPalyer;
private void Awake()
{
m_MdiaPalyer = GameObject.Find("MediaPlayer").GetComponent<MediaPlayer>();
LoadMovie("Assets/Resources/彩带.mp4");
setAlphaRL();
m_MdiaPalyer.Events.AddListener(HandleEvent);
}
//载入视频
public void LoadMovie(string path)
{
//路径、载入方式、载入后是否直接播放
bool isOpening = m_MdiaPalyer.OpenMedia(new MediaPath(path, MediaPathType.AbsolutePathOrURL), autoPlay: false);
}
//播放视频
public void PlayerMovie()
{
m_MdiaPalyer.Control.Play();
}
//暂停视频
public void PauseMovie()
{
m_MdiaPalyer.Control.Pause();
}
//设置是否循环
public void SetLoop(bool isLoop)
{
m_MdiaPalyer.Control.SetLooping(isLoop);
}
//设置播放速率,默认为1,负值为倒放
public void SetPlayBackRate(float rate)
{
m_MdiaPalyer.Control.SetPlaybackRate(rate);
}
//以秒为单位获取视频总时间
public double GetMovieAllTime()
{
return m_MdiaPalyer.Info.GetDuration();
}
//获取视频当前的时间
public double GetMovieCurrnetTime()
{
return m_MdiaPalyer.Control.GetCurrentTime();
}
//视频跳转到该时间
public void SeekMovie(double time)
{
m_MdiaPalyer.Control.Seek(time);
}
//是否静音
public void MuteVolume(bool isMute)
{
m_MdiaPalyer.Control.MuteAudio(isMute);
}
//设置视频为左右透明视频
public void setAlphaRL()
{
MediaHints hints = m_MdiaPalyer.FallbackMediaHints;
hints.transparency= TransparencyMode.Transparent;
hints.alphaPacking = AlphaPacking.LeftRight;
m_MdiaPalyer.FallbackMediaHints = hints;
}
//监听回调函数
void HandleEvent(MediaPlayer mp, MediaPlayerEvent.EventType eventType, ErrorCode code)
{
Debug.Log("MediaPlayer " + mp.name + " generated event: " + eventType.ToString());
if (eventType == MediaPlayerEvent.EventType.Error)
{
//发生错误时触发
Debug.LogError("Error: " + code);
}
else if(eventType == MediaPlayerEvent.EventType.MetaDataReady)
{
//当某些数据(宽度、持续时间等)可用时触发
}
else if (eventType == MediaPlayerEvent.EventType.ReadyToPlay)
{
//加载视频并准备播放时触发(启用自动播放时不触发)
}
else if (eventType == MediaPlayerEvent.EventType.Started)
{
//播放开始时触发
}
else if (eventType == MediaPlayerEvent.EventType.FirstFrameReady)
{
//第一帧渲染完成时触发(某些播放形式不可用,例如 WebGL)
}
else if (eventType == MediaPlayerEvent.EventType.FinishedPlaying)
{
//当非循环视频播放完毕时触发
}
else if (eventType == MediaPlayerEvent.EventType.Closing)
{
//媒体关闭时触发
}
else if (eventType == MediaPlayerEvent.EventType.SubtitleChange)
{
//字幕改变时触发
}
else if (eventType == MediaPlayerEvent.EventType.Stalled)
{
//当媒体停止时触发(例如,当失去与媒体流的连接时)
}
else if (eventType == MediaPlayerEvent.EventType.Unstalled)
{
//当媒体从停止状态恢复时触发(例如,当重新建立丢失的连接时)
}
else if (eventType == MediaPlayerEvent.EventType.ResolutionChanged)
{
//当视频的分辨率发生变化(包括负载)时触发。对自适应流有用
}
else if (eventType == MediaPlayerEvent.EventType.StartedSeeking)
{
// 搜索开始时触发
}
else if (eventType == MediaPlayerEvent.EventType.FinishedSeeking)
{
// 搜索结束时触发
}
else if (eventType == MediaPlayerEvent.EventType.StartedBuffering)
{
//缓冲开始时触发
}
else if (eventType == MediaPlayerEvent.EventType.FinishedBuffering)
{
//缓冲完成时触发
}
else if (eventType == MediaPlayerEvent.EventType.PropertiesChanged)
{
//在任何属性(例如立体声包装更改)时触发 - 这必须手动触发
}
else if (eventType == MediaPlayerEvent.EventType.PlaylistItemChanged)
{
//在播放列表中播放新项目时触发
}
else if (eventType == MediaPlayerEvent.EventType.PlaylistFinished)
{
//当播放列表到达结尾时触发
}
else if (eventType == MediaPlayerEvent.EventType.TextTracksChanged)
{
//添加或删除文本轨道时触发
}
else if (eventType == MediaPlayerEvent.EventType.TextCueChanged)
{
//当要显示的文本发生变化时触发
}
}
}