none
¿Como reproducir un vídeo de youtube con la URL en WUP O WPF? c# visual studio RRS feed

  • Pregunta

  • Buen día, me encuentro tratando de reproducir un vídeo de youtube en visual studio c#, sinceramente llevo todo el día y solo he encontrado información muy antigua (2013 hacia atrás y muchas cosas que no funcionan), la primera es utilizando la librería Mytoolkit junto con el componente "MediaElement" y utilizando el siguiente código

    private async void button1_Click(object sender, EventArgs e)
        {
            Uri _videoUri = await GetYoutubeUri("OgO4v6W72YY");
            if (_videoUri != null)
            {
                player.Source = _videoUri;
                player.Play();
            }
        }
    
    
        internal async Task<Uri> GetYoutubeUri(string VideoID)
        {
            YouTubeUri uri = await YouTube.GetVideoUriAsync(VideoID, YouTubeQuality.Quality1080P);
            return uri.Uri;
        }

    Y este es el .xaml

    Y este es el .xaml
    
    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <MediaElement x:Name="Reproductor" LoadedBehavior="Manual" ></MediaElement>
    
    
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="419,275,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
    
    </Grid>

    Se supone que eso debiera ser suficiente pero me da el siguiente error :

    Por lo que entiendo normalmente este error se debe a que no hay una referencia a un objeto pero no creo que sea eso ya que cuando envió una url de un vídeo diferente a alguno de Youtube este se reproduce si problemas, ejemplo:

     private async void button_Click(object sender, RoutedEventArgs e)
        {
            Uri _videoUri = await GetYoutubeUri("OgO4v6W72YY");
            if (_videoUri != null)
            {
                /*Uri directa*/
                 Reproductor.Source = new Uri("http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4");
                //Reproductor.Source = _videoUri;
                Reproductor.Play();
            }
        }
    
        internal async Task<Uri> GetYoutubeUri(string VideoID)
        {
            YouTubeUri uri = await YouTube.GetVideoUriAsync(VideoID, YouTubeQuality.Quality1080P);
            return uri.Uri;
        }
    También leí que se recomienda reproducirlo desde un WebView pero la idea es obtener solo el vídeo sin anuncios de antemano gracias por la ayuda



    Alvaro Fabian M:.


    lunes, 30 de abril de 2018 16:09

Todas las respuestas

  • hola

    Cuando se produce el error, si pasas el mouse sobre las variables que valor observas ?

    o sea, si pasa el mouse por sobre "_videoUri" que valor tiene la variable? puedes observar una url valida ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 2 de mayo de 2018 4:06
  • Buen día Leandro, esto es lo que me devuelve como @AbsoluteUri = ""https://r3---sn-hv8pnu5gjv-c59e.googlevideo.com/videoplayback?lmt=1394276694851010&dur=281.425&itag=18&ratebypass=yes&gir=yes&clen=21783348&initcwndbps=248750&expire=1525331194&c=WEB&ei=mmDqWtugFIWx4QS8lZ7ADQ&key=yt6&mime=video/mp4&mv=m&mt=1525309428&ms=au,rdu&pl=20&id=o-AJ-t8bELcRqNBfdQw6C_NPIH_NkhSZ6qE8Jy42g7JbAf&ipbits=0&mn=sn-hv8pnu5gjv-c59e,sn-hp57kn7s&ip=186.118.192.76&mm=31,29&fvip=3&fexp=23724337&requiressl=yes&sparams=clen,dur,ei,gir,id,initcwndbps,ip,ipbits,itag,lmt,mime,mm,mn,ms,mv,pl,ratebypass,requiressl,source,expire&source=youtube&signature=""

    No parece una URI Valida pero supuse que es por la seguridad que debe tener Youtube en su API

    Gracias por tomarte el tiempo de revisar el tema

    Esta es la documentación de la clase Youtube de la libreria toolkit (https://github.com/RSuter/MyToolkit/wiki/YouTube)


    Alvaro Fabian M:.


    jueves, 3 de mayo de 2018 1:16
  • Hola, unapreguntas, ¿Intentaste poner esa url en tu navegador? esa url envuelve un archivo mp4 así que de ser válida deberia de abrirte el video en el navegador.

    Si la url no abre en tu navegador entonces es muy probable que la librería que estas utilizando no este funcionando correctamente.

    De lo contrario entonces es probable que Youtube este detectando que no estas accediendo desde un navegador y por ende te bloquee la petición, para comprobar esto te recomiendo instales un snifer en tu computadora para ver que esta pasando a nivel de red, en particular yo te recomiendo fiddler ya que es muy facil de usar, una vez que tengas fiddler ejecutandose, ejecuta tu aplicación y has la solicitud del video, luego busca en fiddler la respuesta que devolvío youtube al hacer la solicitud, si la respuesta es distinta a 200(Ok) es muy probable que youtube este detectando que la petición no viene de un browser. 

    Has la prueba y compartenos los resultados, quizas podamos hayar alguna solución. 

    Saludos.

    jueves, 3 de mayo de 2018 13:12