Вопрос по wpf, browser, c#, youtube, .net – Воспроизведение YouTube на весь экран в элементе управления WebBrowser

4

У меня есть следующий XAML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Grid>

    <WebBrowser x:Name="webBrowser1"/>

</Grid>

Я пытаюсь воспроизвести видео на YouTube. Вот что я попробовал:

this.webBrowser1.Source = new Uri("http://youtube.googleapis.com/v/L8bE5-g8VC0");

Этот показывает плеер YouTube со всеми элементами управления плеером. Однако полноэкранная кнопка не работает. Я нажимаю на нее, но игрок не работает в полноэкранном режиме. Кнопка становится просто отключенной.

Я также попробовал это:

this.webBrowser1.Source = new Uri("http://www.youtube.com/embed/L8bE5-g8VC0");

Это также отображает плеер YouTube со всеми элементами управления плеером. Кнопка полного экрана работает правильно. Однако, когда я снова иду к этому или другому видео (установив свойство Source), кнопки проигрывателя исчезают. Чтобы снова увидеть кнопки плеера, мне нужно удалить временные интернет-файлы для IE. Я мог удалять временные файлы каждый раз перед воспроизведением видео, но это не решение для меня.

Я работаю под управлением Windows 7 64bit и использую WPF 4.0. Я хочу, чтобы в моем веб-браузере отображался проигрыватель YouTube, и чтобы полноэкранная кнопка работала правильно. У кого-нибудь есть идеи?

Я не знаю ответа. Но я думаю, что есть два способа сделать это. 1) Возьмите разрешение экрана текущего компьютера и увеличьте размер webBrowser с помощью GDI + / WPF или чего-то еще ... 2) Попробуйте сделать это с помощью javascript, который компонент webbrowser может обрабатывать этот js-код, чтобы поднять полноэкранный режим, в который встроен объект flash. Кстати, интересный вопрос .. Lost_In_Library

Ваш Ответ

1   ответ
8

Решение, которое сработало для меня - создание небольшой HTML-страницы со встроенным видеоплеером:

public static class WebBrowserExtensions
{
    private static string GetYouTubeVideoPlayerHTML(string videoCode)
    {
        var sb = new StringBuilder();

        const string YOUTUBE_URL = @"http://www.youtube.com/v/";

        sb.Append("<html>");
        sb.Append("    <head>");
        sb.Append("        <meta name=\"viewport\" content=\"width=device-width; height=device-height;\">");
        sb.Append("    </head>");
        sb.Append("    <body marginheight=\"0\" marginwidth=\"0\" leftmargin=\"0\" topmargin=\"0\" style=\"overflow-y: hidden\">");
        sb.Append("        <object width=\"100%\" height=\"100%\">");
        sb.Append("            <param name=\"movie\" value=\"" + YOUTUBE_URL + videoCode + "?version=3&amp;rel=0\" />");
        sb.Append("            <param name=\"allowFullScreen\" value=\"true\" />");
        sb.Append("            <param name=\"allowscriptaccess\" value=\"always\" />");
        sb.Append("            <embed src=\"" + YOUTUBE_URL + videoCode + "?version=3&amp;rel=0\" type=\"application/x-shockwave-flash\"");
        sb.Append("                   width=\"100%\" height=\"100%\" allowscriptaccess=\"always\" allowfullscreen=\"true\" />");
        sb.Append("        </object>");
        sb.Append("    </body>");
        sb.Append("</html>");

        return sb.ToString();
    }

    public static void ShowYouTubeVideo(this WebBrowser webBrowser, string videoCode)
    {
        if(webBrowser == null) throw new ArgumentNullException("webBrowser");

        webBrowser.NavigateToString(GetYouTubeVideoPlayerHTML(videoCode));
    }
}

Использование:

this.webBrowser1.ShowYouTubeVideo("L8bE5-g8VC0");
Вау, это работает. Спасибо :) Damian Antonowicz

Похожие вопросы