| 
									
										
										
										
											2022-08-01 03:47:37 +00:00
										 |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Collections; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System.Runtime.InteropServices; | 
					
						
							|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace WeChatWASM | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public class WXVideo | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoPlay(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoAddListener(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoDestroy(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoExitFullScreen(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoPause(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoRequestFullScreen(string id,int direction); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoSeek(string id, int time); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoStop(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXVideoRemoveListener(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL && !UNITY_EDITOR | 
					
						
							|  |  |  |  |         private static readonly bool isWebGLPlayer = true; | 
					
						
							|  |  |  |  | #else | 
					
						
							|  |  |  |  |         private static readonly bool isWebGLPlayer = false; | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private bool isWaitingPlay = false; | 
					
						
							|  |  |  |  |         private bool isWaitingStop = false; | 
					
						
							|  |  |  |  |         private bool isWaitingPause = false; | 
					
						
							|  |  |  |  |         private bool _isPlaying = false; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private Action _onPlay = null; | 
					
						
							|  |  |  |  |         private Action _onPause = null; | 
					
						
							|  |  |  |  |         private Action _onEnded = null; | 
					
						
							|  |  |  |  |         private Action<WXVideoTimeUpdate> _onTimeUpdate = null; | 
					
						
							|  |  |  |  |         private Action<WXVideoProgress> _onProgress = null; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         private Action _onError = null; | 
					
						
							|  |  |  |  |         private Action _onWaiting = null; | 
					
						
							|  |  |  |  |         private Action _onSeeking = null; | 
					
						
							|  |  |  |  |         private Action _onSeeked = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private WXCreateVideoParam param; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public string instanceId; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         //内部使用,请不要访问这个 | 
					
						
							|  |  |  |  |         public static Dictionary<string, WXVideo> _Dict = new Dictionary<string, WXVideo>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public WXVideo(string id, WXCreateVideoParam param) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             instanceId = id; | 
					
						
							|  |  |  |  |             this.param = param; | 
					
						
							|  |  |  |  |             _Dict.Add(id, this); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnPlay(() => { | 
					
						
							|  |  |  |  |                 _isPlaying = true; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnEnded(() => { | 
					
						
							|  |  |  |  |                 _isPlaying = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnPause(() => { | 
					
						
							|  |  |  |  |                 _isPlaying = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_EDITOR | 
					
						
							|  |  |  |  |             _isPlaying = param.autoplay; | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 内部函数,请不要调用 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="key"></param> | 
					
						
							|  |  |  |  |         public void _HandleCallBack(WXVideoCallback res) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             switch (res.errMsg) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case "onPlay": | 
					
						
							|  |  |  |  |                     _onPlay?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onPause": | 
					
						
							|  |  |  |  |                     _onPause?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onEnded": | 
					
						
							|  |  |  |  |                     _onEnded?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onTimeUpdate": | 
					
						
							|  |  |  |  |                     _onTimeUpdate?.Invoke(new WXVideoTimeUpdate() { | 
					
						
							|  |  |  |  |                         position = res.position, | 
					
						
							|  |  |  |  |                         duration = res.duration | 
					
						
							|  |  |  |  |                     }); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onProgress": | 
					
						
							|  |  |  |  |                     _onProgress?.Invoke(new WXVideoProgress() { | 
					
						
							|  |  |  |  |                         buffered = res.buffered, | 
					
						
							|  |  |  |  |                         duration = res.duration | 
					
						
							|  |  |  |  |                     }); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onError": | 
					
						
							|  |  |  |  |                     _onError?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onWaiting": | 
					
						
							|  |  |  |  |                     _onWaiting?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onSeeking": | 
					
						
							|  |  |  |  |                     _onSeeking?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onSeeked": | 
					
						
							|  |  |  |  |                     _onSeeked?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 是否正在播放 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool isPlaying | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _isPlaying; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 播放视频 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Play() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingPlay) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingPlay = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoPlay()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Debug.Log(param.src + " 视频播放了,这里就不真的播放了。"); | 
					
						
							|  |  |  |  |             _HandleCallBack(new WXVideoCallback() { | 
					
						
							|  |  |  |  |                 errMsg= "onPlay" | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private IEnumerator DoPlay() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity音频调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXVideoPlay(instanceId); | 
					
						
							|  |  |  |  |             isWaitingPlay = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频播放事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnPlay(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onPlay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onPlay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onPlay += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频播放事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffPlay(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPlay = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPlay -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onPlay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offPlay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频播放到末尾事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnEnded(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onEnded == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onEnded"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onEnded += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频播放到末尾事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffEnded(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onEnded = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onEnded -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onEnded == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offEnded"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频错误事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnError(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onError == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onError"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onError += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频错误事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffError(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onError = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onError -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onError == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offError"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频暂停事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnPause(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onPause == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onPause"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onPause += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频暂停事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffPause(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPause = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPause -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onPause == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offPause"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频由于需要缓冲下一帧而停止时触发 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnWaiting(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onWaiting == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onWaiting"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onWaiting += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频由于需要缓冲下一帧而停止时触发,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffWaiting(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onWaiting = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onWaiting -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onWaiting == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offWaiting"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 销毁当前实例 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Destroy() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXVideoDestroy(instanceId); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Debug.Log(param.src + " 视频销毁!"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _Dict.Remove(instanceId); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 视频退出全屏 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void ExitFullScreen() { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXVideoExitFullScreen(instanceId); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Debug.Log(param.src + " 视频退出全屏!"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 暂停 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Pause() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingPause) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingPause = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoPause()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Debug.Log(param.src + " 视频暂停了"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             _HandleCallBack(new WXVideoCallback() | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 errMsg = "onPause" | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoPause() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXVideoPause(instanceId); | 
					
						
							|  |  |  |  |             isWaitingPause = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 视频全屏 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="direction">设置全屏时视频的方向 0: 正常竖向, 90: 屏幕逆时针90度 . -90: 屏幕顺时针90度</param> | 
					
						
							|  |  |  |  |         public void RequestFullScreen(int direction) { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXVideoRequestFullScreen(instanceId, direction); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Debug.Log(param.src + " 视频全屏!"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 视频跳转 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="time">视频跳转到指定位置,单位为 s 秒</param> | 
					
						
							|  |  |  |  |         public void Seek(int time) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             WXVideoSeek(instanceId, time); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 停止视频 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Stop() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingStop) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingStop = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoStop()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Debug.Log(param.src + " 音频停止了"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoStop() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXVideoStop(instanceId); | 
					
						
							|  |  |  |  |             isWaitingStop = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频播放进度更新事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="action"></param> | 
					
						
							|  |  |  |  |         public void OnTimeUpdate(Action<WXVideoTimeUpdate> action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onTimeUpdate == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onTimeUpdate"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onTimeUpdate += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频播放进度更新事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffTimeUpdate(Action<WXVideoTimeUpdate> action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onTimeUpdate = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onTimeUpdate -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onTimeUpdate == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offTimeUpdate"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听视频下载(缓冲)事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="action"></param> | 
					
						
							|  |  |  |  |         public void OnProgress(Action<WXVideoProgress> action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onTimeUpdate == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoAddListener(instanceId, "onProgress"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onProgress += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听视频下载(缓冲)事件 ,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffProgress(Action<WXVideoProgress> action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onProgress = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onProgress -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onProgress == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXVideoRemoveListener(instanceId, "offProgress"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |