using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class ToPlayVideo : MonoBehaviour
{
public Text videoTimeText; // 视频的当前时间 Text
public Text videoNameText; // 视频的总时长 Text
public Slider videoTimeSlider; // 视频的时间 Slider
// 定义参数获取VideoPlayer组件和RawImage组件
internal VideoPlayer videoPlayer;
private RawImage rawImage;
public Texture pingBao; // 屏保图片
// 当前视频的总时间值和当前播放时间值的参数
private int currentHour;
private int currentMinute;
private int currentSecond;
private int clipHour;
private int clipMinute;
private int clipSecond;
public Sprite play;
public Sprite pause;
private bool isPlay = true; //是否正在播放视频
public Button playPauseButton; //播放暂停按钮
//[Header("停止播放按钮")]
//public Button stopButton; //停止播放按钮
[Header("选择当前视频")]
public Button button1;
[Header("下一步")]
public Button next;
//获取视频时长
public float video_url_length;
void Init()
{
videoTimeText.gameObject.SetActive(false);
videoNameText.gameObject.SetActive(false);
videoTimeSlider.gameObject.SetActive(false);
playPauseButton.gameObject.SetActive(false);
next.gameObject.SetActive(false);
if (next.name == "下一步")
{
videoPlayer.url = Application.streamingAssetsPath + "/基于机器视觉的焊缝识别与跟踪系统/2.mp4";
}
else if (next.name == "重置")
{
videoPlayer.url = Application.streamingAssetsPath + "/视频/视频.mp4";
}
}
// Use this for initialization
void Start()
{
//清空文本
videoNameText.text = "";
videoTimeText.text = "";
//获取场景中对应的组件
videoPlayer = this.GetComponent<VideoPlayer>();
rawImage = this.GetComponent<RawImage>();
videoPlayer.playOnAwake = false;
videoPlayer.IsAudioTrackEnabled(0);
Init();
playPauseButton.onClick.AddListener(PlayOrPause);
button1.onClick.AddListener(delegate { OnClick(); });
}
// Update is called once per frame
void Update()
{
//如果videoPlayer没有对应的视频texture,则返回屏保
if (videoPlayer.texture == null)
{
rawImage.texture = pingBao;
return;
}
//把VideoPlayerd的视频渲染到UGUI的RawImage
rawImage.texture = videoPlayer.texture;
if (videoPlayer.isPlaying)
{
ShowVideoTime();
}
}
/// <summary>
/// 显示当前视频的时间
/// </summary>
private void ShowVideoTime()
{
//通过url 获取的视频 如果直接托可用 VideoPlayer.clip.length
video_url_length = (videoPlayer.frameCount / videoPlayer.frameRate);
// 当前的视频播放时间
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 / video_url_length);
}
/// <summary>
/// 显示视频的总时长
/// </summary>
/// <param name="videos">当前视频</param>
void ShowVideoLength()
{
videoPlayer.Play();
videoPlayer.SetDirectAudioMute(0, false);
videoTimeSlider.gameObject.SetActive(true);
clipHour = 191 / 3600;
clipMinute = (int)(191 - clipHour * 3600) / 60;
clipSecond = (int)(191 - clipHour * 3600 - clipMinute * 60);
videoNameText.text = string.Format("视频的总时长:{0:D2}:{1:D2}:{2:D2} ",
clipHour, clipMinute, clipSecond);
}
private void OnClick()
{
ShowVideoLength();
videoTimeText.gameObject.SetActive(true);
videoNameText.gameObject.SetActive(true);
videoTimeSlider.gameObject.SetActive(true);
playPauseButton.gameObject.SetActive(true);
next.gameObject.SetActive(true);
}
/// <summary>
/// 视频播放暂停
/// </summary>
void PlayOrPause()
{
//如果视频片段不为空,并且视频画面没有播放完毕
if ((ulong)videoPlayer.frame < videoPlayer.frameCount)
{
//如果视频正在播放
if (isPlay)
{
playPauseButton.image.sprite = pause;
videoPlayer.Pause();
isPlay = false;
}
else
{
playPauseButton.image.sprite = play;
videoPlayer.Play();
isPlay = true;
}
}
}
void StopVideo()
{
videoPlayer.Stop();
playPauseButton.image.sprite = play;
videoTimeSlider.gameObject.SetActive(false);
videoNameText.text = "";
videoTimeText.text = "";
isPlay = true;
}
}
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 继承 拖拽接口
/// </summary>
public class SliderEvent : MonoBehaviour, IDragHandler, IEndDragHandler
{
[SerializeField]
public ToPlayVideo toPlayVideo; // 视频播放的脚本
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 给 Slider 添加开始拖拽事件
/// </summary>
/// <param name="eventData"></param>
public void OnDrag(PointerEventData eventData)
{
toPlayVideo.videoPlayer.Pause();
SetVideoTimeValueChange();
}
/// <summary>
/// 当前的 Slider 比例值转换为当前的视频播放时间
/// </summary>
private void SetVideoTimeValueChange()
{
toPlayVideo.videoPlayer.time = toPlayVideo.videoTimeSlider.value * toPlayVideo.video_url_length;
}
/// <summary>
/// 给 Slider 添加结束拖拽事件
/// </summary>
/// <param name="eventData"></param>
public void OnEndDrag(PointerEventData eventData)
{
toPlayVideo.videoPlayer.Play();
}
}
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class ToPlayVideo : MonoBehaviour
{
public static ToPlayVideo instance;
[Header("当前时间")]
public Text videoTimeText; // 视频的当前时间 Text
[Header("总时间")]
public Text videoNameText; // 视频的总时长 Text
[Header("控制视频播放")]
public Slider videoTimeSlider; // 视频的时间 Slider
// 定义参数获取VideoPlayer组件和RawImage组件
public VideoPlayer videoPlayer;
private RawImage rawImage;
[Header("屏保图片")]
public Texture pingBao; // 屏保图片
// 当前视频的总时间值和当前播放时间值的参数
private int currentHour;
private int currentMinute;
private int currentSecond;
private int clipHour;
private int clipMinute;
private int clipSecond;
[Header("播放图标")]
public Sprite play;
[Header("暂停图标")]
public Sprite pause;
private bool isPlay = true; //是否正在播放视频
[Header("播放暂停按钮")]
public Button playPauseButton; //播放暂停按钮
[Header("全屏与缩小")]
public Button quan_ping; //停止播放按钮
[Header("下一步")]
public Button next;
//------------------------
//画布大小
RectTransform rect_player;
Vector2 v_start;
private bool stop;
//滑动条能否 动
bool switch_bool = true;
public void PointerDown()
{
switch_bool = false;
}
public void PointerUp()
{
switch_bool = true;
}
public void SliderEvent(float value)
{
videoPlayer.frame = long.Parse((value * videoPlayer.frameCount).ToString("0."));
PointerDown();
}
private void Awake()
{
instance = this;
}
// Use this for initialization
void Start()
{
//清空文本
videoNameText.text = "";
videoTimeText.text = "";
//获取场景中对应的组件
videoPlayer = transform.GetComponent<VideoPlayer>();
if (videoPlayer != null)
{
videoPlayer.url = Application.streamingAssetsPath + "/视频/视频.mp4";
videoPlayer.playOnAwake = false;
videoPlayer.IsAudioTrackEnabled(0);
}
rawImage = this.GetComponent<RawImage>();
rect_player = videoPlayer.GetComponent<RectTransform>();
v_start = rect_player.sizeDelta;
videoTimeText.gameObject.SetActive(false);
videoNameText.gameObject.SetActive(false);
videoTimeSlider.gameObject.SetActive(false);
playPauseButton.gameObject.SetActive(true);
playPauseButton.onClick.AddListener(PlayOrPause);
quan_ping.onClick.AddListener(delegate () { Exture_but(quan_ping); });
next.onClick.AddListener(delegate () { Exture_but(next); });
videoTimeSlider.onValueChanged.AddListener((float value) => SliderEvent(value));
OnClick();
}
//全屏
public void Exture_but(Button but)
{
switch (but.name)
{
case "跳过":
break;
case "全屏":
if (stop == false)
{
RectTransform demo = GameObject.Find("Canvas").GetComponent<RectTransform>();
rect_player.sizeDelta = demo.sizeDelta;
print("放大" + demo.sizeDelta);
}
else
{
RectTransform demo = GameObject.Find("Canvas").GetComponent<RectTransform>();
rect_player.sizeDelta = v_start;
print("减小" + v_start);
}
stop = !stop;
break;
default:
break;
}
}
// Update is called once per frame
void Update()
{
//如果videoPlayer没有对应的视频texture,则返回屏保
if (videoPlayer.texture == null)
{
rawImage.texture = pingBao;
return;
}
//把VideoPlayerd的视频渲染到UGUI的RawImage
rawImage.texture = videoPlayer.texture;
ShowVideoTime();
//视频长度 秒
print("length" + (int)videoPlayer.length);
//视频长度 帧=秒*/24
print("frameCount" + (int)videoPlayer.frameCount);
if (isPlay)
{
//更新时长
OnClick();
}
}
private void LateUpdate()
{
if (switch_bool)
{
videoTimeSlider.value = (float.Parse(videoPlayer.frame.ToString()) / float.Parse(videoPlayer.frameCount.ToString()));
}
}
/// <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);
}
/// <summary>
/// 显示视频的总时长
/// </summary>
/// <param name="videos">当前视频</param>
void ShowVideoLength()
{
videoPlayer.Play();
videoPlayer.SetDirectAudioMute(0, false);
videoTimeSlider.gameObject.SetActive(true);
clipHour = (int)videoPlayer.length / 3600;
clipMinute = (int)((int)videoPlayer.length - clipHour * 3600) / 60;
clipSecond = (int)((int)videoPlayer.length - clipHour * 3600 - clipMinute * 60);
videoNameText.text = string.Format("视频的总时长:{0:D2}:{1:D2}:{2:D2} ",
clipHour, clipMinute, clipSecond);
}
private void OnClick()
{
videoTimeText.gameObject.SetActive(true);
videoNameText.gameObject.SetActive(true);
videoTimeSlider.gameObject.SetActive(true);
playPauseButton.gameObject.SetActive(true);
next.gameObject.SetActive(true);
ShowVideoLength();
}
/// <summary>
/// 视频播放暂停
/// </summary>
void PlayOrPause()
{
if (isPlay == true)
{
videoPlayer.Pause();
playPauseButton.image.sprite = play;
}
else
{
videoPlayer.Play();
playPauseButton.image.sprite = pause;
}
isPlay = !isPlay;
}
}