Netflix Instant player (silverlight) 是否有 Javascript API?最好是支持的,有文档的,但不受支持的,无文档的也可以;这是针对个人项目的。
我希望能够播放/暂停并寻找给定的时间。
Netflix Instant player (silverlight) 是否有 Javascript API?最好是支持的,有文档的,但不受支持的,无文档的也可以;这是针对个人项目的。
我希望能够播放/暂停并寻找给定的时间。
我很喜欢研究这个,我想我找到了你的答案。
首先,我发现 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 文件的内容,因此您可以看到一旦您设法使播放器处于托管模式时将公开的方法。
祝你好运!
我迟到了,我确信 netflix 处理它的客户端代码的方式已经发生了很大变化,但我建议你看看返回的对象netflix.cadmium.objects.videoPlayer()
。
这最终会改变,但嘿,它可能有用。
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.
也许 Netflix 官方网页是一个开始寻找的地方?
Boxee 可能在某个时候能够控制它:http: //dir.boxee.tv/apps/helper2/netflix.js
(可能还有其他一些分支)。
我还想知道 netflix 转移到 HTML5 实现是否会以某种方式允许插件控制播放。GL!
<iframe src="https://www.netflix.com/watch"></iframe>