异步时如何使用VideoLib下载视频?

时间:2018-08-27 11:26:48

标签: c# byte video-library

好的,这是我的难题:

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

答案 0 :(得分:1)

好的,所以我找到了问题的答案:

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

当您使用mp4Videos时,已将其缩小为一个视频,但是计算机仍然不知道,因为它是多个视频的变量。 因此,只需通过以下代码即可:

var SingleVideo = mp4Videos.FirstOrDefault();

然后,使用SingleVideo变量,可以像使用常规视频一样将其保存到字节数组,但是可以使用async方法:

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

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

我希望这对需要它的人有所帮助!