AVI Player with Playmaker actions 使用UGUI显示视频以及控制播放视频 (二)
来源:互联网 发布:汉王ocr扫描软件 编辑:程序博客网 时间:2024/05/21 09:55
上一篇我们简单介绍了AVI的MoviePlayer属性面板,感觉上一篇看不看都没所谓,可能你会觉得这些并没神马卵用,只能说每一个人都有自己看代码的方式和爱好吧,像我一般喜欢从属性面板研究起,不说了扯远了。那么我们继续研究AVI讲一下怎么制作UGUI的播放器,其实我研究了3个播放器的插件都有一个共同的特点,他们都是将视频画面转化成了Texture或者是Texture2D的方式进行播放。那么意味着你只要获取到Texture的参数就可以使用NGUI或者是UGUI进行播放,不需要使用GUI的方式来播放视频,这样就可以利用UI组件来直接空画面大小和摆放位置。
我们需要找到这里面的Texture或Texture2D,这里我们需要看回MoviePlayer脚本,细心的查看后会发现并没有这个参数定义。我们再细心点看看你会发现这个脚本是继承一个叫MoviePlayerBase类,如下图所示:
我们去查看这个MoviePlayerBase类你会发现第一个参数就是Texture2D类型的,然后我们看看作者的注释你会惊奇的发现没错就是我们的需要的参数。注释如下图所示:
那么我们就可以利用NGUI或者UGUI进行画面大小的和位置摆放控制等。接下来我们来用UGUI按钮来控制视频的播放,我们需要Play,Pause,Load。界面布局就简单点这里我们用UGUI的RawImage组件来做显示组件,布局如下图所示:
那么我们来添加代码吧,我们先添加一个MoviePlayer脚本放到Canvas后不就不用管了,接下来就没他的事情了,然后我们在Project窗口创建一个Resources文件夹把官方案例的视频进去,因为接下来我们实现动态加载视频。如图所示:
然后我们来添加自己的代码,把脚本放在RawImage组件上,这里我就详细说了直接丢出代码让你们自己去看了,里面还包括一些事触屏或是鼠标控制快进后退的代码,有兴趣的同学可以去自己研究一下,代码如下:
using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using UnityEngine.UI;public class test : MonoBehaviour{ public MoviePlayer moviePlayer; public float movieSpeed = 1.0f; private RawImage rawImage; private float movieTime; private bool isClickLoad = false; // Use this for initialization void Start() { Init(); } public void Init() { rawImage = this.gameObject.GetComponent<RawImage>(); moviePlayer.play = false; } // Update is called once per frame void Update() { UpdateMovie(); } public void OnClickPlay() { moviePlayer.play = true; } public void OnClickPause() { moviePlayer.play = false; } public void OnClickLoad() { if (!isClickLoad) { Resources.UnloadUnusedAssets(); TextAsset temp = Resources.Load<TextAsset>("Sintel (480p mjpeg, 2ch24khz alaw).avi"); if (temp == null) { Debug.Log("Vodie:null!!"); } moviePlayer.source = temp; moviePlayer.Reload(); moviePlayer.videoTime = 0.0f; moviePlayer.videoFrame = 0; isClickLoad = true;<span style="font-family: Arial, Helvetica, sans-serif;"> </span> } } public void UpdateMovie() { rawImage.texture = moviePlayer.framebuffer;#if UNITY_IPHONE || UNITY_ANDROID if (EventSystem.current.IsPointerOverGameObject() && EventSystem.current.currentSelectedGameObject == null) { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) { OnClickPause(); movieTime = moviePlayer.videoTime; } if (Input.touchCount > 0 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(0).phase == TouchPhase.Stationary)) { if (Input.GetAxis("Mouse X") != 0) movieTime = movieTime + Input.GetAxis("Mouse X") * movieSpeed; if (movieTime < 0) movieTime = 0; moviePlayer.videoTime = movieTime; } }#elif UNITY_STANDALONE_WIN if (EventSystem.current.IsPointerOverGameObject() && EventSystem.current.currentSelectedGameObject == null) { if (Input.GetMouseButtonDown(0)) { OnClickPause(); movieTime = moviePlayer.videoTime; } if (Input.GetMouseButton(0)) { if (Input.GetAxis("Mouse X") != 0) movieTime = movieTime + Input.GetAxis("Mouse X") * movieSpeed; if (movieTime < 0) movieTime = 0; moviePlayer.videoTime = movieTime; } }#endif }}
然后我们分别把OnClickPlay,OnClickPause,OnClickLoad分别设置到刚刚弄好的按钮上,然后运行开看看效果吧!下图为我们的运行效果图:
你可以试试点住鼠标左键然后左右拖动一下,视频可以正常的快进和倒退。你也可以发布到安卓和iOS平台上进行测试一下。明天或者后天我会把最后的一个视频转化格式方法写出来的,如果你天真的以为是用AVI格式的视频再后面添加bytes那就大错特错了,这个插件说真的还真不错,如果没有那个鸡肋的视频转化方式或许会普及使用吧。详细的情况我们在第三篇会讲到得了。
----Begonia
- AVI Player with Playmaker actions 使用UGUI显示视频以及控制播放视频 (二)
- AVI Player with Playmaker actions 播放插件浅谈 (一)
- AVI Player with Playmaker actions 视频转化格式之Duplicate frame remover(四)
- AVI Player with Playmaker (Unity视频播放插件)
- AVI Player with Playmaker actions 视频格式转化之FFMPEG转化 (三)
- FFmpeg的使用——PHP转换视频、截取视频以及JW Player播放器控制
- 【OpenCV学习笔记】1.2 播放AVI视频&视频播放控制
- 【opencv的学习】播放avi视频和视频播放控制
- 播放AVI视频(加进度控制条)
- opencv学习(二)avi格式视频播放
- 播放AVI视频
- OPENCV--播放AVI视频
- 使用MATLAB2010实现AVI视频播放
- mac_QuickTime Player播放视频
- opencv第二章-显示一张图片和播放avi视频
- 第二个程序——播放AVI视频,并通过移动slider 控制视频播放
- opencv播放AVI视频(2)
- OpenCV(2)-播放AVI视频
- 消除svn选定(checkout)桌面上显示一大堆问号
- 自主研发一套PHP前端开发框架(22)
- JS面向对象的程序设计
- iOS基础笔记
- 前端开发学习笔记(一)
- AVI Player with Playmaker actions 使用UGUI显示视频以及控制播放视频 (二)
- 深度学习方法:受限玻尔兹曼机RBM(一)基本概念
- Java NIO系列1:从操作系统的角度剖析I/O
- 树的前中后非递归遍历
- Android触控
- 线程示例:多线程卖票
- EditText弹出软键盘,空白处隐藏
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题