【发布时间】:2017-10-19 02:41:23
【问题描述】:
我正在尝试使用 Tyrrz 的包 YoutubeExplode 在 .NET 中提取 YouTube 视频。我的程序昨天运行良好,我能够下载 Flash 和 html5 视频的音频和视频流。但是今天,当我尝试使用该包提取 html5 视频时,它以错误 Response status code does not indicate success: 403 (Forbidden). 退出我用来获取视频流的代码是:
var youtube = new YoutubeClient();
var video = await youtube.GetVideoInfoAsync("GemKqzILV4w"); //YouTube ID for random video
var stream = video.MixedStreams.OrderBy(s => s.VideoQuality).Last();
await youtube.DownloadMediaStreamAsync(stream, "C:\\Videos\\vid.mp4");
我的理论是 YouTube 以某种方式阻止了我对 html 视频的请求,但我不确定如何解决这个问题。有没有办法在包中发送带有 YoutubeClient() 的标头?有没有其他人有使用这个包的经验?我已经尝试过 YoutubeExtractor 和 libvideo 以及几乎所有其他 C# 包来处理这类事情,但到目前为止,YoutubeExplode 是唯一一个适用于 html5 视频的包。非常感谢您对此问题的任何帮助或可行的解决方案。
【问题讨论】:
-
YoutubeExplode 是否从任何网站捕获视频?如果仅限 Youtube,那么它如何区分 FLV 文件 (Flash) 和其他格式,如 WebM (Google) 和 MP4 (MPEG)?我的意思是它不应该提供 FLV 而不是 MP4。 Youtube 也主要保留 MP4、WebM 和 M4A 文件,所以我不知道您如何/从哪里获得这些 FLV 文件。 确保你问的是正确的事情
-
有没有办法检查
(s => s.VideoQuality).Last();的值?最好不要高清,因为链接的最大视频大小为 360p。也许这就是为什么找不到高分辨率的原因?如果情况变得更糟......只需编写自己的代码来加载视频页面的 html(如String),然后从那里提取直接链接。查找"adaptive_fmts",在解析HTML实体和文本的UTF编码后,您可以从那里获得直接链接(例如,每个%26在最终直接链接中变为&等)
标签: c# .net html flash youtube