我试图在Delphi XE7中将YouTube视频加载到TWebBrowser中,但我收到的错误是:
视频播放需要Adobe Flash Player或支持HTML5的浏览器。
获取最新的Flash Player
了解有关升级到HTML5浏览器的更多信息
我可以正常加载普通的HTML。
我之前发现的以前发现的示例适用于旧版本的Delphi,所以我想知道这是新版本或TWebBrowser的问题,还是我环境中的问题(VMWare 7 with Windows 7)。
编辑:我的目标只是能够从网址加载和播放视频,例如YouTube视频。 TWebBrowser以外的解决方案很好,特别是如果它们可以跨平台运行。
答案 0 :(得分:6)
您想知道您的问题是否与Delphi版本有关。 WebBrowser控件是一个系统控件。 Delphi版本不相关,因为该服务由底层系统提供。如果有任何变化,很可能是You 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插件。
选择使用带有WebBrowser控件的现代HTML5浏览器的一种方法是进行显式注册表设置(浏览器功能模拟),并可能指定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
的支持。
答案 1 :(得分:4)
如前所述,我相信使用TWebBrowser是错误的方式,因为你无法控制你的视频。因为那时你可以自己控制视频播放。
***注****
YouTube视频的直接流媒体违反了服务条款
***注****
正如我向你推荐的那样,我在这里举了一个关于如何在Wincontrol上播放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 sourcocode并解析它以获取有关嵌入视频的信息。该线程的源代码可以在完整的示例中找到。
当线程终止时,我们需要设置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