public async Task <FileInfo?> DownloadVideoFileAsync(string videoId) { VideoPlaybackAccessToken videoToken = await GetVideoPlaybackToken(HttpClient, videoId); string videoPlaylistUrl = await GetVideoPlaylistUrl(HttpClient, videoId, videoToken); return(await DownloadVideoFile(videoId, videoPlaylistUrl)); }
private static async Task <string> GetVideoPlaylistUrl(HttpClient httpClient, string videoId, VideoPlaybackAccessToken accessToken) { var request = new HttpRequestMessage() { Method = HttpMethod.Get, RequestUri = new Uri($"http://usher.twitch.tv/vod/{videoId}?nauth={accessToken.Value}&nauthsig={accessToken.Signature}&allow_source=true&player=twitchweb") }; request.Headers.Add("Client-ID", TwitchClientId); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var lines = (await response.Content.ReadAsStringAsync()).Split('\n'); for (int i = 0; i < lines.Length; i++) { if (lines[i].Contains("#EXT-X-MEDIA") && i < lines.Length - 2) { return(lines[i + 2]); } } return(""); }