123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using UnityEngine;
- using System.Collections;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo
- {
- public partial class MediaPlayer : MonoBehaviour
- {
- public bool EnableSubtitles(MediaPath mediaPath)
- {
- bool result = false;
- if (_subtitlesInterface != null)
- {
- if (mediaPath != null && !string.IsNullOrEmpty(mediaPath.Path))
- {
- string fullPath = mediaPath.GetResolvedFullPath();
- bool checkForFileExist = true;
- if (fullPath.Contains("://"))
- {
- checkForFileExist = false;
- }
- #if (!UNITY_EDITOR && UNITY_ANDROID)
- checkForFileExist = false;
- #endif
- if (checkForFileExist && !System.IO.File.Exists(fullPath))
- {
- Debug.LogError("[AVProVideo] Subtitle file not found: " + fullPath, this);
- }
- else
- {
- Helper.LogInfo("Opening subtitles " + fullPath, this);
- _previousSubtitleIndex = -1;
- try
- {
- if (fullPath.Contains("://"))
- {
- // Use coroutine and WWW class for loading
- if (_loadSubtitlesRoutine != null)
- {
- StopCoroutine(_loadSubtitlesRoutine);
- _loadSubtitlesRoutine = null;
- }
- _loadSubtitlesRoutine = StartCoroutine(LoadSubtitlesCoroutine(fullPath, mediaPath));
- }
- else
- {
- // Load directly from file
- string subtitleData = System.IO.File.ReadAllText(fullPath);
- if (_subtitlesInterface.LoadSubtitlesSRT(subtitleData))
- {
- _subtitlePath = mediaPath;
- _sideloadSubtitles = false;
- result = true;
- }
- else
- {
- Debug.LogError("[AVProVideo] Failed to load subtitles" + fullPath, this);
- }
- }
- }
- catch (System.Exception e)
- {
- Debug.LogError("[AVProVideo] Failed to load subtitles " + fullPath, this);
- Debug.LogException(e, this);
- }
- }
- }
- else
- {
- Debug.LogError("[AVProVideo] No subtitle file path specified", this);
- }
- }
- else
- {
- _queueSubtitlePath = mediaPath;
- }
- return result;
- }
- private IEnumerator LoadSubtitlesCoroutine(string url, MediaPath mediaPath)
- {
- UnityEngine.Networking.UnityWebRequest www = UnityEngine.Networking.UnityWebRequest.Get(url);
- #if UNITY_2017_2_OR_NEWER
- yield return www.SendWebRequest();
- #else
- yield return www.Send();
- #endif
- string subtitleData = string.Empty;
- #if UNITY_2020_1_OR_NEWER
- if (www.result == UnityEngine.Networking.UnityWebRequest.Result.Success)
- #elif UNITY_2017_1_OR_NEWER
- if (!www.isNetworkError)
- #else
- if (!www.isError)
- #endif
- {
- subtitleData = ((UnityEngine.Networking.DownloadHandler)www.downloadHandler).text;
- }
- else
- {
- Debug.LogError("[AVProVideo] Error loading subtitles '" + www.error + "' from " + url);
- }
- if (_subtitlesInterface.LoadSubtitlesSRT(subtitleData))
- {
- _subtitlePath = mediaPath;
- _sideloadSubtitles = false;
- }
- else
- {
- Debug.LogError("[AVProVideo] Failed to load subtitles" + url, this);
- }
- _loadSubtitlesRoutine = null;
- www.Dispose();
- }
- public void DisableSubtitles()
- {
- if (_loadSubtitlesRoutine != null)
- {
- StopCoroutine(_loadSubtitlesRoutine);
- _loadSubtitlesRoutine = null;
- }
- if (_subtitlesInterface != null)
- {
- _previousSubtitleIndex = -1;
- _sideloadSubtitles = false;
- _subtitlesInterface.LoadSubtitlesSRT(string.Empty);
- }
- else
- {
- _queueSubtitlePath = null;
- }
- }
- }
- }
|