Как я могу скачать видео с помощью VideoLib, когда это Async?
Хорошо, вот моя дилемма:
Я хотел узнать, как использовать NuGet, поэтому я протестировал его с помощью системы VideoLibrary ( https://www.nuget.org/packages/VideoLibrary/). Я успешно установил его на свой компьютер, и, наконец, он заработал внутри кода. Мне удалось успешно загрузить видео, которое является целью расширения, однако оно было в неправильном формате. Итак, прочитав раздел вопросов и ответов, я получил этот код:
var youTube = YouTube.Default;
var allVideos = await youTube.GetAllVideosAsync(URL);
var mp4Videos = allVideos.Where(_ => _.Format == VideoFormat.Mp4);
Теперь, насколько я понимаю, сначала загружаются все видео, а затем устанавливается переменная только для видео MP4. Однако после того, как это сделано, я не знаю, как сохранить его в байтовом массиве. Как правило, чтобы сохранить видео с помощью VideoLib, необходимо назначить его байтовому массиву, а затем сохранить байтовый массив в файл. Поэтому я использовал этот код ранее с видео, которое не было асинхронным:
byte[] bytes = video.GetBytes();
var stream = video.Stream();
File.WriteAllBytes(@"C:\" + fullName, bytes);
Теперь этот метод не работает с моими видео сейчас, потому что они асинхронные. Позже разработчик упомянул, что вы можете назначить видео байтовому массиву, используя:
byte[] bytes = allVideos.GetBytesAsync();
Однако по какой-то причине это не работает. Я предполагаю, что я использую это неправильно, и именно поэтому, но я не знаю. Код подчеркнут красным, и он дает:
'IEnumerable<YouTubeVideo>' does not contain a definition to 'GetBytesAsync'
and no extension method 'GetBytesAsync accepting a first argument of type
'IEnumerable<YouTubeVideo>'coulb be found
Любая помощь будет оценена.
1 ответ
Итак, я обнаружил ответ на свой вопрос:
Проблема в том, что allVideos
это несколько видео. Когда вы используете метод GetAllVideosAsync
он получает целый список видео. Вы должны сузить это.
Когда вы используете mp4Videos
Вы сократили его до одного видео, однако компьютер все еще не знает об этом, потому что это переменная нескольких видео. Итак, просто введите код через это:
var SingleVideo = mp4Videos.FirstOrDefault();
Затем, используя SingleVideo
переменная, вы можете сохранить его в байтовом массиве, как обычное видео, но используя асинхронный метод:
Byte[] Byte = await SingleVideo.GetBytesAsync();
Как только содержимое сохранено в байтовом массиве, вы можете сохранить его любым удобным для вас способом.
Надеюсь, это поможет всем, кому это нужно!