Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как создать приложение для воспроизведения видео с YouTube и других сайтов в Delphi XE7 с использованием VCL.

Delphi , Мультимедиа , Видео

 

Введение

В этой статье мы рассмотрим, как создать приложение на Delphi XE7 (VCL), которое позволит воспроизводить видео с YouTube, Vimeo, Dailymotion и других видеохостингов без отображения всей веб-страницы. Мы разберём решение, предложенное в обсуждении на форуме, и предложим альтернативные подходы.

Проблема и её решение

Как отметил пользователь JohnLM, стандартный компонент TWebBrowser в Delphi XE7 не подходит для этой задачи, так как он отображает всю веб-страницу YouTube, а не только видео. Кроме того, могут возникнуть проблемы совместимости со старыми версиями Windows (например, Windows 7).

Решение с WebView4Delphi

JohnLM нашёл решение с использованием компонента WebView4Delphi (TWVBrowser и TWVWindowParent). Вот как это работает:

  1. Вместо прямой загрузки URL видео (например, https://www.youtube.com/watch?v=ZJhJILyS388) используется embed-версия (https://www.youtube.com/embed/ZJhJILyS388).
  2. Для преобразования URL используется простая функция замены строки.

Пример кода:

procedure TMainForm.GoBtnClick(Sender: TObject);
var
  url: string;
  idx: integer;
begin               
  // Преобразование URL YouTube
  url := StringReplace(addresscb.Text, 'watch?v=', 'embed/', [rfIgnoreCase]);
  addressCb.Text := url;
  WVBrowser1.Navigate(url);

  // Добавление URL в список, если его там нет
  idx := ComboBox1.Items.IndexOf(url);
  if idx = -1 then
    ComboBox1.Items.Add(url);
end;

Альтернативные решения

1. Использование YouTube API

Для более продвинутого управления воспроизведением можно использовать YouTube IFrame Player API. Вот пример кода, который встраивает плеер:

procedure TMainForm.EmbedYouTubeVideo(VideoID: string);
var
  HTML: string;
begin
  HTML := 
    '<!DOCTYPE html>' +
    '<html>' +
    '<body>' +
    '  <iframe width="560" height="315" src="https://www.youtube.com/embed/' + VideoID + 
    '?autoplay=1" frameborder="0" allowfullscreen></iframe>' +
    '</body>' +
    '</html>';

  // Для TWebBrowser
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

  if WebBrowser1.Document <> nil then
  begin
    WebBrowser1.Document.Write(HTML);
    WebBrowser1.Document.Close;
  end;
end;

2. Использование CEF4Delphi

CEF4Delphi (Chromium Embedded Framework) - это мощная альтернатива, которая предоставляет современный движок Chromium для Delphi. Пример использования:

procedure TMainForm.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer);
begin
  if frame.IsMain then
  begin
    // Встраивание видео после загрузки
    frame.ExecuteJavaScript(
      'document.body.innerHTML = ''<iframe width="560" height="315" ' +
      'src="https://www.youtube.com/embed/' + FCurrentVideoID + 
      '" frameborder="0" allowfullscreen></iframe>'';',
      'about:blank', 0);
  end;
end;

Расширение функциональности

Автоматическое добавление URL из буфера обмена

Как предложил Die Holländer, можно автоматически добавлять URL из буфера обмена:

procedure TMainForm.Timer1Timer(Sender: TObject);
var
  ClipText: string;
  VideoID: string;
begin
  if Clipboard.HasFormat(CF_TEXT) then
  begin
    ClipText := Clipboard.AsText;
    if Pos('youtube.com/watch?v=', ClipText) > 0 then
    begin
      VideoID := Copy(ClipText, Pos('v=', ClipText) + 2, 11);
      if ComboBox1.Items.IndexOf(VideoID) = -1 then
        ComboBox1.Items.Add(VideoID);
    end;
  end;
end;

Обработка разных видеохостингов

Для поддержки разных видеохостингов можно создать функцию определения типа URL:

function TMainForm.GetVideoService(const URL: string): TVideoService;
begin
  if Pos('youtube.com', URL) > 0 then
    Result := vsYouTube
  else if Pos('vimeo.com', URL) > 0 then
    Result := vsVimeo
  else if Pos('dailymotion.com', URL) > 0 then
    Result := vsDailymotion
  else
    Result := vsUnknown;
end;

function TMainForm.GetEmbedURL(const URL: string): string;
var
  Service: TVideoService;
  VideoID: string;
begin
  Service := GetVideoService(URL);
  case Service of
    vsYouTube:
      begin
        VideoID := Copy(URL, Pos('v=', URL) + 2, 11);
        Result := 'https://www.youtube.com/embed/' + VideoID;
      end;
    vsVimeo:
      begin
        VideoID := Copy(URL, LastDelimiter('/', URL) + 1, MaxInt);
        Result := 'https://player.vimeo.com/video/' + VideoID;
      end;
    vsDailymotion:
      begin
        VideoID := Copy(URL, Pos('/video/', URL) + 7, MaxInt);
        VideoID := Copy(VideoID, 1, Pos('_', VideoID + '_') - 1);
        Result := 'https://www.dailymotion.com/embed/video/' + VideoID;
      end;
  else
    Result := URL;
  end;
end;

Проблемы и их решения

Как отметил Lars Fosdal, некоторые видео могут не воспроизводиться из-за ограничений, установленных владельцами контента. В этом случае можно:

  1. Попробовать использовать прямую ссылку на видео (если доступна)
  2. Предложить пользователю открыть видео в браузере
  3. Использовать YouTube Data API для проверки доступности видео

Заключение

Мы рассмотрели несколько подходов к созданию видеоплеера для YouTube и других сервисов в Delphi XE7. Основные варианты:

  1. WebView4Delphi - современное решение для Windows 7 и выше
  2. CEF4Delphi - мощный, но более ресурсоёмкий вариант
  3. YouTube IFrame API - максимальный контроль над воспроизведением

Для простого приложения достаточно решения с WebView4Delphi и преобразованием URL в embed-формат. Для более сложных сценариев стоит рассмотреть CEF4Delphi или прямое использование API видеохостингов.

Пример полного кода приложения можно найти в демонстрационных проектах WebView4Delphi или CEF4Delphi.

Создано по материалам из источника по ссылке.

Статья описывает создание приложения на Delphi XE7 для воспроизведения видео с YouTube и других видеохостингов с использованием различных подходов, включая WebView4Delphi, CEF4Delphi и YouTube API.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Видео ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-04 06:45:33/0.0058619976043701/0