1
0

Repository rearrangement

This commit is contained in:
Michael Gordeev
2019-12-05 13:34:34 +03:00
parent 8e348ad0f3
commit 56b9999342
25 changed files with 6 additions and 2 deletions
@@ -0,0 +1,111 @@
using Google.Apis.Services;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Threading.Tasks;
using YouTube.Models;
using YoutubeExplode;
using YoutubeExplode.Models.ClosedCaptions;
using YoutubeExplode.Models.MediaStreams;
namespace YouTube.Resources
{
public class VideoPlaybackResource
{
IClientService ClientService { get; }
public VideoPlaybackResource(IClientService clientService) =>
ClientService = clientService;
public ListRequest List(string videoId) =>
new ListRequest(ClientService, videoId);
public class ListRequest
{
IClientService Service { get; }
public string Id { get; set; }
public async Task<VideoPlayback> ExecuteAsync()
{
VideoPlayback item = new VideoPlayback();
YoutubeClient client = new YoutubeClient(Service.HttpClient);
MediaStreamInfoSet streamSet = await client.GetVideoMediaStreamInfosAsync(Id);
item.Id = Id;
item.PlaybackUrls.ValidUntil = streamSet.ValidUntil.DateTime;
if(!string.IsNullOrWhiteSpace(streamSet.HlsLiveStreamUrl))
{
item.PlaybackUrls.LiveStreamUrl = streamSet.HlsLiveStreamUrl;
return item;
}
List<AudioPlaybackUrl> audio = new List<AudioPlaybackUrl>();
foreach (AudioStreamInfo i in streamSet.Audio)
audio.Add(new AudioPlaybackUrl
{
Url = i.Url,
Bitrate = (int)i.Bitrate,
Format = (AudioFormat)i.AudioEncoding,
Quality = Extensions.RangeOffset((int)i.Bitrate / 1024, 128, 255) switch
{
-1 => AudioQuality.Low,
1 => AudioQuality.High,
_ => AudioQuality.Medium
}
});
item.PlaybackUrls.Audio = audio.AsReadOnly();
List<VideoPlaybackUrl> video = new List<VideoPlaybackUrl>();
foreach (VideoStreamInfo i in streamSet.Video)
video.Add(new VideoPlaybackUrl
{
Format = (VideoFormat)i.VideoEncoding,
HasAudio = false,
Quality = i.VideoQualityLabel,
Url = i.Url,
Resolution = new Size(i.Resolution.Width, i.Resolution.Height),
Bitrate = (int)i.Bitrate
});
foreach (MuxedStreamInfo i in streamSet.Muxed)
video.Add(new VideoPlaybackUrl
{
Format = (VideoFormat)i.VideoEncoding,
HasAudio = true,
Quality = i.VideoQualityLabel,
Url = i.Url,
Resolution = new Size(i.Resolution.Width, i.Resolution.Height),
Bitrate = 0
});
item.PlaybackUrls.Video = video.AsReadOnly();
var ccSet = await client.GetVideoClosedCaptionTrackInfosAsync(Id);
List<ClosedCaptionInfo> captions = new List<ClosedCaptionInfo>();
foreach (ClosedCaptionTrackInfo i in ccSet)
captions.Add(new ClosedCaptionInfo
{
AutoGenerated = i.IsAutoGenerated,
Url = i.Url,
Language = new CultureInfo(i.Language.Code),
TrackInfo = i
});
item.ClosedCaptions = captions.AsReadOnly();
return item;
}
public VideoPlayback Execute()
{
Task<VideoPlayback> task = ExecuteAsync();
task.Wait();
return task.Result;
}
public ListRequest(IClientService service, string id)
{
Id = id;
Service = service;
}
}
}
}