Here you'll find a more in-depth explanation of our API.
To get information about a video:
string uri = "https://www.youtube.com/watch?v=vPto6XpRq-U";
var youTube = YouTube.Default;
var video = youTube.GetVideo(uri);
string title = video.Title;
string fileExtension = video.FileExtension;
string fullName = video.FullName; // same thing as title + fileExtension
int resolution = video.Resolution;
// etc.
You can download it like this:
byte[] bytes = video.GetBytes();
var stream = video.Stream();
And save it to a file:
File.WriteAllBytes(@"C:\" + fullName, bytes);
YouTube exposes multiple videos for each URL- e.g. when you change the resolution of a video, you're actually watching a different video. libvideo supports downloading multiple of them:
var videos = youTube.GetAllVideos(uri);
We also have full support for async:
var video = await youTube.GetVideoAsync(uri);
var videos = await youTube.GetAllVideosAsync(uri);
var contents = await video.GetBytesAsync();
In addition, you should be aware that for every time you visit YouTube a new HttpClient
is created and disposed. To avoid this, use the Client
class:
using (var cli = Client.For(new YouTube()))
{
cli.GetVideo(uri);
cli.GetVideo("[some other video]"); // HttpClient is reused here
}
Likewise, if you'd like to reuse HttpClients
when downloading a video, use VideoClient
.
using (var cli = new VideoClient())
{
cli.GetBytes(video);
await cli.StreamAsync(video);
}
If you need to custom-configure the HttpClient
for some reason- maybe you need to increase the timeout length, or add credentials, or use a different message handler- fear not. Simply derive your class from YouTube
and configure as necessary:
class MyYouTube : YouTube
{
protected override HttpMessageHandler MakeHandler()
{
return new BlahBlahMessageHandler();
}
protected override HttpClient MakeClient(HttpMessageHandler handler)
{
return new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(12345);
};
}
}
Use like so:
var youTube = new MyYouTube();
youTube.GetVideo("foo");
// --- OR ---
using (var cli = Client.For(new MyYouTube()))
{
// ...
}
Note that this does not change the HTTP behavior when downloading the video itself. To do that, inherit from VideoClient
:
class MyVideoClient : VideoClient
{
protected override HttpMessageHandler MakeHandler() { ... }
protected override HttpClient MakeClient(HttpMessageHandler handler) { ... }
}
And to use it:
using (var cli = new MyVideoClient())
{
byte[] contents = cli.GetBytes(video);
}
That's it, enjoy! If you're looking for more features, feel free to raise an issue and we can discuss it with you.