2011-05-22 24 views
9

¿Hay una API de Javascript para el reproductor Instant de Netflix (silverlight)? Preferiblemente, una documentada respaldada y documentada, pero una no documentada e incompatible también podría estar bien; esto es para un proyecto personal.Javascript API para Netflix Instant Player (silverlight)?

Me gustaría poder reproducir/pausar y buscar en un momento dado.

+0

Ver también http: // stackoverflow.com/questions/9195337/use-javascript-to-pause-jump-to-position-and-adjust-volume-in-netflixs-silver y para controlar el reproductor HTML5, consulte http://stackoverflow.com/q/27927950/32453 – rogerdpack

Respuesta

1

¿Quizás la página web oficial de Netflix es un lugar para empezar a buscar?

http://developer.netflix.com/docs/JavaScript_APIs

+1

Empecé allí antes de hacer la pregunta; desafortunadamente, esta API parece ser para encontrar/poner en cola/reproducir películas instantáneas, sin controlar al jugador. (Tbf, mi pregunta original era vaga sobre lo que quería hacer.) –

3

Ya que menciona indocumentado ...

En Silverlight para un método para estar expuestos a JavaScript directamente, se necesita atributos [ScriptableType] en su clase y [ScriptableMember] sobre sí mismo. Podría intentar abrir el archivo XAP para el reproductor de Netflix, desensamblar el ensamblaje principal y buscar cualquier método con [ScriptableMember] adjunto. Puede que esto no le parezca nada útil, pero es algo que puedes probar de todos modos.

+0

¿Alguien termina haciendo esto? Estoy en un Mac, así que no tengo forma de analizar la aplicación Silverlight de Netflix. Yo también estoy buscando controlar el video que se reproduce en netflix usando javascript. – RobKohr

13

me he divertido cavar en esto, y creo que he encontrado la respuesta. Para empezar, encontré una publicación (ciertamente antigua) de alguien en Netflix que afirmaba que sus requisitos de licencia les prohibían proporcionar formas de controlar el reproductor de forma externa (todo lo que necesitaba estar envuelto en una aplicación de marca Netflix, y proporcionar la forma de interactuar con el jugador externamente le permitiría incrustar el reproductor de netflix en lugares donde no debería ir). Puede encontrar esa respuesta aquí (aunque tiene cuatro años, supongo que no mucho ha cambiado)

http://developer.netflix.com/forum/read/54172

Intenté husmear en la página de "ver al instante" y hay objetos como netflix.SilverLight y netflix.SilverLight.Mo viePlayer (que tiene un método getPlugin() que devuelve algunos detalles sobre el complemento y eventos aptos para conectarse, pero no tiene métodos de control), pero en su mayoría tiene que ver con exponer el tamaño de la ventana gráfica del reproductor, entre otras cosas necesarias para ubicarlo en la pagina. Realmente no pude encontrar nada en ninguno de los objetos que sugirieron que interactuaban con el reproductor de películas que parecían permitirme acceder a él.

También enganché los archivos binarios del jugador, y husmeé en ellos encontré un objeto ScriptInterface internamente con los métodos de [ScriptableMember] -decorated llamados PlayMovie(), StopMovie(), ShowCurtain(), HideCurtain().

Luego, me di cuenta de que hay otro espacio de nombres en los binarios del reproductor llamado Netflix.Silverlight.CBPApp.HostedPlayer, que tiene su propia interfaz - HostedPlayerScriptInterface. Esto tiene todo lo que desee - datos sobre posición de juego, controles para aumentar y disminuir la velocidad de reproducción, pausar, jugar, configurar la posición de juego, consultar el estado de reproducción, etc. Todos estos están decorados como [ScriptableMember] s.

Ahora te rompo el corazón, parece que (por cualquier razón) esta interfaz no está expuesta como [ScriptableType], que a mi entender es un requisito para poder acceder a ella desde javascript. De hecho, las únicas cosas que parecen estar expuestas de esta manera son los eventos que el jugador dispara.Supongo que este código es para integrarse con otros socios, o sobrante de alguien a quien heredaron el código original para el reproductor de video, pero parece ser intencional que este parámetro [ScriptableType] se omita. Puede haber una manera de solicitar un binario que esté diseñado para ser 'Hosted', aunque no estoy seguro de lo que eso significa, y también sospecho que será transparente para la gente que está mirando lo que estás tratando de hacer y tener un deja de ponerlo rápidamente.

