我正在尝试将YouTube视频加载到Delphi XE7中的TWebBrowser中,但我收到了一个错误,内容如下:
播放视频需要Adobe Flash Player或支持HTML5的浏览器。
获取最新的Flash Player
了解有关升级到HTML5浏览器的详细信息
我可以很好地加载普通的HTML。
我之前在这里找到的例子是针对更老的Delphi版本的,所以我想知道这是不是新版本的问题,或者是TWebBrowser的问题,或者是我的环境(Windows7和Windows7)的问题。
编辑:我的目标很简单,就是能够加载并播放网址中的视频,就像YouTube视频一样。除了TWebBrowser之外的其他解决方案都很好,特别是如果它们可以跨平台运行的话。
发布于 2015-06-01 14:48:05
您想知道您的问题是否与Delphi版本有关。WebBrowser控件是一个系统控件。Delphi版本并不重要,因为服务是由底层系统提供的。如果有什么改变的话,那很可能是你Tube发布视频的方式。
如果您正在制作嵌入远程视频的HTML,那么您应该遵循来自you Tube的最新文档,了解如何完成该操作。不要使用多年的Delphi特定文章作为您的指南。使用针对You Tube使用的最新技术的现代文章。
我确实有一种感觉,尽管你在问题中没有说明,你正在使用一种旧的和可能已经过时的方法来嵌入you Tube视频。使用如下所述的iframe:http://www.w3schools.com/html/html_youtube.asp
播放视频需要
Adobe Flash Player或支持HTML5的浏览器。
如果您不采取其他特定步骤,您的WebBrowser控件将使用旧版IE浏览器引擎。所以它不会有HTML5支持。也许甚至不支持Flash,也就是说,如果You Tube仍然准备将视频作为Flash提供服务。如今,HTML5是首选。尤其是因为现代浏览器支持开箱即用,而且不需要安装第三方Flash插件。
选择将现代HTML5浏览器与WebBrowser控件一起使用的一种方法是进行显式注册表设置(浏览器功能模拟),或许还可以指定DOCTYPE。这里有更多详细信息:How to have Delphi TWebbrowser component running in IE9 mode?虽然这个问题特别询问了IE9,但答案中的文档链接提供了其他IE版本的详细信息。
如果你不能控制HTML文档,那么你需要使用上面的方法。
另一方面,如果您确实控制了HTML文档的内容,那么还有另一种方法。你可以把这个放在
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
作为页面<head>
中的第一项。edge
的含义是IE的最新版本。如果您希望以特定版本为目标,例如IE9,则可以使用:
<meta http-equiv="X-UA-Compatible" content="IE=9" />
有关这方面的更多信息,请单击此处:
较早版本的IE不支持此标头,如果您需要迎合它们,则返回到注册表中的浏览器功能仿真。感谢评论中的@whosrdaddy和@TLama,看起来IE8引入了对X-UA-Compatible
的支持。
发布于 2015-06-01 17:06:30
如前所述,我认为使用TWebBrowser是错误的方式,因为你几乎不能控制你的视频。因为这样你就可以控制你自己的视频播放了。
*注意*
直接流式传输YouTube视频违反了服务条款
*注意*
正如我所提示的,我在这里做了一个如何在Wincontrol ex上播放youtube视频的例子。TPanel。
由于该示例包含用于解析youtube URL的代码和用于解析嵌入视频的youtube页面的源代码的代码,因此我不能在此发布完整的源代码。你必须从这个链接here中获取它
我将在这里介绍一下我的例子的主要思想。
首先是最终结果的截图:
第一件事是导入WindowsMediaPlayer系统组件(不要与Delphi附带的组件混淆),并将WMPLib_TLB.pas alon与项目源代码一起保存。
下一步是声明一个类的私有实例:
WindowsMediaPlayer: TWindowsMediaPlayer;
在formCreate中,创建一个实例并设置它:
procedure TMainform.FormCreate(Sender: TObject);
begin
WindowsMediaPlayer := TWindowsMediaPlayer.Create(Panel2);
WindowsMediaPlayer.Parent := Panel2;
WindowsMediaPlayer.Align := TAlign.alClient;
WindowsMediaPlayer.Visible := True;
WindowsMediaPlayer.Settings.AutoStart := True;
WindowsMediaPlayer.uiMode := 'none';
with TYoutubeThread.Create('https://www.youtube.com/watch?v=7vkYiCdn834') do
OnTerminate := YoutubeThreadTerminate;
end;
下一步是创建一个TYoutubeThread
。TYoutubeThread
是一个线程,它将获取所请求youtubepage的HTML源代码,并对其进行解析,以便获得有关嵌入式视频的信息。这个线程的源代码可以在完整的示例中找到。
当线程终止时,我们需要设置GUI:
procedure TMainform.YoutubeThreadTerminate(Sender: TObject);
var
YoutubeThread: TYoutubeThread;
begin
YoutubeThread := Sender as TYoutubeThread;
if YoutubeThread = nil then
exit;
//The information list are sorted my number of pixels in the video
FInformation := YoutubeThread.Youtube.Informations.Last;
Caption := Format('%s %s (%dx%d)', [YoutubeThread.Youtube.Title, FInformation.Quality, FInformation.Size.cx, FInformation.Size.cy]);
Panel1.Visible := True;
Width := FInformation.Size.cx + 50;
Height := FInformation.Size.cy + Panel1.Height + 50;
WindowsMediaPlayer.URL := FInformation.VideoLink;
TrackBar1.Max := 0;
end;
我省略了两个单元,它们可以在这里下载http://pastebin.com/TqCUV9tg和这里http://pastebin.com/WFGctwrf。所以你需要一份SuperObject
的拷贝
或者您可以下载完整的工作示例here
https://stackoverflow.com/questions/30566714
复制相似问题