Как встроить видео с 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" />

Больше информации об этом здесь:

Более старые версии 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

Или вы можете скачать полный рабочий пример здесь

Другие вопросы по тегам