Ejemplo n.º 1
0
        private IEnumerator VideoPathPreparing(string path, bool playImmediately, IPathPreparedListener listener)
        {
            if (_cachedVideoPaths.ContainsKey(path))
            {
                listener.OnPathPrepared(_cachedVideoPaths[path], playImmediately);
                yield break;
            }

#if UNITY_EDITOR
            _lastEventMsg = "Path Preparing";
#endif

            if (UMPSettings.RuntimePlatform == UMPSettings.Platforms.Android)
            {
                /// Check if we try to play exported videos and wait when export process will be completed
                var exptPaths = UMPSettings.Instance.AndroidExportedPaths;
                var filePath  = path.Replace("file:///", "");

                foreach (var exptPath in exptPaths)
                {
                    if (exptPath.Contains(filePath))
                    {
                        while (!_isExportCompleted)
                        {
                            yield return(null);
                        }

                        if (_cachedVideoPaths.ContainsKey(filePath))
                        {
                            listener.OnPathPrepared(_cachedVideoPaths[filePath], playImmediately);
                            yield break;
                        }

                        break;
                    }
                }

                if ((_mediaPlayer.Options as PlayerOptionsAndroid).PlayerType ==
                    PlayerOptionsAndroid.PlayerTypes.LibVLC &&
                    MediaPlayerHelper.IsAssetsFile(path))
                {
                    var tempFilePath = System.IO.Path.Combine(Application.temporaryCachePath, filePath);
                    if (File.Exists(tempFilePath))
                    {
                        _cachedVideoPaths.Add(path, tempFilePath);
                        listener.OnPathPrepared(tempFilePath, playImmediately);
                        yield break;
                    }

                    var data = new byte[0];

#if UNITY_2017_2_OR_NEWER
                    var www = UnityWebRequest.Get(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
                    yield return(www.SendWebRequest());

                    data = www.downloadHandler.data;
#else
                    var www = new WWW(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
                    yield return(www);

                    data = www.bytes;
#endif
                    if (string.IsNullOrEmpty(www.error))
                    {
                        var tempFile = new FileInfo(tempFilePath);
                        tempFile.Directory.Create();
                        File.WriteAllBytes(tempFile.FullName, data);
                        _cachedVideoPaths.Add(path, tempFilePath);
                        path = tempFilePath;
                    }
                    else
                    {
                        Debug.LogError("Can't create temp file from asset folder: " + www.error);
                    }

                    www.Dispose();
                }
            }

            if (_videoServices.ValidUrl(path))
            {
                Video serviceVideo = null;
                _isParsing = true;

                yield return(_videoServices.GetVideos(path, (videos) =>
                {
                    _isParsing = false;
                    serviceVideo = VideoServices.FindVideo(videos, int.MaxValue, int.MaxValue);
                }, (error) =>
                {
                    _isParsing = false;
                    Debug.LogError(string.Format("[UniversalMediaPlayer.GetVideos] {0}", error));
                    OnPlayerEncounteredError();
                }));

                if (serviceVideo == null)
                {
                    Debug.LogError("[UniversalMediaPlayer.VideoPathPreparing] Can't get service video information");
                    OnPlayerEncounteredError();
                }
                else
                {
                    if (serviceVideo is YoutubeVideo)
                    {
                        yield return((serviceVideo as YoutubeVideo).Decrypt(UMPSettings.Instance.YoutubeDecryptFunction, (error) =>
                        {
                            Debug.LogError(string.Format("[UniversalMediaPlayer.Decrypt] {0}", error));
                            OnPlayerEncounteredError();
                        }));
                    }

                    path = serviceVideo.Url;
                }
            }

            listener.OnPathPrepared(path, playImmediately);
            yield return(null);
        }
Ejemplo n.º 2
0
    private IEnumerator VideoPathPreparing(string path, bool playImmediately, IPathPreparedListener listener)
    {
        if (_cachedVideoPaths.ContainsKey(path))
        {
            listener.OnPathPrepared(_cachedVideoPaths[path], playImmediately);
            yield break;
        }

#if UNITY_EDITOR
        _lastEventMsg = "Path Preparing";
#endif

        if (UMPSettings.SupportedPlatform == UMPSettings.Platforms.Android)
        {
            /// Check if we try to play exported videos and wait when export process will be completed
            var exptPaths = UMPSettings.GetSettings().AndroidExportedPaths;
            var filePath  = path.Replace("file:///", "");

            foreach (var exptPath in exptPaths)
            {
                if (exptPath.Contains(filePath))
                {
                    while (!_isExportCompleted)
                    {
                        yield return(null);
                    }

                    if (_cachedVideoPaths.ContainsKey(filePath))
                    {
                        listener.OnPathPrepared(_cachedVideoPaths[filePath], playImmediately);
                        yield break;
                    }

                    break;
                }
            }

            if ((_mediaPlayer.Options as PlayerOptionsAndroid).PlayerType ==
                PlayerOptionsAndroid.PlayerTypes.LibVLC &&
                MediaPlayerHelper.IsAssetsFile(path))
            {
                var tempFilePath = System.IO.Path.Combine(Application.temporaryCachePath, filePath);
                if (File.Exists(tempFilePath))
                {
                    _cachedVideoPaths.Add(path, tempFilePath);
                    listener.OnPathPrepared(tempFilePath, playImmediately);
                    yield break;
                }

                var www = new WWW(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
                yield return(www);

                if (string.IsNullOrEmpty(www.error))
                {
                    var tempFile = new FileInfo(tempFilePath);
                    tempFile.Directory.Create();
                    File.WriteAllBytes(tempFile.FullName, www.bytes);
                    _cachedVideoPaths.Add(path, tempFilePath);
                    path = tempFilePath;
                }
                else
                {
                    Debug.LogError("Can't create temp file from asset folder: " + www.error);
                }
                www.Dispose();
            }
        }

        if (_videoHostingParser.IsVideoHostingUrl(path))
        {
            var videoInfos = _videoHostingParser.GetCachedVideoInfos(path);

            if (videoInfos == null)
            {
                var isError = false;
                _isParsing = true;

                _videoHostingParser.ParseVideoInfos(path, (res) =>
                {
                    _isParsing = false;
                }, (error) =>
                {
                    isError = true;
                    Debug.LogError(error);
                });

                while (_isParsing)
                {
                    if (isError)
                    {
                        _isParsing = false;
                        yield break;
                    }

                    yield return(null);
                }

                videoInfos = _videoHostingParser.GetCachedVideoInfos(path);
            }

            var videoInfo  = _videoHostingParser.GetBestCompatibleVideo(videoInfos);
            var directLink = videoInfo.DownloadUrl;

            if (videoInfo.RequiresDecryption && !videoInfo.IsDecrypted)
            {
                var isDecrypted = false;
                _videoHostingParser.DecryptVideoUrl(videoInfo, (res) =>
                {
                    directLink  = videoInfo.DownloadUrl;
                    isDecrypted = true;
                });

                while (!isDecrypted)
                {
                    yield return(null);
                }
            }
            _cachedVideoPaths.Add(path, directLink);
            path = directLink;
        }

        listener.OnPathPrepared(path, playImmediately);
        yield return(null);
    }
    private IEnumerator VideoPathPreparing(string path, bool playImmediately, IPathPreparedListener listener)
    {
        if (_cachedVideoPaths.ContainsKey(path))
        {
            listener.OnPathPrepared(_cachedVideoPaths[path], playImmediately);
            yield break;
        }

#if UNITY_EDITOR
        _lastEventMsg = "Path Preparing";
#endif

        if (UMPSettings.SupportedPlatform == UMPSettings.Platforms.Android &&
            !UMPSettings.Instance.UseAndroidNative &&
            MediaPlayerHelper.IsAssetsFile(path))
        {
            var filePath     = path.Replace("file:///", "");
            var tempFilePath = System.IO.Path.Combine(Application.temporaryCachePath, filePath);
            if (File.Exists(tempFilePath))
            {
                _cachedVideoPaths.Add(path, tempFilePath);
                listener.OnPathPrepared(tempFilePath, playImmediately);
                yield break;
            }

            var www = new WWW(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
            yield return(www);

            if (string.IsNullOrEmpty(www.error))
            {
                File.WriteAllBytes(tempFilePath, www.bytes);
                _cachedVideoPaths.Add(path, tempFilePath);
                path = tempFilePath;
            }
            else
            {
                Debug.LogError("Can't create temp file from asset folder: " + www.error);
            }
            www.Dispose();
        }

        if (_videoHostingParser.IsVideoHostingUrl(path))
        {
            var videoInfos = _videoHostingParser.GetCachedVideoInfos(path);

            if (videoInfos == null)
            {
                var isError = false;
                _isParsing = true;

                _videoHostingParser.ParseVideoInfos(path, (res) =>
                {
                    _isParsing = false;
                }, (error) =>
                {
                    isError = true;
                    Debug.LogError(error);
                });

                while (_isParsing)
                {
                    if (isError)
                    {
                        _isParsing = false;
                        yield break;
                    }

                    yield return(null);
                }

                videoInfos = _videoHostingParser.GetCachedVideoInfos(path);
            }

            var videoInfo  = _videoHostingParser.GetBestCompatibleVideo(videoInfos);
            var directLink = videoInfo.DownloadUrl;

            if (videoInfo.RequiresDecryption && !videoInfo.IsDecrypted)
            {
                var isDecrypted = false;
                _videoHostingParser.DecryptVideoUrl(videoInfo, (res) =>
                {
                    directLink  = videoInfo.DownloadUrl;
                    isDecrypted = true;
                });

                while (!isDecrypted)
                {
                    yield return(null);
                }
            }
            _cachedVideoPaths.Add(path, directLink);
            path = directLink;
        }

        listener.OnPathPrepared(path, playImmediately);
        yield return(null);
    }