关于Unity视频播放器插件 AVPro Video(一)平面UI视频播放

1.官网下载该插件或者我分享的链接:

链接:https://pan.baidu.com/s/1boGeJ8r 密码:mvbf

2.新建项目导入资源,添加以下游戏物体与UI到场景中

3.此处先建立一个Canvas再创建

4.将创建好的MediaPlayer组件拖入

5.根据自定义脚本持有该组件,控制该组件面板上的属性来间接控制视屏的播放

6.根据自定义的脚本创建自定义的开关,滚动条等显示UI

7.常用的实现功能脚本如下

  1 /*************************************************
  2  * 项目名称:Unity实现视频播放功能
  3  * 脚本创建人:魔卡
  4  * 脚本创建时间:2017.12.21
  5  * 脚本功能:控制视频播放类
  6  * ***********************************************/
  7 using System.Collections;
  8 using System.Collections.Generic;
  9 using RenderHeads.Media.AVProVideo;
 10 using UnityEngine;
 11 using UnityEngine.UI;
 12
 13 //控制视频播放类
 14 public class VideoController : MonoBehaviour
 15 {
 16     //持有控制视频播放的组件
 17     public MediaPlayer mediaPlayer;
 18
 19     //持有播放暂停切换开关
 20     public Toggle m_videoToggle;
 21
 22     //持有是否循环播放开关
 23     public Toggle m_loopToggle;
 24
 25     //持有控制播放速度滚动条
 26     public Slider m_playSpeedSlider;
 27     //持有控制播放速度的下拉列表
 28     public Dropdown m_playSpeedDropdown;
 29
 30     //持有控制视频播放进度的进度条
 31     public Slider m_processSlider;
 32
 33     //持有显示当前播放与总播放的时间显示
 34     public Text m_videoTimeTex;
 35
 36     //持有返回几秒前按钮
 37     public Button m_backSecondsBtn;
 38     //设置每次点击返回的秒数
 39     private float m_backSeconds = 3f;
 40
 41     //持有控制音量的Slider
 42     public Slider m_volumeSlider;
 43     //持有静音开关
 44     public Toggle m_muteToggle;
 45     //存储静音状态前用户设置的音量
 46     private float m_customVolume;
 47
 48     void Awake()
 49     {
 50         //初始化
 51         //注册播放暂停开关事件
 52         m_videoToggle.onValueChanged.AddListener(DoPlayOrPause);
 53         //注册是否循环播放开关事件
 54         m_loopToggle.onValueChanged.AddListener(DoSetLoop);
 55         //注册控制速度的滚动天触发事件
 56         m_playSpeedSlider.onValueChanged.AddListener(DoChangeSpeed);
 57
 58         //添加下拉列表选项
 59         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+4"));
 60         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+3"));
 61         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+2"));
 62         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+1"));
 63         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "+0"));
 64         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-1"));
 65         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-2"));
 66         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-3"));
 67         m_playSpeedDropdown.options.Add(new Dropdown.OptionData( "-4"));
 68         //设置初始速度显示值
 69         m_playSpeedDropdown.value = 3;
 70         m_playSpeedDropdown.captionText.text = m_playSpeedDropdown.options[3].text;
 71         //注册控制速度的下拉列表触发事件
 72         m_playSpeedDropdown.onValueChanged.AddListener(DoChangeSpeed);
 73
 74         //注册视频播放进度条值改变触发事件
 75         m_processSlider.onValueChanged.AddListener(OnProcessSliderChange);
 76
 77         //注册返回1几秒前按钮触发事件
 78         m_backSecondsBtn.onClick.AddListener(OnBackSecondsClick);
 79
 80         //注册音量Slider事件
 81         m_volumeSlider.onValueChanged.AddListener(OnVolumeSliderChange);
 82         //注册静音开关事件
 83         m_muteToggle.onValueChanged.AddListener(OnMuteToggleClick);
 84
 85         //注册视频播放触发事件
 86         mediaPlayer.Events.AddListener(MediaEventHandler);
 87     }
 88
 89     /// <summary>
 90     /// 视频播放时间触发
 91     /// </summary>
 92     /// <param name="arg0"></param>
 93     /// <param name="arg1"></param>
 94     /// <param name="arg2"></param>
 95     private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
 96     {
 97         switch (arg1)
 98         {
 99             case MediaPlayerEvent .EventType .Closing :
100                 Debug.Log("关闭播放器触发");
101                 break;
102             case MediaPlayerEvent .EventType .Error :
103                 Debug.Log("报错误时触发");
104                 break;
105             case MediaPlayerEvent .EventType .FinishedPlaying ://注意:如果视频设置为循环播放模式,则不触发此项
106                 Debug.Log("播放完成触发");
107                 break;
108             case MediaPlayerEvent .EventType .FirstFrameReady :
109                 Debug.Log("准备完触发");
110                 break;
111             case MediaPlayerEvent.EventType.MetaDataReady:
112                 Debug.Log("媒体数据准备准备中触发");
113                 break;
114             case MediaPlayerEvent .EventType .ReadyToPlay :
115                 Debug.Log("准备去播放触发");
116                 break;
117             case MediaPlayerEvent .EventType .Started ://注意:每暂停之后的开始播放都会触发一次
118                 Debug.Log("开始播放触发");
119                 break;
120             default :
121                 Debug.Assert(false);
122                 break;
123         }
124     }
125
126     void Start ()
127     {
128         LoadVideo();
129
130         //初始化触发一次(同步声音大小)
131         OnVolumeSliderChange(m_volumeSlider .value);
132     }
133
134     void Update()
135     {
136         //时刻更新播放进度方法
137         DoUpdateVideoProcess();
138
139         //时刻更新播放时间显示方法
140         UpdateTimeText();
141     }
142
143     /// <summary>
144     /// 加载视频方法
145     /// </summary>
146     void LoadVideo()
147     {
148         //通过插件中的方法加载(参数为:1.加载路径格式(与面板上相对应)2.加载的文件名 3.默认是否开始播放)
149         mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, "BigBuckBunny_360p30.mp4", false);
150     }
151     /// <summary>
152     /// 播放与暂停开关点击触发
153     /// </summary>
154     /// <param name="s_isOn"></param>
155     void DoPlayOrPause(bool s_isOn)
156     {
157         //如果播放,开始播放并文字显示“播放”
158         if (s_isOn)
159         {
160             //通过持有的MediaPlayer类进行操控
161             mediaPlayer.Control.Play();
162             //更改播放开关显示的文字
163             m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "暂停";
164         }
165             //否则,暂停
166         else
167         {
168             mediaPlayer.Control.Pause();
169             //更改播放开关显示的文字
170             m_videoToggle.transform.Find("VideoText").GetComponent<Text>().text = "播放";
171         }
172     }
173     /// <summary>
174     /// 是否循环播放开关点击触发
175     /// </summary>
176     /// <param name="s_isOn"></param>
177     void DoSetLoop(bool s_isOn)
178     {
179         //通过持有的MediaPlayer类进行操控
180         mediaPlayer.Control.SetLooping(s_isOn);
181     }
182     /// <summary>
183     /// 改变播放速度方法(正的加速放映,负的倒放映)
184     /// </summary>
185     void DoChangeSpeed(float s_speed)//滑动条数值
186     {
187         //有部分瑕疵(正序倒序放调节过快反应会迟缓,与电脑配置有关)
188         mediaPlayer.Control.SetPlaybackRate(s_speed);
189     }
190     /// <summary>
191     /// 改变播放速度方法(正的加速放映,负的倒放映)
192     /// </summary>
193     void DoChangeSpeed(int s_speed)//下拉列表对应索引值
194     {
195         int tSpeed = 1;
196         switch (s_speed)
197         {
198             case 0:
199                 tSpeed = 4;
200                 break;
201             case 1:
202                 tSpeed = 3;
203                 break;
204             case 2:
205                 tSpeed = 2;
206                 break;
207             case 3:
208                 tSpeed = 1;
209                 break;
210             case 4:
211                 tSpeed = 0;
212                 break;
213             case 5:
214                 tSpeed = -1;
215                 break;
216             case 6:
217                 tSpeed = -2;
218                 break;
219             case 7:
220                 tSpeed = -3;
221                 break;
222             case 8:
223                 tSpeed = -4;
224                 break;
225             default :
226                 Debug.Assert(false);
227                 break;
228         }
229         //有部分瑕疵(正序倒序放调节过快反应会迟缓,与电脑配置有关)
230         mediaPlayer.Control.SetPlaybackRate(tSpeed);
231     }
232
233     /// <summary>
234     /// 时刻更新视频进度到滑动条上
235     /// </summary>
236     void DoUpdateVideoProcess()
237     {
238         //获取当前播放时长
239         float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
240         //获取视频总长度
241         float tVideoTime = mediaPlayer.Info.GetDurationMs();
242         //计算出对应的播放进度赋值给显示播放进度的进度条
243         m_processSlider.value = tCurrentTime/tVideoTime;
244     }
245
246     /// <summary>
247     /// 更新播放进度的时间显示
248     /// </summary>
249     void UpdateTimeText()
250     {
251         //对当前播放时间转换时间格式
252         //转化为 秒
253         int tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTimeMs()/1000;
254         //获取当前分数
255         int tCurrentMin = tCurrentSeconds/60;
256         //重新赋值剩余多少秒
257         tCurrentSeconds = tCurrentSeconds%60;
258         string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString();
259
260         //对总时间转化时间格式
261         //转化为秒
262         int tVideoTimeSeconds = (int) mediaPlayer.Info.GetDurationMs()/1000;
263         //获取总的分数
264         int tVideoTimeMin = tVideoTimeSeconds/60;
265         //重新复制剩余多少秒
266         tVideoTimeSeconds = tVideoTimeSeconds%60;
267         string tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString();
268
269         //拼接一下时间显示字符串
270         string tTime = string.Format("<color=red>{0}:{1}/{2}:{3}</color>", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr);
271         //string tTime = string.Format("<b>{0}:{1}/{2}:{3}</b>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);
272         //string tTime = string.Format("<i>{0}:{1}/{2}:{3}</i>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);
273
274         m_videoTimeTex.text =  tTime ;;
275     }
276
277     /// <summary>
278     /// 视频播放进度条值改变触发
279     /// </summary>
280     /// <param name="value"></param>
281     void OnProcessSliderChange(float value)
282     {
283         //获取视频总长度
284         float tVideoTime = mediaPlayer.Info.GetDurationMs();
285         //当前视频的时间
286         float tCurrentTime = m_processSlider.value*tVideoTime;
287         //将视频时间调到对应的节点
288         mediaPlayer.Control.Seek(tCurrentTime);
289     }
290
291
292     /// <summary>
293     /// 播放进度条开始拖动触发(EventTrigger触发)
294     /// </summary>
295     public void OnProcessSliderDragBegin()
296     {
297         //暂停播放
298         mediaPlayer.Control.Pause();
299     }
300
301     /// <summary>
302     /// 播放进度条结束拖动触发(EventTrigger触发)
303     /// </summary>
304     public void OnProcessSliderDragEnd()
305     {
306         //开始播放
307         mediaPlayer.Control.Play();
308     }
309
310
311     /// <summary>
312     /// 返回到几秒之前方法
313     /// </summary>
314     void OnBackSecondsClick()
315     {
316         //获取当前播放进度时间
317         float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
318
319         //10s前进度时间(如果存在前十秒则退,不存在还是当前时间进度)
320         tCurrentTime = (tCurrentTime - m_backSeconds * 1000) >= 0 ? tCurrentTime - m_backSeconds*1000 : tCurrentTime;
321
322         //设置进度时间
323         mediaPlayer.Control.Seek(tCurrentTime);
324     }
325
326     /// <summary>
327     /// 音量进度条改变触发
328     /// </summary>
329     /// <param name="value"></param>
330     void OnVolumeSliderChange(float value)
331     {
332         //保存当前已经设置的音量
333         if (value != 0)
334         {
335             m_customVolume = m_volumeSlider.value;
336         }
337         //设置音量
338         mediaPlayer.Control.SetVolume(value);
339         //如果音量手动调节到零,则将静音模式打开
340         if (value > 0)
341         {
342             m_muteToggle.isOn = false;
343         }
344         else
345         {
346             m_muteToggle.isOn = true;
347         }
348     }
349
350     /// <summary>
351     /// 静音开关触发
352     /// </summary>
353     /// <param name="s_isOn"></param>
354     void OnMuteToggleClick(bool s_isOn)
355     {
356         //如果静音
357         if (s_isOn)
358         {
359             //设置静音
360             m_volumeSlider.value = 0;
361             mediaPlayer.Control.SetVolume(0);
362         }
363             //不静音
364         else
365         {
366             m_volumeSlider.value = m_customVolume;
367             mediaPlayer.Control.SetVolume(m_customVolume);
368         }
369     }
370 }

