如前所述,我认为使用TWebBrowser是错误的方式,因为您对视频控制太少了。因此,您需要自己控制视频播放。
*** 注意 ****
直接流式传输YouTube视频会违反服务条款
*** 注意 ****
正如我向您承诺的那样,在此处提供了一个示例,演示如何在Wincontrol ex. TPanel上播放YouTube视频。
由于该示例包括用于解析YouTube URL的代码以及用于解析嵌入视频的YouTube页面的源代码的代码,因此我无法在此处发布完整的源代码。您需要从此处获取。
我将在此介绍我的示例的主要思路。
首先是最终结果的屏幕截图:
![enter image description here](https://istack.dev59.com/asy3m.webp)
第一件事是导入WindowsMediaPlayer系统组件(不要与Delphi附带的组件混淆),并将WMPLib_TLB.pas与项目源代码一起保存。
下一步是声明类的私有实例:
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
是一个线程,它将获取请求的YouTube页面的HTML源代码,并解析以获取有关嵌入式视频的信息。该线程的源代码可以在完整示例中找到。
当线程终止时,我们需要设置GUI:
procedure TMainform.YoutubeThreadTerminate(Sender: TObject);
var
YoutubeThread: TYoutubeThread;
begin
YoutubeThread := Sender as TYoutubeThread;
if YoutubeThread = nil then
exit;
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。
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
)。 - whosrdaddy