public async Task <MemoryStream> GetStreamByYoutubeTrackAsync(YoutubeTrack track)
        {
            var stream        = new MemoryStream();
            var streamInfoSet = await _client.GetVideoMediaStreamInfosAsync(track.Id);

            var audioStreamInfo = streamInfoSet.Audio.WithHighestBitrate();

            if (audioStreamInfo is null)
            {
                return(stream);
            }

            try
            {
                var mediaStream = await _client.GetMediaStreamAsync(audioStreamInfo);

                await mediaStream.CopyToAsync(stream);
            }
            catch (Exception)
            {
                Console.WriteLine($"Youtube Error... {track.Title}");
                return(stream);
            }

            return(stream);
        }
示例#2
0
        static async Task Main(string[] args)
        {
            //pl = new Player();
            var vid = new YoutubeTrack(new Uri("https://www.youtube.com/watch?v=uKqriTRYInY"), new YoutubeClient(), new HttpClient());
            var met = await vid.LoadMetadata();

            var da = await vid.GetUpdatedLocation();

            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            var bi = new BASS_CHANNELINFO();
            //int stream2 = Bass.BASS_StreamCreateFile(@"C:\Users\Speyd\Desktop\01. Radio Happy.flac", 0L, 0L, BASSFlag.BASS_DEFAULT);
            int stream = Bass.BASS_StreamCreateURL(da.OriginalString, 0, BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);

            Bass.BASS_ChannelPlay(stream, false);
            //var hm = await hc.GetAsync(vid.RealLocation);
            //Bass.Free();
            //var init = Bass.Init();
            //var op = ManagedBass.Opus.BassOpus.CreateStream(da.OriginalString);
            //var flac = Bass.PluginLoad(@"bassflac.dll");
            //var opus = Bass.PluginLoad(@"bassopus.dll");
            //var webm = Bass.PluginLoad(@"basswebm.dll");
            //var leng = await hc.GetAsync(da, HttpCompletionOption.ResponseHeadersRead);
            //var c = Bass.CreateStream(da.OriginalString);
            //Bass.ChannelPlay(op);
            await Task.Delay(-1);
        }
示例#3
0
        public async Task DownloadSpecificTrackById()
        {
            Console.WriteLine("Please enter an ID");
            var id = Console.ReadLine();

            var searchTrack = new YoutubeTrack("", new List <string>(), 0, id);

            await _downloadService.DownloadMediaFromYoutubeTrackAsync(searchTrack, "Test");
        }
        private async Task DownloadThumbnailAsync(YoutubeTrack track, string filePath)
        {
            using (var client = new WebClient())
            {
                var uri = new Uri($"https://img.youtube.com/vi/{track.Id}/maxresdefault.jpg");
                client.DownloadFileAsync(uri, filePath);
            }

            await Task.CompletedTask;
        }
        private IList <YoutubeTrack> ConvertTracks(IEnumerable <Video> videos)
        {
            var ytTracks = new List <YoutubeTrack>();

            foreach (var video in videos)
            {
                var track = new YoutubeTrack(video.Title, video.Author, (int)video.Duration.TotalMilliseconds, video.Id);
                ytTracks.Add(track);
            }

            return(ytTracks);
        }
示例#6
0
        public async Task DownloadMediaFromYoutubeTrackAsync(YoutubeTrack track, string filePath)
        {
            EnsurePathExists(filePath);

            var stream = await _streamRepository.GetStreamByYoutubeTrackAsync(track);

            var streamArray = stream.ToArray();

            if (stream.Length < 1)
            {
                Console.WriteLine($"Track not found! {track.Title}");
                return;
            }

            var trackSaveName = track.FormatSafeTrackName();

            File.WriteAllBytes($"{filePath}/{trackSaveName}.mp3", streamArray);

            await stream.FlushAsync();
        }
 private string GenerateFilePath(YoutubeTrack track)
 => $"Thumbnails/{track.Title}-{track.Authors.GetEnumerator().Current}.jpg";