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
2 years ago
|
#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
|