c# - 从 Youtube 链接检索视频流
问题描述
我目前正在从事一个从 YouTube 视频的音频中检索 mp3 文件的项目。
我从 youtube 链接的一些基本解析开始我的项目,并想出了一个正则表达式来提取 id。
private static string GetYoutubeID(string url)
{
var match = youtubeRegex.Match(url);
if(match.Success)
{
return match.Groups[0].Value ?? throw new ArgumentException("url");
}
else
{
throw new ArgumentException(url);
}
}
然后我在这样的请求中使用 id:
public static string GetResponse(string id)
{
using (WebClient client = new WebClient())
{
return client.DownloadString($"http://youtube.com/get_video_info?video_id={id}");
}
}
所以现在这个调用返回一个带有“status”和“errorcode”标签的字符串。还有一个名为“url_encoded_fmt_stream_map”的特定标签。在其中,我可以找到下载各种质量视频的网址。
例如:
https%3A%2F%2Fr2---sn-h0jeened.googlevideo.com%2Fvideoplayback...
但是我的查询似乎失败了,结果给我一个空的“url_encoded_fmt_stream_map”标签,带有“status=fail”和“errorcode=150”,即“视频不可用”。
据我了解,帮助下载 youtube 视频的库有一些类似的问题。
所以我的问题是,我的方法可靠吗?如果是这样,我做错了什么?
如果它不可靠,我怎样才能可靠地检索到视频流的链接?
解决方案
我能够解决我的问题。经过更多尝试和搜索,我能够更改请求 url 以实现结果。
对于任何有兴趣的人:
可以改为:
https://www.youtube.com/get_video_info?video_id={id}&el=detailpage
这将为我返回一个完整的答案,并且我不再出现错误 150。
推荐阅读
- ruby - 根据 URL 更改 CSS
- css - 更改同名类的 CSS
- mysql - 通过私有 IP 拒绝 Google Cloud MySQL 访问,但允许通过公共 IP 访问
- android-glide - 滑翔不会触发任何结果并卡住加载
- amazon-ec2 - 如何确定为什么在下载文件时在 EC2 实例上杀死 Python 进程?
- angular - 角度 8 下拉更改事件不起作用
- python - 使用 seaborn.FacetGrid 时如何更改 X 轴上分类值的顺序?
- java - 为什么我的 Java 8 流在 Maven 插件中不起作用?
- c# - 在提交表单之前捕获输入类型“月”的值
- spring-security - HttpServletRequest 在经过身份验证的 IDP 并重定向到 SP 后返回空会话