Unity VideoPlayer播放视频 Slider控制播放进度
2018-11-16 15:19
218 查看
[code]using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class ToPlayVideo : MonoBehaviour { public VideoClip[] videoClips; // 视频的文件 参数 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; //播放暂停按钮 public Button stopButton; //停止播放按钮 public Button button1; public Button button2; public Button button3; public Button button4; // 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); button1.onClick.AddListener(delegate { OnClick(0); }); button2.onClick.AddListener(delegate { OnClick(1); }); button3.onClick.AddListener(delegate { OnClick(2); }); button4.onClick.AddListener(delegate { OnClick(3); }); } // 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(); } /// <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); } /// <summary> /// 显示视频的总时长 /// </summary> /// <param name="videos">当前视频</param> void ShowVideoLength(VideoClip videos) { videoPlayer.clip = videos; videoPlayer.Play(); videoTimeSlider.gameObject.SetActive(true); clipHour = (int)videoPlayer.clip.length / 3600; clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60; clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60); videoNameText.text = string.Format("{0:D2}:{1:D2}:{2:D2} ", clipHour, clipMinute, clipSecond); } private void OnClick(int num) { switch (num) { case 0: ShowVideoLength(videoClips[0]); break; case 1: ShowVideoLength(videoClips[1]); break; case 2: ShowVideoLength(videoClips[2]); break; case 3: ShowVideoLength(videoClips[3]); break; case 4: ShowVideoLength(videoClips[4]); break; default: break; } } /// <summary> /// 视频播放暂停 /// </summary> void PlayOrPause() { //如果视频片段不为空,并且视频画面没有播放完毕 if (videoPlayer.clip != null && (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; } }
[code]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.videoPlayer.clip.length; } /// <summary> /// 给 Slider 添加结束拖拽事件 /// </summary> /// <param name="eventData"></param> public void OnEndDrag(PointerEventData eventData) { toPlayVideo.videoPlayer.Play(); } }
相关文章推荐
- JZVIdeoPlayer(节操视频播放)
- OpenCV学习笔记(3)——进度条视频播放控制
- 使用CVideoPlayerUtility播放视频,在某些型号的手机上只有声音没有图像的问题
- 第二个程序——播放AVI视频,并通过移动slider 控制视频播放
- Unity使用AVPro Video插件播放服务器上的全景视频
- Android 通过VideoView+MediaPlayer实现视频播放
- 【Delphi】从内存(MemoryStream)使用WMP(WindowsMediaPlayer)控件播放视频音频(Play Video with WMP from MemoryStream)
- 学习日记--Android VideoView播放视频控制:开始、暂停、快进
- Android视频播放项目总结之 使用Android中的videoView自己定义,暂停,播放时间,总时间,进度等。
- 使用AV Pro Video 在unity里播放视频最简单操作
- VideoView以及Surface+MediaPlayer播放视频RAW下视频方式
- 使用JiaoZiVideoPlayer播放网络视频,暂停继续
- H5 video 标签 播放事件 视频加载完成事件 获取视频播放进度时间
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- Unity实现RawImage图片显示视频 、灵活配置控制视频播放
- Android VideoView播放视频控制:开始、暂停、快进(3)
- 安卓使用videoview进行音频、视频播放,及播放控制
- H5视频播放 vue-video-player
- Android视频播放实现的三种办法(MediaPlayer+SurfaceView,VideoView,Vitamio框架)
- Video组件:控制视频的播放与暂停