从Youtube下载视频时出现问题



我正在尝试用C#制作一个桌面视频下载应用程序
现在的问题是以下代码运行良好:

WebClient webOne = new WebClient();
string temp1 = " http://www.c-sharpcorner.com/UploadFile/shivprasadk/visual-studio-and-net-tips-and-tricks-15/Media/Tip15.wmv";
webOne.DownloadFile(new Uri(temp1), "video.wmv");

但以下代码没有:

temp1="http://www.youtube.com/watch?v=Y_..."

(在这种情况下,200-400千字节的垃圾文件被下载)

两个URL之间的区别是显而易见的,第一个包含文件的确切名称,而另一个似乎以某种方式加密了。。。

我找不到任何合适且令人满意的解决方案,所以我非常感谢您的帮助,谢谢。

注意:
从这里的一个问题中,我得到了一个链接http://youtubefisher.codeplex.com/所以我访问了那里,获得了源代码并阅读了它。这是一项伟大的工作,但我似乎不明白的是,这个人是如何知道下载YouTube视频必须制作哪些结构和类的,为什么他必须经历所有这些麻烦,为什么我的方法不起作用?

有人请引导。再次感谢。

要从youtube下载视频,必须找到实际的视频位置。不是您用来观看视频的页面。http://www.youtube.com/watch?v=... url是一个html页面(很像这个页面),它将从视频的源位置加载视频并显示它。通常,你必须解析html并从html中提取视频位置。

在你的情况下,你已经找到了可以做到这一点的代码,你很幸运,因为从youtube下载视频一点都不简单。看看你在问题中提供的链接,疯狂背后的魔力在YoutubeService.cs / GetDownloadUrl():中可用

http://youtubefisher.codeplex.com/SourceControl/changeset/view/68461#1113202

这种方法是解析youtube手表url返回的html页面,并找到实际的视频内容。增加的复杂性是,youtube视频也可以是各种不同的格式。

如果你需要在下载后转换视频类型,我推荐FFMPEG

编辑:回应你的评论-你根本没有看YoutubeFisher的源代码,是吗。。我建议分析我提到的文件(YoutubeService.cs)。尽管在我自己快速浏览之后,您必须解析html页面中的yt.playerConfig变量。

利用这个资源来帮助你。

编辑:在回应你的第二条评论时:"事实上,我正在努力开发一个可以从任何视频网站下载视频的应用程序。"你说这很容易,但事实并非如此。由于每个视频网站都不一样,你不能只写一些开箱即用的东西。不过,如果非要我这么做,我会这样做:我会为主要的视频共享网站(Metacafe、Youtube、Whatever else)编写自定义解析器,这样这些网站就可以正常工作。在那之后,如果你愿意的话,我会写一篇"fallover"。基本上,如果你从一个未知的网站请求视频,它会在html中搜索已知的视频扩展名(flv、wmv、mp4等),然后从中提取url。

在后一种情况下,您可以使用正则表达式来提取url,或者使用indexof、substring和lastindexof等组合。

我在CodeProject上找到了这个页面,它向您展示了如何在不使用第三方库的情况下制作一个非常高效的Youtube下载程序。请记住,有时有必要稍微修改代码,因为Youtube有时会更改其网络结构,这可能会干扰您的应用程序与Youtube的交互方式。这里有一个链接:在这里你还可以下载C#项目文件并直接查看这些文件。

CodeProject-Youtube下载程序使用C#.NET

相关内容

  • 没有找到相关文章