zoukankan      html  css  js  c++  java
  • Unity3D使用EasyMovieTexture插件播放视频

    Unity3D对于视频的播放兼容个人感觉很差劲,之前写过一篇使用Unity3D自己自带的一些功能去播放视频,链接如下:

    http://www.cnblogs.com/xiaoyulong/p/8627016.html

    今天我们使用EasyMovieTexture插件播放视频播放视频。个人觉得EasyMovieTexture插件还是比较好用的,里面封装了很多API,使用起来很方便。有一个不好的地方就是很多方法只有在视频播放时才有效果,就是觉得这个有点坑。

    如上图,新建一个物体,挂上 MediaPlayerCtrl 脚本就基本上能完成视频的播放了。关于MediaPlayerCtrl脚本的详细介绍可以看这个链接https://wenku.baidu.com/view/4cea74a918e8b8f67c1cfad6195f312b3169ebfe.html,我这里说几个简单的

    StrFileName:输入传统文件名表示在StreamingAssets文件夹中。我们也是可以输入路径的。

    Target Material:连接GameObject更新视频贴图。说白了就是你想在哪个物体上显示画面,就把哪个物体拖进去。

    B Loop:是否循环播放。

    B Auto Play:是否激活时自动播放。

    下面是我封装了一些常用的方法,应该能满足一个简单视频播放器的开发了,很简单,代码如下:

      1 using System.Collections;
      2 using System.Collections.Generic;
      3 using UnityEngine;
      4 
      5 public class VideoController : MonoBehaviour
      6 {
      7     private MediaPlayerCtrl _mediaPlayer;
      8     private bool _isPlaying;//视频是否正在播放
      9     private float _totalTime;//视频总时长
     10     private float _currentTime;//视频当前播放时长
     11 
     12     private void Start()
     13     {
     14         Init();
     15     }
     16 
     17     private void Init()
     18     {
     19         _mediaPlayer = this.GetComponent<MediaPlayerCtrl>();
     20     }
     21 
     22     /// <summary>
     23     /// 视频是否正在播放
     24     /// </summary>
     25     public bool isPlaying
     26     {
     27         get
     28         {
     29             if (_mediaPlayer.GetCurrentState() == MediaPlayerCtrl.MEDIAPLAYER_STATE.PLAYING)
     30             {
     31                 _isPlaying = true;
     32             }
     33             else
     34             {
     35                 _isPlaying = false;
     36             }
     37             return _isPlaying;
     38         }
     39     }
     40     /// <summary>
     41     /// 视频总时长
     42     /// </summary>
     43     public float totalTime
     44     {
     45         get
     46         {
     47             if (isPlaying)
     48             {
     49                 return _mediaPlayer.GetDuration() / 1000;
     50             }
     51             return -1;
     52         }
     53     }
     54     /// <summary>
     55     /// 视频当前播放时长
     56     /// </summary>
     57     public float currentTime
     58     {
     59         get
     60         {
     61             if (isPlaying)
     62             {
     63                 return _mediaPlayer.GetSeekPosition() / 1000;
     64             }
     65             return -1;
     66         }
     67     }
     68     /// <summary>
     69     /// 视频是否循环播放
     70     /// </summary>
     71     public bool isLoop
     72     {
     73         get
     74         {
     75             return _mediaPlayer.m_bLoop;
     76         }
     77         set
     78         {
     79             _mediaPlayer.m_bLoop = value;
     80         }
     81     }
     82 
     83     /// <summary>
     84     /// 读取视频
     85     /// </summary>
     86     /// <param name="_path">视频路径</param>
     87     public void LoadMovie(string _path)
     88     {
     89         _mediaPlayer.Load(_path);
     90     }
     91     /// <summary>
     92     /// 视频播放
     93     /// </summary>
     94     public void MoviePlay()
     95     {
     96         _mediaPlayer.Play();
     97     }
     98     /// <summary>
     99     /// 视频暂停
    100     /// </summary>
    101     public void MoviePause()
    102     {
    103         _mediaPlayer.Pause();
    104     }
    105     /// <summary>
    106     /// 视频停止播放。
    107     /// 停止与暂停的区别是:停止后,视频会从头开始播放,而暂停是接着暂停的位置播放。
    108     /// </summary>
    109     public void MovieStop()
    110     {
    111         _mediaPlayer.Stop();
    112     }
    113     /// <summary>
    114     /// 视频重播
    115     /// </summary>
    116     public void MovieReplay()
    117     {
    118         _mediaPlayer.Stop();
    119         _mediaPlayer.Play();
    120     }
    121     /// <summary>
    122     /// 设置视频播放速度。
    123     /// 这个方法可以用来做快进功能,但是无法做快退功能
    124     /// </summary>
    125     /// <param name="_i"></param>
    126     public void SetMovieSpeed(int _i)
    127     {
    128         _mediaPlayer.SetSpeed(_i);
    129     }
    130     /// <summary>
    131     /// 视频跳到指定时间播放
    132     /// </summary>
    133     /// <param name="time"></param>
    134     public void MovieToTime(float time)
    135     {
    136         _mediaPlayer.SeekTo((int)(time * 1000));
    137     }
    138 }

    关于视频的播放进度条的显示,已经通过拉动进度条调整视频播放进度,这些功能我们做一些简单的计算就能实现,很简单,这里就不上代码了。

  • 相关阅读:
    links[v1]
    WebSocket handshake: Unexpected response code: 404
    Spring mvc 启动 和 请求分发
    匹配括号
    js parseFloat 精度问题
    遍历查找跳格子逻辑
    Generic type test java
    java高效判断素数
    从数组中取3个数全排列
    vue-cli
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/9062176.html
Copyright © 2011-2022 走看看