首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在较新版本的Delphi中嵌入YouTube视频?

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

Stack Overflow用户
提问于 2015-06-01 14:10:57
回答 2查看 5K关注 0票数 4

我正在尝试将YouTube视频加载到Delphi XE7中的TWebBrowser中,但我收到了一个错误,内容如下:

播放视频需要Adobe Flash Player或支持HTML5的浏览器。

获取最新的Flash Player

了解有关升级到HTML5浏览器的详细信息

我可以很好地加载普通的HTML。

我之前在这里找到的例子是针对更老的Delphi版本的,所以我想知道这是不是新版本的问题,或者是TWebBrowser的问题,或者是我的环境(Windows7和Windows7)的问题。

编辑:我的目标很简单,就是能够加载并播放网址中的视频,就像YouTube视频一样。除了TWebBrowser之外的其他解决方案都很好,特别是如果它们可以跨平台运行的话。

EN

回答 2

Stack Overflow用户

发布于 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文档的内容,那么还有另一种方法。你可以把这个放在

代码语言:javascript
运行
复制
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

作为页面<head>中的第一项。edge的含义是IE的最新版本。如果您希望以特定版本为目标,例如IE9,则可以使用:

代码语言:javascript
运行
复制
<meta http-equiv="X-UA-Compatible" content="IE=9" />

有关这方面的更多信息,请单击此处:

较早版本的IE不支持此标头,如果您需要迎合它们,则返回到注册表中的浏览器功能仿真。感谢评论中的@whosrdaddy和@TLama,看起来IE8引入了对X-UA-Compatible的支持。

票数 6
EN

Stack Overflow用户

发布于 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中,创建一个实例并设置它:

代码语言:javascript
运行
复制
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源代码,并对其进行解析,以便获得有关嵌入式视频的信息。这个线程的源代码可以在完整的示例中找到。

当线程终止时,我们需要设置GUI:

代码语言:javascript
运行
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30566714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档