本文章使用的API是最新的2.6.6版本,unity版本2021.3.21f1c1
1.事件
private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
{
switch (arg1)
{
case MediaPlayerEvent .EventType .Closing :
Debug.Log("关闭播放器触发");
break;
case MediaPlayerEvent .EventType .Error :
Debug.Log("报错误时触发");
break;
case MediaPlayerEvent .EventType .FinishedPlaying ://注意:如果视频设置为循环播放模式,则不触发此项
Debug.Log("播放完成触发");
break;
case MediaPlayerEvent .EventType .FirstFrameReady :
Debug.Log("准备完触发");
break;
case MediaPlayerEvent.EventType.MetaDataReady:
Debug.Log("媒体数据准备准备中触发");
break;
case MediaPlayerEvent .EventType .ReadyToPlay :
Debug.Log("准备去播放触发");
break;
case MediaPlayerEvent .EventType .Started ://注意:每暂停之后的开始播放都会触发一次
Debug.Log("开始播放触发");
break;
default :
//Debug.Assert(false);
break;
}
}
2.视频加载
//持有控制视频播放的组件
public MediaPlayer mediaPlayer;
//通过插件中的方法加载(参数为:1.加载路径格式(与面板上相对应)2.加载的文件名 3.默认是否开始播放)
mediaPlayer.OpenMedia(MediaPathType.RelativeToStreamingAssetsFolder, "AVProVideoSamples/RenderHeads-1080p30-H264.mp4", false)
3.视频暂停,播放,循环
mediaPlayer.Control.Play();//播放
mediaPlayer.Control.Pause();//暂停
mediaPlayer.Control.SetLooping(true);循环
4.制作进度条
/// <summary>
/// 时刻更新视频进度到滑动条上
/// </summary>
void DoUpdateVideoProcess()
{
//获取当前播放时长
float tCurrentTime = (float)mediaPlayer.Control.GetCurrentTime();
//获取视频总长度
float tVideoTime = (float)mediaPlayer.Info.GetDuration();
//计算出对应的播放进度赋值给显示播放进度的进度条
m_processSlider.value = (float)tCurrentTime/tVideoTime;
}
5.拖拽进度条
/// <summary>
/// 视频播放进度条值改变触发
/// </summary>
/// <param name="value"></param>
void OnProcessSliderChange(float value)
{
//获取视频总长度
float tVideoTime = (float)mediaPlayer.Info.GetDuration();
//当前视频的时间
float tCurrentTime = m_processSlider.value*tVideoTime;
//将视频时间调到对应的节点
mediaPlayer.Control.Seek(tCurrentTime);
}
/// <summary>
/// 播放进度条开始拖动触发(EventTrigger触发)
/// </summary>
public void OnProcessSliderDragBegin()
{
//暂停播放
mediaPlayer.Control.Pause();
}
/// <summary>
/// 播放进度条结束拖动触发(EventTrigger触发)
/// </summary>
public void OnProcessSliderDragEnd()
{
//开始播放
mediaPlayer.Control.Play();
}
6.制作时间进度text显示
/// <summary>
/// 更新播放进度的时间显示
/// </summary>
void UpdateTimeText()
{
//对当前播放时间转换时间格式
//转化为 秒
int tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTime();
//获取当前分数
int tCurrentMin = tCurrentSeconds/60;
//重新赋值剩余多少秒
tCurrentSeconds = tCurrentSeconds%60;
string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString();
//对总时间转化时间格式
//转化为秒
int tVideoTimeSeconds = (int) mediaPlayer.Info.GetDuration();
//获取总的分数
int tVideoTimeMin = tVideoTimeSeconds/60;
//重新复制剩余多少秒
tVideoTimeSeconds = tVideoTimeSeconds%60;
string tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString();
//拼接一下时间显示字符串
string tTime = string.Format("<color=red>{0}:{1}/{2}:{3}</color>", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr);
//string tTime = string.Format("<b>{0}:{1}/{2}:{3}</b>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);
//string tTime = string.Format("<i>{0}:{1}/{2}:{3}</i>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);
m_videoTimeTex.text = tTime ;
}
API版本做了更新,实现方法参考原文
关于Unity视频播放器插件 AVPro Video(一)平面UI视频播放 - 魔卡先生 - 博客园 (cnblogs.com)
中英文对照翻译