天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

304 lines
11 KiB

#if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_5
#define UNITY_FEATURE_UGUI
#endif
using UnityEngine;
#if UNITY_FEATURE_UGUI
using UnityEngine.UI;
using System.Collections;
using RenderHeads.Media.AVProVideo;
using UnityEngine.EventSystems;
using AX.MessageSystem;
using System;
using AX.TrackRecord;
namespace Video
{
public class VCR : MonoBehaviour
{
private VCR() { }
private volatile static VCR instance = null;
private static readonly object lockHelper = new object();
/// <summary>
/// 单例模式
/// </summary>
public static VCR Instance()
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
instance = new VCR();
}
}
return instance;
}
public static MediaPlayer _mediaPlayer;
private Toggle _PlayPauseToggle;
//private Button _PauseButton;
private Button _RewindButton;
private Slider _videoSeekSlider;
private float _setVideoSeekSliderValue;
private bool _wasPlayingOnScrub;
private Slider _audioVolumeSlider;
private float _setAudioVolumeSliderValue = 1;
private static Toggle _AutoStartToggle;
private Toggle _MuteToggle;
//五毛特效 鼠标滑过显示工具栏
private GameObject toolOnEnter;
private GameObject toolBar;
public static string _videoFiles;
private Toggle FullScreen;
public Action PlayBackFinishEvent;
private void Init()
{
_mediaPlayer = GameObject.Find("MediaPlayer").GetComponent<MediaPlayer>();
_PlayPauseToggle = TransformHelper.FindChild(this.transform, "PlayPauseToggle").GetComponent<Toggle>();
// _PauseButton = TransformHelper.FindChild(this.transform, "PauseButton").GetComponent<Button>();
_RewindButton = TransformHelper.FindChild(this.transform, "RewindButton").GetComponent<Button>();
FullScreen = TransformHelper.FindChild(this.transform, "FullScreen").GetComponent<Toggle>();
_videoSeekSlider = TransformHelper.FindChild(this.transform, "VideoSeekSlider").GetComponent<Slider>();
_audioVolumeSlider = TransformHelper.FindChild(this.transform, "AudioVolumeSlider").GetComponent<Slider>();
_AutoStartToggle = TransformHelper.FindChild(this.transform, "AutoStartToggle").GetComponent<Toggle>();
_MuteToggle = TransformHelper.FindChild(this.transform, "MuteToggle").GetComponent<Toggle>();
toolOnEnter = TransformHelper.FindChild(this.transform, "ToolOnEnter").gameObject;
toolBar = TransformHelper.FindChild(this.transform, "ToolBar").gameObject;
}
private void AddListener()
{
_PlayPauseToggle.onValueChanged.AddListener((bool isOn) => { if (isOn) OnPause(); else OnPlay(); });
//_PauseButton.onClick.AddListener(()=> OnPauseButton());
_RewindButton.onClick.AddListener(() => OnRewindButton());
_videoSeekSlider.onValueChanged.AddListener((float value) => OnVideoSeekSlider());
_audioVolumeSlider.onValueChanged.AddListener((float value) => OnAudioVolumeSlider());
_AutoStartToggle.onValueChanged.AddListener((bool value) => OnAutoStartChange());
_MuteToggle.onValueChanged.AddListener((bool value) => OnMuteChange());
FullScreen.onValueChanged.AddListener((bool value) => FullScreenChange());
EventTriggerListener.Get(toolOnEnter).onEnter = (PointerEventData data) => { toolBar.gameObject.SetActive(true);/* Cursor.visible = true;*/ };
EventTriggerListener.Get(toolBar).onExit = (PointerEventData data) => { toolBar.gameObject.SetActive(false); /*Cursor.visible = false;*/ };
}
#if false
public void OnOpenVideoFile()
{
_mediaPlayer.OpenVideoFromFile();
RemoveOpenVideoButton();
// SetButtonEnabled( "PlayButton", !_mediaPlayer.m_AutoStart );
// SetButtonEnabled( "PauseButton", _mediaPlayer.m_AutoStart );
}
#else
private void OnOpenVideoFile()
{
_mediaPlayer.m_VideoPath = string.Empty;
_mediaPlayer.m_VideoPath = _videoFiles;
if (_videoFiles == null)
{
_mediaPlayer.CloseVideo();
return;
}
else
_mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, _mediaPlayer.m_VideoPath, _AutoStartToggle.isOn);
}
#endif
private void OnAutoStartChange()
{
if (_mediaPlayer &&
_AutoStartToggle && _AutoStartToggle.enabled &&
_mediaPlayer.m_AutoStart != _AutoStartToggle.isOn)
{
_mediaPlayer.m_AutoStart = _AutoStartToggle.isOn;
}
if (_AutoStartToggle.isOn)
_AutoStartToggle.transform.Find("Background").GetComponent<Image>().color = Color.clear;
else
_AutoStartToggle.transform.Find("Background").GetComponent<Image>().color = Color.white;
}
private void FullScreenChange()
{
if (FullScreen.isOn)
{
this.transform.GetComponent<RectTransform>().localScale = new Vector3(1, 1, 1);
}
else
{
this.transform.GetComponent<RectTransform>().localScale = new Vector3(0.5f, 0.5f, 1);
}
}
private void OnMuteChange()
{
if (_mediaPlayer)
{
_mediaPlayer.Control.MuteAudio(_MuteToggle.isOn);
}
if (_MuteToggle.isOn)
_MuteToggle.transform.Find("Background").GetComponent<Image>().color = Color.clear;
else
_MuteToggle.transform.Find("Background").GetComponent<Image>().color = Color.white;
}
private void OnPlay()
{
if (_mediaPlayer)
{
_mediaPlayer.Control.Play();
}
_PlayPauseToggle.transform.Find("Background").GetComponent<Image>().color = Color.white;
}
private void OnPause()
{
if (_mediaPlayer)
{
_mediaPlayer.Control.Pause();
}
_PlayPauseToggle.transform.Find("Background").GetComponent<Image>().color = Color.clear;
}
private void OnVideoSeekSlider()
{
if (_mediaPlayer && _videoSeekSlider && _videoSeekSlider.value != _setVideoSeekSliderValue)
{
_mediaPlayer.Control.Seek(_videoSeekSlider.value * _mediaPlayer.Info.GetDurationMs());
}
}
private void OnVideoSliderDown()
{
if (_mediaPlayer)
{
_wasPlayingOnScrub = _mediaPlayer.Control.IsPlaying();
if (_wasPlayingOnScrub)
{
_mediaPlayer.Control.Pause();
}
OnVideoSeekSlider();
}
}
private void OnVideoSliderUp()
{
if (_mediaPlayer && _wasPlayingOnScrub)
{
_mediaPlayer.Control.Play();
_wasPlayingOnScrub = false;
}
}
private void OnAudioVolumeSlider()
{
if (_mediaPlayer && _audioVolumeSlider && _audioVolumeSlider.value != _setAudioVolumeSliderValue)
{
_mediaPlayer.Control.SetVolume(_audioVolumeSlider.value);
}
}
private void OnRewindButton()
{
if (_mediaPlayer)
{
_mediaPlayer.Control.Rewind();
}
}
public void StartPlayer()
{
vcr.gameObject.SetActive(true);
if (_mediaPlayer)
{
//_mediaPlayer.Events.AddListener(OnVideoEvent);
_AutoStartToggle.isOn = _mediaPlayer.m_AutoStart;
OnOpenVideoFile();
//Cursor.visible = false;
}
}
public void OnVideoEvent(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, RenderHeads.Media.AVProVideo.ErrorCode arg2)
{
switch (arg1)
{
case MediaPlayerEvent.EventType.ReadyToPlay:
break;
case MediaPlayerEvent.EventType.Started:
break;
case MediaPlayerEvent.EventType.FirstFrameReady:
break;
case MediaPlayerEvent.EventType.FinishedPlaying:
//if (PlayBackFinishEvent != null)
//{
// PlayBackFinishEvent();
//}
CloseMediaPlayer();
break;
}
Debug.Log("Event: " + arg1.ToString());
}
private void Awake()
{
Init();
vcr = this.gameObject;
AddListener();
}
public static GameObject vcr;
private void Start()
{
vcr.gameObject.SetActive(false);
}
private void Update()
{
if (_mediaPlayer && _mediaPlayer.Info != null && _mediaPlayer.Info.GetDurationMs() > 0f)
{
float time = _mediaPlayer.Control.GetCurrentTimeMs();
float d = time / _mediaPlayer.Info.GetDurationMs();
_setVideoSeekSliderValue = d;
_videoSeekSlider.value = d;
}
if(Input.GetKeyDown(KeyCode.Escape))
CloseMediaPlayer();
}
/// <summary>
/// 关闭视频播放
/// </summary>
public void CloseMediaPlayer()
{
//重置音量图标状态
if (_MuteToggle)
{
_MuteToggle.GetComponent<Toggle>().isOn = false;
_MuteToggle.transform.Find("Background").GetComponent<Image>().color = Color.white;
}
if (_audioVolumeSlider)
_audioVolumeSlider.value = 1;//重置音量大小
//重置播放暂停按钮状态
if (_PlayPauseToggle)
{
_PlayPauseToggle.GetComponent<Toggle>().isOn = false;
_PlayPauseToggle.transform.Find("Background").GetComponent<Image>().color = Color.white;
}
// Cursor.visible = true;
MessageDispatcher.SendMessage("controlMesh", (object)true);//打开绘图图形
_mediaPlayer.CloseVideo();
vcr.gameObject.SetActive(false);
if (AutoBrowsing.instance.Flag)
{
TheBackView.instance.BoFang();
}
}
}
}
#endif