Ejemplo n.º 1
0
    public void Prepare()
    {
        if (!_path.Equals(_savedPlayerPath))
        {
            Stop();
            _savedPlayerPath = _path;

            if (_videoHostingParser.IsVideoHostingUrl(_path))
            {
                if (_videoHostingParserEnum != null)
                {
                    StopCoroutine(_videoHostingParserEnum);
                }

                _videoHostingParserEnum = VideoHostingParser(true);
                StartCoroutine(_videoHostingParserEnum);
                return;
            }

            _mediaPlayer.SetDataSource(new Uri(_path));
        }

        if (!_mediaPlayer.IsReady)
        {
            _mediaPlayer.Prepare();
        }
        else
        {
            _mediaPlayer.Play();
        }
    }
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);
    }