首页 > 解决方案 > 异步时如何使用 VideoLib 下载视频?

问题描述

好吧,这是我的困境:

我想学习如何使用 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

任何帮助,将不胜感激。

标签: c#bytevideo-library

解决方案


好的,所以,我发现了我的问题的答案:

问题是allVideos多个视频。当您使用该方法GetAllVideosAsync时,它会检索整个视频列表。你必须缩小范围。

当您使用时,mp4Videos您已将其缩小到一个视频,但是计算机仍然不知道这一点,因为它是多个视频的变量。所以,简单地把代码通过这个:

var SingleVideo = mp4Videos.FirstOrDefault();

然后,使用该SingleVideo变量,您可以像传统视频一样将其保存到字节数组中,但使用异步方法:

Byte[] Byte = await SingleVideo.GetBytesAsync();

将内容保存到字节数组后,您可以随意保存。

我希望这可以帮助任何需要它的人!


推荐阅读