时间: 2024-09-30 15:29:38

关于Unity视频播放器插件 AVPro Video(一)平面UI视频播放的相关文章

关于Unity视频播放器插件 AVPro Video(三)360度全景视频播放

1.官网下载该插件或者我分享的链接: 链接:https://pan.baidu.com/s/1boGeJ8r 密码:mvbf 2.拖入官方做好的预制体"360SphereVideo"或者"360CubeVideo"(两种不同的360度全景)到场景中,并将场景中的摄像机拖动到"Sphere"下方并Resert 3.设置"AVPro Video Media Player"上的Media Player 控制组件即可(具体操作参考&q

WEB视频播放器插件,总结

WEB视频播放器插件,总结 2018年07月29日 20:42:11 流光忆莲 阅读数:572更多 个人分类: 推荐文章收藏 以下是关于网页中嵌入视频播放插件的各种资料的总结 基于H5的Vediojs Jquery视频播放插件 jPlayer播放插件 JqeryVideo.js 和 Jplayer 下载 基于H5的Vediojs 官网: http://videojs.com/ 相关资料 https://blog.csdn.net/zhanghao143lina/article/details/7

网页视频播放器插件源码

1.ckplayer插件视频播放器 2.Flash插件播放器 <object type="application/x-shockwave-flash" data="video/vcastr3.swf" width="800" height="454" id="vcastr3"> <param name="movie" value="video/vcastr3.

