Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在更新版本的Delphi中嵌入YouTube视频?_Delphi_Video_Youtube_Embed_Delphi Xe7 - Fatal编程技术网

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

如何在更新版本的Delphi中嵌入YouTube视频?,delphi,video,youtube,embed,delphi-xe7,Delphi,Video,Youtube,Embed,Delphi Xe7,我正在尝试将YouTube视频加载到Delphi XE7中的TWebBrowser中,但出现了一个错误,错误如下: 视频播放需要Adobe Flash Player或支持HTML5的浏览器。获取最新的Flash Player 了解有关升级到HTML5浏览器的更多信息 我可以加载正常的HTML 我之前在这里找到的示例适用于更旧版本的Delphi,因此我想知道这是否是新版本、TWebBrowser或我的环境中的某些东西(带Windows 7的VMWare 7)的问题 编辑:我的目标只是能够从URL加

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

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

我可以加载正常的HTML

我之前在这里找到的示例适用于更旧版本的Delphi,因此我想知道这是否是新版本、TWebBrowser或我的环境中的某些东西(带Windows 7的VMWare 7)的问题


编辑:我的目标只是能够从URL加载和播放视频,比如YouTube视频。除TWebBrowser之外的解决方案也不错,特别是如果它们可以跨平台运行。

您想知道您的问题是否与Delphi版本有关。WebBrowser控件是一个系统控件。Delphi版本不相关,因为服务是由底层系统提供的。如果有什么改变的话,那很可能是YouTube传送视频的方式

如果您正在制作嵌入远程视频的HTML,那么您应该按照Tube提供的最新文档进行操作。不要使用多年的德尔福特定文章作为指导。使用针对您所使用的最新技术的现代文章

我有一种感觉,尽管你在问题中没有这样说,你正在使用一种旧的,可能不推荐的方法来嵌入YouTube视频。使用iframe,如下所述:


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

如果您没有采取其他特定步骤,您的WebBrowser控件将使用传统IE浏览器引擎。所以它不支持HTML5。甚至可能连Flash支持都没有,也就是说,如果你的Tube还准备好将视频作为Flash提供的话。现在HTML5是首选。不仅仅是因为现代浏览器支持开箱即用,而且不需要第三方Flash插件安装

选择使用带有WebBrowser控件的现代HTML5浏览器的一种方法是进行显式注册表设置(浏览器功能模拟),并可能指定DOCTYPE。这里有更多细节:尽管这个问题专门询问IE9,但答案中的文档链接提供了其他IE版本的详细信息

如果您无法控制HTML文档,则需要使用上述方法

另一方面,如果您确实控制HTML文档的内容,那么还有另一种方法。你可以把这个

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
更多信息请点击此处:


IE的旧版本不支持此标题,如果您需要满足这些标题,则可以返回注册表中的浏览器功能模拟。感谢评论中的@whosrdaddy和@TLama,IE8似乎引入了对
X-UA-Compatible

的支持,正如前面所述,我认为使用TWebBrowser是错误的,因为你几乎无法控制你的视频。因为这样你就可以控制自己的视频播放了

***注****

YouTube视频的直接流式传输违反了服务条款

***注****

正如我向你保证的,我在这里举了一个例子,说明如何在Wincontrol ex.TPanel上播放youtube视频

由于该示例包含用于解析youtube URL的代码和用于解析嵌入视频的youtube页面的源代码,因此我无法在此处发布完整的源代码。你必须从这个链接获得它

我将在这里回顾一下我的例子的主要思想

首先是最终结果的屏幕截图:

首先要导入WindowsMediaPlayer系统组件(不要与Delphi附带的组件混淆),并将WMPLib_TLB.pas与项目源代码一起保存

下一步是声明类的私有实例:

WindowsMediaPlayer:TwinDowsMeadiplayer

在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
是一个线程,它将获取所请求YouTube页面的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;
我省略了两个单位,它们可以放在这里 在这里。您还需要一份
SuperObject


或者您可以下载完整的工作示例

@DavidSchwartz:默认情况下,嵌入式浏览器在IE6模式下运行,即使您安装了IE11。如果您不想更改注册表项,那么解决此问题的唯一方法是修改网页(添加标记
)嘿,不是我们吗?你可以从你的应用程序中编写HKCU的密钥,所以这真的不是问题吗?@JensBorrisholt是的,我很想看一个例子。谢谢。看在上帝的份上,它不是delphi组件,它是一个系统组件!!IE包括早期版本的兼容模式。比如说,您将在IE7模式下获得IE11渲染。为什么你如此坚持要知道更多?正如我在回答中解释的,这是一个系统组件。德尔福与此无关。我已经链接到组件的文档。与其生气,我建议你阅读那份文件和我的答案。我不喜欢这种交流,也不喜欢你的态度。大卫是对的。IE行为与Delphi完全无关。我想微软有一些很好的理由认为IE默认运行在IE7模式下,若你们想改变那个种行为,你们就必须摆弄它registry@DavidSchwartz:Delphi下的Twebbrowser只不过是IE webbrowser嵌入式控件的包装器组件(与大多数VCL包装器一样)@戴维施瓦茨:如果你不同意微软的观点,也不介意怀疑额外的DLL的w
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;