C# Package Tyrrrz/YoutubeExplode 为 YouTube html5 视频返回错误 403,但不为 flash 视频返回错误
Posted
技术标签:
【中文标题】C# Package Tyrrrz/YoutubeExplode 为 YouTube html5 视频返回错误 403,但不为 flash 视频返回错误【英文标题】:C# Package Tyrrrz/YoutubeExplode returning error 403 for YouTube html5 videos but not for flash videos 【发布时间】: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
在最终直接链接中变为&
等)
【参考方案1】:
首先,您确实应该在他们的 github 问题跟踪器上询问特定于项目的问题。我通常会在同一天内回复所有问题。
其次,“适用于 html5 视频但不适用于 flash 视频”的真正含义是什么?据我所知,Youtube 不再提供 Flash 视频。通常 403 错误代码意味着流的签名未被(正确)破译。在撰写这篇文章时,所有测试都通过了,我能够使用演示应用程序正确获取视频信息并从您的帖子中的视频下载流。 也就是说,Youtube 会提供针对特定地区的回复,因此提供给您的回复可能由于某种原因未得到正确处理。 您能否在github issue tracker 上提出问题,以便我们讨论可能存在的问题并修复此潜在错误?
【讨论】:
以上是关于C# Package Tyrrrz/YoutubeExplode 为 YouTube html5 视频返回错误 403,但不为 flash 视频返回错误的主要内容,如果未能解决你的问题,请参考以下文章
C# Package Tyrrrz/YoutubeExplode 为 YouTube html5 视频返回错误 403,但不为 flash 视频返回错误
效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中附源代码下载) 转