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
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 |