9

Netflix Instant player (silverlight) 是否有 Javascript API?最好是支持的,有文档的,但不受支持的,无文档的也可以;这是针对个人项目的。

我希望能够播放/暂停并寻找给定的时间。

4

6 回答 6

13

我很喜欢研究这个,我想我找到了你的答案。

首先,我发现 Netflix 某人的一篇(诚然旧的)帖子指出,他们的许可要求禁止他们提供从外部控制播放器的方法(所有东西都需要包装在 Netflix 品牌的应用程序中,并提供与播放器外部允许您将 netflix 播放器嵌入它不应该去的地方。)您可以在此处找到该回复(虽然它已有四年历史,但我想没有太大变化。)

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

我自己尝试在“立即观看”页面上四处窥探,并且有诸如 netflix.SilverLight 和 netflix.SilverLight.MoviePlayer 之类的对象(它有一个 getPlugin() 方法可以返回有关插件的一些详细信息和可挂钩事件,但没有方法用于控制,)但它们主要与暴露播放器视口的大小有关,其中包括将其放置在页面上所需的其他事项。我在任何对象中都找不到任何暗示它们与电影播放器​​交互的东西,这似乎允许我访问它。

我还捕获了播放器二进制文件,并通过它们窥探我发现了一个内部带有 [ScriptableMember] 修饰的方法的 ScriptInterface 对象,称为 PlayMovie()、StopMovie()、ShowCurtain()、HideCurtain()。

然后,我注意到播放器二进制文件中有另一个命名空间,名为 Netflix.Silverlight.CBPApp.HostedPlayer,它有自己的接口 - HostedPlayerScriptInterface。这包含了你想要的一切——播放位置的数据、用于增加和减少播放速度的控件、暂停、播放、设置播放位置、查询播放状态等。所有这些都装饰为 [ScriptableMember]。

现在我伤透了你的心——看起来(无论出于何种原因)这个接口没有作为 [ScriptableType] 公开,据我了解,这是能够从 javascript 访问它的要求。事实上,唯一似乎以这种方式暴露的事情是玩家触发的事件。我的猜测是,这段代码是为了与其他合作伙伴集成,或者是从他们继承视频播放器原始代码的人那里遗留下来的,但似乎有意省略了这个 [ScriptableType] 参数。可能有一种方法可以请求构建为“托管”的二进制文件,尽管我不确定这意味着什么,而且我也怀疑这对于观看您正在尝试做的事情并拥有快点停下来吧。

对于以失望告终的冗长回应感到抱歉,但目前看来,还没有真正的方法可以做到这一点。我已经看到一些建议,基本上相当于将击键发送到模拟键盘控件的浏览器窗口,但这显然不是您要寻找的,所以我将在此处选择“否”作为答案. :)

编辑:

进一步的研究表明,这并不是我认为的死胡同。一旦我完成挖掘,我会更新这个。

编辑2:

所以,看起来你需要欺骗 Netflix 播放器,让它认为它是在托管播放器模式下运行的。有一些配置选项可以传入,但我不确定具体是如何做到的。看起来这一切都是在播放器初始化时设置的——也许某种小书签可以重新加载页面并注入更改?或者也许只是重新加载播放器并更改设置。

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

是我想出来的地方。使用 HostedPlayerViewModel 时,将运行以下代码:

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

如果我没看错的话,你可以通过获取包含 netflix silverlight 播放器的 DOM 对象并调用来访问这个注册的对象

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

请记住,我还没有做太多这种 javascript 互操作的东西,所以大部分都是从文档中推断出来的,但似乎那里有一个 javascript 控制 API,这只是诱使玩家工作的问题托管模式。

不得不在这里停下来,但希望这会给你一个好的开始。我已经转储了该托管播放器 Javascript API 文件的内容,因此您可以看到一旦您设法使播放器处于托管模式时将公开的方法。

http://pastebin.com/UeN3NFMg

祝你好运!

于 2013-02-28T20:52:56.790 回答
4

我迟到了,我确信 netflix 处理它的客户端代码的方式已经发生了很大变化,但我建议你看看返回的对象netflix.cadmium.objects.videoPlayer()

这最终会改变,但嘿,它可能有用。

于 2015-02-25T09:36:32.767 回答
3

Since you mentioned undocumented...

In Silverlight for a method to be exposed to JavaScript directly, it needs attributes [ScriptableType] on its class and [ScriptableMember] on itself. You could try opening up the XAP file for the Netflix player, disassembling the main assembly, and searching for any methods with [ScriptableMember] attached to them. This may not turn up anything useful at all, but it is something you can try nonetheless.

于 2011-05-22T07:27:14.983 回答
1

也许 Netflix 官方网页是一个开始寻找的地方?

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

于 2011-05-22T05:22:20.680 回答
1

Boxee 可能在某个时候能够控制它:http: //dir.boxee.tv/apps/helper2/netflix.js

(可能还有其他一些分支)。

我还想知道 netflix 转移到 HTML5 实现是否会以某种方式允许插件控制播放。GL!

于 2014-11-27T03:06:24.460 回答
-3

<iframe src="https://www.netflix.com/watch"></iframe>

于 2020-06-03T18:58:51.490 回答