Perdón por la respuesta larga que termina en decepción, pero parece que a partir de ahora no hay realmente una manera de hacer esto. He visto algunas sugerencias que básicamente equivalen a enviar pulsaciones de teclas a la ventana del navegador que emulan los controles del teclado, pero esto claramente no es lo que estás buscando, así que voy a ir con 'no' como respuesta aquí . :)

Editar:

más investigación está mostrando este no es el callejón sin salida que pensé que era. Voy a actualizar esto una vez que termine de cavar.

Edición 2:

Por lo tanto, parece que necesita para engañar al jugador de Netflix en el pensamiento de que se está ejecutando en modo de jugador alojada. Hay algunas opciones de configuración que se pueden pasar, pero no estoy seguro de cómo, específicamente, harías eso. Parece que todo está configurado en la inicialización del jugador. ¿Tal vez algún tipo de marcador podría volver a cargar la página e inyectar un cambio? O tal vez simplemente vuelva a cargar el reproductor y cambie la configuración.

this.PlayerViewModel = (applicationConfiguration.PlayerConfiguration.EnableHostedPlayerControl ? new HostedPlayerViewModel() : new GenesisPlayerViewModel()); 

Es donde me di cuenta. Cuando se utiliza el HostedPlayerViewModel, este código se ejecute:

HtmlPage.RegisterScriptableObject("HostedPlayerControlScriptInterface_1", this.b) 

la que si estoy leyendo correctamente le permitirá acceder a este objeto registrado por conseguir el objeto DOM que contiene el reproductor de Netflix Silverlight y llamando

silverlightPlayer.content.findName('HostedPlayerControlScriptInterface_1').WhateverMethod() 

Tenga en cuenta que no he hecho muchas de estas cosas de interoperabilidad javascript, gran parte de esto se infiere de la documentación, pero parece que hay una API de control de JavaScript, es solo una cuestión de engañar al jugador para que funcione en modo Hosted.

Tendrá que parar aquí, pero espero que esto le dé un buen comienzo. He descargado los contenidos de ese archivo alojado de API de JavaScript para que pueda ver los métodos que se expondrán una vez que logre obtener el reproductor en modo Hosted.

http://pastebin.com/UeN3NFMg

Buena suerte!

+1

Gran escritura. Traté de seguir lo que me proporcionó al establecer la configuración del reproductor alojado con el siguiente script tampermonkey en chrome, http://paste.kde.org/734150/. Desafortunadamente parece que las opciones que muy probablemente lo encienden correctamente hacen que el reproductor no se cargue (vea los comentarios en pasta). Después de cargar con otra opción (o ninguna), lo siguiente nunca funciona. 'var player = document.getElementById ('SLPlayer'); player.content.findName ('HostedPlayerControlScriptInterface_1'); // null player.content // parece correcto' No estoy familiarizado con Silverlight, pero ¿alguna idea? – boombatower

+0

¿Alguien alguna vez tuvo éxito al hacer que esto funcione? – rogerdpack

1

Boxee podría haber sido capaz de controlarlo en algún momento: http://dir.boxee.tv/apps/helper2/netflix.js

(algunos otros tenedores de que pueden ser alrededor también).

También me pregunto si la transferencia de Netflix a una implementación HTML5 de alguna manera permitiría que un complemento controle la reproducción. GL!

+0

Parece que el guión de Boxee se basa en HostedPlayer, que la publicación de Max a continuación indica que está a punto muerto. Puede verificarlo dos veces con 'netflix.Silverlight.MoviePlayer.getPlugin(). Settings.hostedPlayer' que es falso, y' netflix.Silverlight.MoviePlayer.get_hosted_player_control() 'no funciona. En Chrome, mis videos están usando HTML5, ¡así que tienes razón en que quizás funcione allí! –

+0

@DerekDahmer tal vez es posible en estos días, por ejemplo: http://stackoverflow.com/a/27931990/32453 – rogerdpack

+0

@DerekDahmer Agregué mi último a esa publicación (para la versión HTML5 que en realidad es casi controlable LOL) – rogerdpack

4

Llego muy tarde a la fiesta y estoy seguro de que ha cambiado mucho la forma en que netflix maneja su código del lado del cliente, pero le sugiero que mire el objeto devuelto por netflix.cadmium.objects.videoPlayer().

Esto cambiará eventualmente, pero bueno, podría ser útil.

+0

Oh, Debo añadir que esto no funciona en Firefox, presumiblemente porque para firefox netflix representa los controles del jugador en Silverlight en lugar de JS. – eremzeit