如何在较新版本的Delphi中嵌入YouTube视频?

时间:2015-06-01 06:10:57

标签: delphi video youtube embed delphi-xe7

我试图在Delphi XE7中将YouTube视频加载到TWebBrowser中,但我收到的错误是:

视频播放需要Adobe Flash Player或支持HTML5的浏览器。
获取最新的Flash Player
了解有关升级到HTML5浏览器的更多信息

我可以正常加载普通的HTML。

我之前发现的以前发现的示例适用于旧版本的Delphi,所以我想知道这是新版本或TWebBrowser的问题,还是我环境中的问题(VMWare 7 with Windows 7)。

编辑:我的目标只是能够从网址加载和播放视频,例如YouTube视频。 TWebBrowser以外的解决方案很好,特别是如果它们可以跨平台运行。

2 个答案:

答案 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

得到它

我将在这里讨论我的例子。

首先是最终结果的截图: enter image description 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;

下一步是创建TYoutubeThreadTYoutubeThread是一个线程,它将获取所请求的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