Как встроить видео с YouTube в более новые версии Delphi?
Я пытаюсь загрузить видео с YouTube в TWebBrowser в Delphi XE7 и получаю сообщение об ошибке:
Для воспроизведения видео требуется Adobe Flash Player или браузер с поддержкой HTML5.
Получить последнюю версию Flash Player
Узнайте больше об обновлении до браузера HTML5
Я могу нормально загружать HTML.
Примеры, которые я нашел размещенные здесь ранее, относятся к гораздо более старым версиям Delphi, поэтому мне интересно, если это проблема с более новыми версиями, или TWebBrowser, или что-то в моей среде (VMWare 7 с Windows 7).
РЕДАКТИРОВАТЬ: Моя цель состоит в том, чтобы просто иметь возможность загружать и воспроизводить видео с URL-адреса, как видео YouTube. Другие решения, кроме TWebBrowser, хороши, особенно если они могут работать кроссплатформенно.
2 ответа
Вы задаетесь вопросом, связаны ли ваши проблемы с версией Delphi. Что ж, элемент управления WebBrowser - это системный элемент управления. Версия Delphi не актуальна, потому что сервис предоставляется базовой системой. Если что-то изменилось, вероятно, You Tube предоставит вам видео.
Если вы создаете HTML-код, который встраивает удаленное видео, вы должны следовать последней документации You Tube относительно того, как это должно быть сделано. Не используйте статьи, посвященные Delphi, в качестве руководства. Используйте современные статьи, посвященные новейшим технологиям, используемым You Tube.
У меня есть ощущение, хотя вы не утверждаете в этом вопросе, что вы используете старый и, возможно, устаревший метод для встраивания видео в YouTube. Используйте 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. Подробнее здесь: Как запустить компонент Delphi TWebbrowser в режиме IE9? Хотя этот вопрос конкретно задает вопрос о 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" />
Больше информации об этом здесь:
- https://msdn.microsoft.com/en-us/library/ms533876.aspx
- https://www.modern.ie/en-gb/performance/how-to-use-x-ua-compatible
- Как поместить элемент управления WebBrowser в IE9 в стандарты?
Более старые версии IE не поддерживают этот заголовок, и если вам нужно обслужить их, вы вернетесь к эмуляции функций браузера в реестре. Благодаря @whosrdaddy и @TLama в комментариях кажется, что в IE8 появилась поддержка X-UA-Compatible
,
Как уже говорилось, я полагаю, что использование TWebBrowser - неправильный путь, потому что вам нужно мало контролировать свое видео. Потому что тогда вы сами контролируете воспроизведение видео.
*** НОТА ****
ПРЯМАЯ потоковая передача видео с YouTube нарушает условия предоставления услуг
*** НОТА ****
Как я и обещал вам, я привел здесь пример того, как воспроизводить видео на YouTube на Wincontrol ex. TPanel.
Поскольку пример включает в себя код для анализа URL-адреса YouTube и код для анализа исходного кода страницы YouTube, в которую встроено видео, я не могу опубликовать полный исходный код здесь. И вы должны получить это по этой ссылке здесь
Я пойду через основную идею моего экзамена.
Первый скриншот окончательного результата:
Первое, что нужно сделать, - это импортировать системный компонент 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
является потоком, который получит HTML-sourcocode запрошенного youubeepage и проанализирует его, чтобы получить информацию о встроенном видео. Исходный код для этой темы можно найти в полном примере.
Когда поток завершается, нам нужно настроить графический интерфейс:
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
Или вы можете скачать полный рабочий пример здесь