HTML5视频播放器accessible html5 video player

accessible html5 video player 是一款开源的轻量级播放器,采用HTML5视频播放技术,支持字幕显示.视频自由跳播.重播等功能.该html5视频插件由paypal Accessibility 团队开发,兼容所有Firefox.chrome.以及ie10以上版本等浏览器.ie9仅支持内部视频调用. 简洁清新的视频播放界面可以让你在很短的时间内喜欢上它,至少我是真的被它的界面吸引到了,有一点遗憾的是无法全屏,如果有知道的朋友可以向大家分享! accessible html5

基于JSON数据HTML5视频播放器js插件教程

一.安装 可以通过Bower来安装该视频播放器插件. bower install frame-player 在页面中引入frameplayer.css和frameplayer.js文件. <link rel="stylesheet" href="path-to/frameplayer.css"> <script src="path-to/frameplayer.js"></script> 二.Html结构 在页

MP4视频播放器代码

mp4网页视频播放器代码: <video id="video" width="100%" src="http://www.mlhd.org/shipin/018.mp4" style="margin: h.264" controls></video> 此代码由河北魅力网络进行整理,能在网页中实现mp4播放,代码能自动加载视频缓冲条,演示娱乐图,默认为不自动播放,保留带宽. 大家在遇到视频播放的问题的时候

