using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class BoFangQi : MonoBehaviour
{
public Text videoTimeText; // 视频的当前时间 Text
public Text videoNameText; // 视频的总时长 Text
public Slider videoTimeSlider; // 视频的时间 Slider
// 定义参数获取VideoPlayer组件和RawImage组件
internal VideoPlayer videoPlayer;
private RawImage rawImage;
// 当前视频的总时间值和当前播放时间值的参数
private int currentHour;
private int currentMinute;
private int currentSecond;
/// <summary>
/// 总时间
/// </summary>
private int zongHour, zongMinu, zongSecond;
private bool isPlay = true; //是否正在播放视频
public Button playPauseButton; //播放暂停按钮
public Button stopButton; //停止播放按钮
// Use this for initialization
void Start()
{
//清空文本
videoNameText.text = "";
videoTimeText.text = "";
//获取场景中对应的组件
videoPlayer = this.GetComponent<VideoPlayer>();
rawImage = this.GetComponent<RawImage>();
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
videoPlayer.SetTargetAudioSource(0, this.GetComponent<AudioSource>());
videoPlayer.playOnAwake = false;
videoPlayer.IsAudioTrackEnabled(0);
playPauseButton.onClick.AddListener(PlayOrPause);
stopButton.onClick.AddListener(StopVideo);
}
// Update is called once per frame
void Update()
{
//把VideoPlayerd的视频渲染到UGUI的RawImage
rawImage.texture = videoPlayer.texture;
ShowVideoTime();
}
/// <summary>
/// 显示当前视频的时间
/// </summary>
private void ShowVideoTime()
{
// 当前的视频播放时间
currentHour = (int)videoPlayer.time / 3600;
currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
// 把当前视频播放的时间显示在 Text 上
videoTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2}",
currentHour, currentMinute, currentSecond);
// 把当前视频播放的时间比例赋值到 Slider 上
// videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);
videoTimeSlider.value =(float)(videoPlayer.time/( videoPlayer.frameCount / videoPlayer.frameRate));
ShowVideoLength();//视频总时长
}
/// <summary>
/// 显示视频的总时长
/// </summary>
/// <param name="videos">当前视频</param>
void ShowVideoLength()
{
zongHour = ((int)(videoPlayer.frameCount / videoPlayer.frameRate)) / 3600;
zongMinu = (int)(((int)(videoPlayer.frameCount / videoPlayer.frameRate)) - zongHour * 3600) / 60;
zongSecond = (int)(((int)(videoPlayer.frameCount / videoPlayer.frameRate)) - zongHour * 3600 - zongMinu * 60);
if (videoTimeText.text!= "00:00:00")
{
videoNameText.text = string.Format("{0:D2}:{1:D2}:{2:D2} ",
zongHour, zongMinu, zongSecond);
}
// videoNameText.text =( (int)(videoPlayer.frameCount / videoPlayer.frameRate)).ToString();
}
/// <summary>
/// 视频播放暂停
/// </summary>
void PlayOrPause()
{
//如果视频片段不为空,并且视频画面没有播放完毕
if (videoPlayer.url != null && (ulong)videoPlayer.frame < videoPlayer.frameCount)
{
//如果视频正在播放
if (isPlay)
{
videoPlayer.Pause();
isPlay = false;
}
else
{
videoPlayer.Play();
isPlay = true;
}
}
}
void StopVideo()
{
videoPlayer.Stop();
// videoTimeSlider.gameObject.SetActive(false);
videoNameText.text = "";
videoTimeText.text = "";
isPlay = true;
}
}
通过RawImage和Slider来控制视频进度