Netflix video player in Chrome - how to seek?

我是研究僧i 提交于 2019-11-29 02:24:42

Finally found a simple solution:

netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 999, pointerEventData: {playing: false}});

You can set:

  • position using value property
  • playing state using pointerEventData.playing property

It's not complete solution, but can be useful.

Previous version of netflix player was with global object window.netflix.cadmium.objects.videoPlayer. In the recent version it's empty, but you can access this object within events listeners:

  1. Open Chrome Developer Tools
  2. Select "body" element
  3. Select "Event Listeners"
  4. Turn on "Framework listeners"
  5. Select "keydown" event, "body" - handler p(e), "[[Scopes]]", 1 [[Closure]]
  6. You can save this object reference with context menu - "Store as a global variable"
  7. Then in new global variable you can get access to temp1.cadmium.objects.videoPlayer

    temp1.cadmium.objects.videoPlayer().getDuration() temp1.cadmium.objects.videoPlayer().seek(2283839); temp1.cadmium.objects.videoPlayer().seek(4283839);

[![enter image description here][1]][1]

I am not sure is it possible to do fully automatic. You can get access to this listeners by

getEventListeners(document.getElementsByTagName("body")[0]).keydown[0].listener

But I don't know how to get access to scopes variables

Looks like netflix changed player api. Its what I found:

const videoPlayer = netflix
  .appContext
  .state
  .playerApp
  .getAPI()
  .videoPlayer

// Getting player id
const playerSessionId = videoPlayer
  .getAllPlayerSessionIds()[0]

const player = videoPlayer
  .getVideoPlayerBySessionId(playerSessionId)

Now you can use full player API. For example player.seek or player.getCurrentTime or player.pause, etc...

Building on Dmitry's response jump ahead 10 seconds by

player.seek(player.getCurrentTime() - 10000)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!