异步时如何使用 VideoLib 下载视频?
How can I download a video using VideoLib when it's 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
如有任何帮助,我们将不胜感激。
好的,我找到了问题的答案:
问题是allVideos
是多个视频。当您使用 GetAllVideosAsync
方法时,它会检索整个视频列表。你必须缩小范围。
当您使用 mp4Videos
时,您已将其缩小到一个视频,但计算机仍然不知道这一点,因为它是多个视频的变量。
所以,简单地把代码写成这样:
var SingleVideo = mp4Videos.FirstOrDefault();
然后,使用SingleVideo
变量,可以像常规视频一样保存到字节数组,但是使用async方法:
Byte[] Byte = await SingleVideo.GetBytesAsync();
将内容保存到字节数组后,您可以随意保存它。
希望对有需要的人有所帮助!
好吧,这是我的困境:
我想学习如何使用 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
如有任何帮助,我们将不胜感激。
好的,我找到了问题的答案:
问题是allVideos
是多个视频。当您使用 GetAllVideosAsync
方法时,它会检索整个视频列表。你必须缩小范围。
当您使用 mp4Videos
时,您已将其缩小到一个视频,但计算机仍然不知道这一点,因为它是多个视频的变量。
所以,简单地把代码写成这样:
var SingleVideo = mp4Videos.FirstOrDefault();
然后,使用SingleVideo
变量,可以像常规视频一样保存到字节数组,但是使用async方法:
Byte[] Byte = await SingleVideo.GetBytesAsync();
将内容保存到字节数组后,您可以随意保存它。
希望对有需要的人有所帮助!