Proje defteri / 2024
YouTube Downloader
Tek C# kod tabanıyla Windows, Android ve macOS üzerinde çalışan; YouTubeExplode altyapısıyla doğrudan cihaz üzerinde video ve ses indiren reklamsız istemci.
Proje Tanımı ve Amaç
.NET MAUI YouTube Downloader, YouTube üzerindeki video ve ses akışlarını üçüncü parti reklamlı sitelere ihtiyaç duymadan doğrudan kullanıcının cihazına indiren çok platformlu bir istemcidir.
Microsoft .NET 8 MAUI altyapısıyla geliştirilmiş olup tek bir C# ve XAML kod tabanı üzerinden Windows, Android ve macOS ortamlarında yerel olarak derlenir.
İndirme Akışı ve Servis Yapısı
Uygulama, YouTubeExplode kütüphanesini ve CommunityToolkit dosya kaydedicisini kullanarak aracı sunucu olmaksızın YouTube CDN sunucularından doğrudan parça akışı (chunked streaming) çeker.
Aşağıdaki kod parçası, projenin MainPage.xaml.cs dosyasında yer alan asenkron indirme ve akış çözümleme motorunu göstermektedir:
using CommunityToolkit.Maui.Storage;
using YoutubeExplode;
using YoutubeExplode.Videos.Streams;
namespace okiyoutubeindirici
{
public partial class MainPage : ContentPage
{
private readonly IFileSaver _fileSaver;
private readonly CancellationTokenSource _cancellationTokenSource = new();
public MainPage(IFileSaver fileSaver)
{
InitializeComponent();
_fileSaver = fileSaver;
}
private async void Button_Clicked(object sender, EventArgs e)
{
try
{
await Task.Run(async () =>
{
var youtubeClient = new YoutubeClient();
var video = await youtubeClient.Videos.GetAsync(videoUrl.Text);
var streamManifest = await youtubeClient.Videos.Streams.GetManifestAsync(
video.Id,
_cancellationTokenSource.Token
);
var streamInfo = streamManifest.GetAudioOnlyStreams().GetWithHighestBitrate();
var stream = await youtubeClient.Videos.Streams.GetAsync(
streamInfo,
_cancellationTokenSource.Token
);
var fullpath = await _fileSaver.SaveAsync(
$"{video.Title}.mp3",
stream,
_cancellationTokenSource.Token
);
});
}
catch (Exception ex)
{
await DisplayAlert("Hata", ex.Message, "Tamam");
}
}
}
}Teknik Özellikler
- Asenkron İşlem Yönetimi: Dosya indirme ve ağ istekleri Task.Run üzerinde arka planda yürütülür, kullanıcı arayüzü kilitlenmez.
- Yerel Depolama Entegrasyonu: Windows üzerinde Downloads dizinine doğrudan yazılırken, Android üzerinde Scoped Storage izin kurallarına tam uyum sağlanır.
- Format ve Akış Seçimi: Yüksek bit hızına sahip ses akışları (.mp3, .m4a) veya muxed video akışları (.mp4) çözümlenir.