分享一个基于HTML5实现的视频播放器

什么是hivideo? 最近一段时间在使用PhoneGap开发一个App应用,App需要播放视频,本想直接使用html5的video,但使用它在全屏播放时不支持横屏播放,只能放弃.最终决定还是自己封装一个播放器算了,免得以后要扩展功能麻烦. 最近迷上hi这个单词,所以我给这个播放器取名叫做:hivideo. hivideo是一款基于html5的视频播放器,摒弃video原有的播放控制条样式,自己重写了一次.支持暂停.播放进度控制.声音控制.全屏播放.如果是要在手机端使用hivideo,全屏播放时

c#万能视频播放器(附代码)

原文:c#万能视频播放器(附代码) c#万能视频播放器 本人之前很多的文章中均提到了使用libvlc为播放器内核制作的播放器,也许有些朋友对此感兴趣,于是我用c#写了一个调用libvlc api实现的万能视频播放器,与大家分享一下.说它“万能”,当然是因为我们站在了vlc的肩膀上. vlc是一个强大而且开源的多媒体播放器,也可以说是一个多媒体平台.它支持非常广泛的媒体格式的本地播放,完全可以媲美mplayer,其对视频网络流的处理能力更是非常强悍.libvlc就是指的vlc的核心,它向外提供了一

HTML5实现的视频播放器01

HTML5实现的视频播放器 什么是hivideo? 最近一段时间在使用PhoneGap开发一个App应用,App需要播放视频,本想直接使用html5的video,但使用它在全屏播放时不支持横屏播放,只能放弃.最终决定还是自己封装一个播放器算了,免得以后要扩展功能麻烦. 最近迷上hi这个单词,所以我给这个播放器取名叫做:hivideo. hivideo是一款基于html5的视频播放器,摒弃video原有的播放控制条样式,自己重写了一次.支持暂停.播放进度控制.声音控制.全屏播放.如果是要在手机端使