2011-05-22 65 views
9

是否有Netflix Instant player(silverlight)的Javascript API?最好是支持的,有記錄的一個,但不支持的,沒有記錄的一個可能也不錯;這是一個個人項目。Netflix Instant Player(silverlight)的JavaScript API?

我希望能夠播放/暫停並尋找特定的時間。

+0

另請參閱http:// stackoverflow。com/questions/9195337/use-javascript-to-pause-jump-to-position-and-adjust-volume-in-netflixs-silver並用於控制HTML5播放器,請參閱http://stackoverflow.com/q/27927950/32453 – rogerdpack 2016-09-26 15:38:45

回答

1

也許Netflix的官方網頁是一個開始尋找的地方?

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

+1

在問這個問題之前,我開始了那裏;不幸的是,這個API似乎是尋找/排隊/播放即時電影,而不是控制播放器。 (Tbf,我原來的問題對我想做的事情模糊不清。) – 2011-05-22 07:08:28

3

既然你提到無證...

在Silverlight的方法暴露在JavaScript的直接,它需要對自身屬性[ScriptableType]於它的類和[ScriptableMember]。您可以嘗試打開Netflix播放器的XAP文件,拆卸主要程序集,並搜索連接到它們的[ScriptableMember]的任何方法。這可能根本無法提供任何有用的信息,但仍然可以嘗試。

+0

任何人最終都會這樣做?我在Mac上,所以我沒有辦法剖析Netflix的silverlight應用程序。我也在使用javascript來控制在netflix上播放的視頻。 – RobKohr 2012-02-08 14:39:53

13

我很開心挖掘到這一點,我想我找到了答案。首先,我從Netflix的某個人那裏發現了一封(不可否認的老)帖子,指出他們的許可要求禁止他們提供從外部控制玩家的方式(所有內容都需要包裝在Netflix品牌的應用程序中,並提供從外部與玩家進行交互的方式將允許你將netflix播放器嵌入到它不應該去的地方。)你可以在這裏找到答案(雖然它已經四年了,但我想沒有太大變化。)

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

我試着自己窺視'立即觀看'頁面,還有像netflix.SilverLight和netflix.SilverLight.Mo這樣的對象viePlayer(它有一個getPlugin()方法,它返回關於插件和可掛鉤事件的一些細節,但沒有用於控制的方法),但它們主要是暴露玩家視口的大小,以及放置它的其他必要事項在頁面上。我無法找到任何暗示他們與電影播放器​​互動的任何東西,這似乎讓我能夠訪問它。我也抓住了播放器的二進制文件,並通過它們窺探我在內部用[ScriptableMember]裝飾的方法在其中發現了一個名爲PlayMovie(),StopMovie(),ShowCurtain(),HideCurtain()的ScriptInterface對象。

然後,我注意到在播放器二進制文件中有另一個名爲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) 

這要是我讀正確會讓你通過獲取DOM對象包含Netflix的Silverlight播放器,並呼籲

silverlightPlayer.content.findName('HostedPlayerControlScriptInterface_1').WhateverMethod() 
訪問此註冊對象

請記住,我沒有做這麼多的JavaScript interop的東西,這是從文檔推斷,但它似乎好像有一個JavaScript控制API在那裏,這只是一個欺騙玩家進入工作的問題在託管模式下。

要停在這裏,但希望這給你一個良好的開端。我已經放棄了託管播放器JavaScript API文件的內容,以便您可以看到一旦設法讓播放器處於託管模式時將會公開的方法。

http://pastebin.com/UeN3NFMg

祝你好運!

+1

寫得很好。我試圖通過使用chrome中的以下篡改密鑰腳本設置託管播放器配置來遵循您提供的內容:http://paste.kde.org/734150/。 不幸的是,似乎最有可能正確打開它的選項會導致播放器無法加載(請參閱粘貼評論)。 使用其他選項加載(或不加載)後,以下內容無法使用。 'var player = document.getElementById('SLPlayer'); player.content.findName('HostedPlayerControlScriptInterface_1'); // null player.content //似乎正確' 我對Silverlight並不熟悉,但有什麼想法? – boombatower 2013-04-29 06:49:28

+0

所以,有沒有人獲得這個工作的成功? – rogerdpack 2013-08-05 16:17:45

1

Boxee的可能已經能夠在一些點來控制它:http://dir.boxee.tv/apps/helper2/netflix.js

(一些其他的那個叉可能是周圍以及)。

我也想知道,如果將netflix轉換爲HTML5實現,它會以某種方式允許插件控制播放。 GL!

+0

Boxee的腳本似乎基於HostedPlayer,下面Max的帖子指出它是一個死樹。你可以使用'netflix.Silverlight.MoviePlayer.getPlugin()。settings.hostedPlayer'這個錯誤來檢查,'netflix.Silverlight.MoviePlayer.get_hosted_player_control()'不起作用。在Chrome中,我的視頻使用的是HTML5,所以你說得對,也許它會在那裏工作! – 2014-12-23 20:54:34

+0

@DerekDahmer也許這是可能的這些天,例如:http://stackoverflow.com/a/27931990/32453 – rogerdpack 2016-04-16 01:14:31

+0

@DerekDahmer我添加了我的最新的帖子(對於HTML5版本,這實際上是幾乎可控的LOL) – rogerdpack 2016-09-26 15:39:20

4

我對晚會的方式很遲鈍,我相信很多已經改變爲netflix如何處理它的客戶端代碼,但我建議你看看由netflix.cadmium.objects.videoPlayer()返回的對象。

這將最終改變,但嘿它可能是有用的。

+0

哦,我應該補充說這在firefox中不起作用,大概是因爲firefox netflix在Silverlight中呈現播放器控件而不是JS。 – eremzeit 2015-03-04 04:12:37