public async Task <bool> LoadVideoStreamFromRemoteServer() { if (IsLoadingVideoStream_RemoteServer) { return(true); } IsLoadingVideoStream_RemoteServer = true; try { // clear etc Stream.VideoInfo.Clear(); Stream.VideoInfo_adaptive_fmts.Clear(); long nonce = DateTimeUtility.CurrentTimeMillis(); byte[] ret = await PrimeTubeAPIs.GetVideoList(string.Format("https://www.youtube.com/watch?v={0}", _videoId), nonce); if (ret != null) { char[] encryptionKey = CustomXorEncryption.GenerateKey(nonce); PacketReader reader = new PacketReader(ret); bool haveVideoInfo = reader.ReadBool(); if (!haveVideoInfo) { return(false); } string videoTitle = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); int numVideoURLs = reader.ReadInt(); for (int i = 0; i < numVideoURLs; i++) { string fullURL = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); // full url VideoType videotype = VideoType.NULL; switch (CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey)) // container { case "FLV": videotype = VideoType.video_x_flv; break; case "GP3": videotype = VideoType.video_3gpp; break; case "MP4": videotype = VideoType.video_mp4; break; case "WEBM": videotype = VideoType.video_webm; break; } int type = reader.ReadByte() & 0xFF; switch (type) { case 1: // Audio { string audio = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); string aq = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); Stream.VideoInfo.Add(new VideoInformation(fullURL, VideoType.audio_mp4, "", "", "", VideoQuality.NULL)); break; } case 2: // Video { string video = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); string vq = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); Stream.VideoInfo.Add(new VideoInformation(fullURL, videotype, "", "", "", VideoQuality.hd720)); break; } case 3: // Combined { string video = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); string vq = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); string audio = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); string aq = CustomXorEncryption.EncryptContent(reader.ReadString(), encryptionKey); Stream.VideoInfo.Add(new VideoInformation(fullURL, videotype, "", "", "", VideoQuality.hd720)); break; } default: break; } } return(true); } } catch (Exception exp) { return(false); } finally { IsLoadingVideoStream_RemoteServer = false; } return(false); }