2012-07-04 2 views
4

Я следующий XAML:Воспроизведение YouTube в полноэкранном режиме в контроле WebBrowser

<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 в своем WebBrowser и работать с полноэкранной кнопкой. У кого-нибудь есть идея?

+0

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

ответ

8

Solution, который работал для меня - строительство небольшой 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"); 
+0

Вау, это работает. Благодаря :) –

Смежные вопросы