从Youtube链接中检索视频流

时间:2018-09-30 16:58:29

标签: c# .net 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}");
        }
    }

因此,此调用现在返回带有诸如“状态”和“错误代码”之类的标记的字符串。还有一个名为“ url_encoded_fmt_stream_map”的特定标签。在其中,我可以找到用于下载各种品质视频的网址。
例如:

  

https%3A%2F%2Fr2 --- sn-h0jeened.googlevideo.com%2Fvideoplayback ...

但是我的查询似乎失败了,结果为我提供了一个空的“ url_encoded_fmt_stream_map”标签,其中包含“ status = fail”和“ errorcode = 150”,即“视频不可用”。

据我了解,那里的帮助下载youtube视频的库也存在类似的问题。

所以我的问题是,我的方法可靠吗?如果是这样,我在做什么错?

如果不可靠,如何才能可靠地检索到视频流的链接?

1 个答案:

答案 0 :(得分:3)

我能够解决我的问题。经过更多尝试和搜索之后,我能够更改请求url以获得结果。

对于任何有兴趣的人:

  

https://www.youtube.com/get_video_info?video_id={id}

可以更改为:

  

https://www.youtube.com/get_video_info?video_id={id}&el=detailpage

这将为我返回完整的答案,并且对我来说不再出现错误150。