public void SwitchVideoFormat(int index) { if (index >= supportedVideoFormats.Count || index < 0) { return; } Stop(); formatIndex = index; MediaFormat format = supportedVideoFormats[formatIndex]; // use audio player if no audio stream found if (format.acodec == "none") { useAudioPlayer = true; MediaFormat audioFormat = TryGetAudioStream(); InitAudioPlayer(audioFormat.url); } else { if (audioPlayer != null) { audioPlayer.Stop(); } useAudioPlayer = false; } SetVideoParsedUrl(format.url); Prepare(); }
private void UpdateQualityButton() { int index = ytdlVideoPlayer.formatIndex; MediaFormat format = ytdlVideoPlayer.SupportedVideoFormats[index]; string formatText = format.format_note; if (string.IsNullOrEmpty(formatText)) { formatText = string.Format("{0}p", format.height); } qualityButton.SetText(formatText); }
private MediaFormat TryGetAudioStream() { // get first available audio stream for (int i = 0; i < supportedVideoFormats.Count; i++) { MediaFormat format = supportedVideoFormats[i]; if (format.acodec != "none" && format.acodec != null) { return(format); } } return(null); }
private void OnParseCompleted(MediaInfo info) { // parse completed isParsed = true; mediaInfo = info; // extract supported video format ExtractSupportedMediaFormats(mediaInfo); if (supportedVideoFormats.Count > 0) { // set initial quality format formatIndex = TryGetInitialFormatIndex(); MediaFormat format = supportedVideoFormats[formatIndex]; // use audio player if no audio stream found if (format.acodec == "none") { useAudioPlayer = true; MediaFormat audioFormat = TryGetAudioStream(); InitAudioPlayer(audioFormat.url); } else { if (audioPlayer != null) { audioPlayer.Stop(); } useAudioPlayer = false; } // set video player url videoPlayer.url = ValidParsedVideoUrl(mediaInfo, format.url); // prepare video for play Prepare(); } else { Debug.LogWarningFormat(LOG_FORMAT, "No supported video stream format found!"); } parseCompleted(this, mediaInfo); }
private int TryGetInitialFormatIndex() { // get target height int targetHeight = 360; switch (initialQuality) { case QualityType._360p: targetHeight = 360; break; case QualityType._720p: targetHeight = 720; break; case QualityType._1080p: targetHeight = 1080; break; case QualityType._1440p: targetHeight = 1440; break; case QualityType._2160p: targetHeight = 2160; break; } // search best fit video stream index int index = 0, minDiff = int.MaxValue; for (int i = 0; i < supportedVideoFormats.Count; i++) { MediaFormat format = supportedVideoFormats[i]; int diff = Math.Abs(format.height - targetHeight); if (diff < minDiff) { index = i; minDiff = diff; } } return(index); }