
Show HN: Netflix Party – Synchronize Netflix Video Playback - curryhoward
https://www.stephanboyer.com/post/105/netflix-party-synchronizing-netflix-video-playback
======
ec109685
"The basic architecture of Netflix Party is a client-server model. The clients
connect to the server to synchronize their playback state. For the server, I
wanted something low-latency that many clients could connect to at a time.
Node.js fit the bill nicely."

Given the the model is traditional request/response (no push), wouldn't
literally any web server tech fit this bill?

~~~
mtrpcic
It looks like the backend is "dumb", and doesn't handle persistence (as it's
not really needed), so using node allows the OP to simply store session state
for clients on the stack as a global variable, so the server is completely
independent and doesn't rely on any additional infrastructure. Most other
backend techs (PHP, Ruby, most Python) simply handle the Request/Response
cycle, with memory being cleared and allocated each time. Other web techs can
do this, but node madebit easy " out of the box".

~~~
ec109685
Well, PHP comes with an opcode cache than can be used across requests.

------
bambax
> _Jiggle the mouse so the playback controls appear. Wait 10ms for the UI to
> respond. 1ms is apparently not enough._

It doesn't seem necessary for the controls to be visible, to be able to
interact with them?

    
    
        $('.player-control-button.player-play-pause.pause').click();
    

and

    
    
        $('.player-control-button.player-play-pause.play').click();
    

seem to work (in the console) whether the controls are visible or not?

> _Netflix doesn’t expose any JavaScript functions for manipulating video
> playback_

Apparently the player used to be at netflix.cadmium.objects.videoPlayer() but
it seems to not be there anymore.

 _netflix.player.diag.togglePanel( "log")_ overlays a detailed log of a lot of
things happening in the player.

 _netflix.player.getVersion()_ shows the current version of the player; mine
is "2.0000.453.011".

Edit: showgoers.tv that aims to do the same thing, has a script for
controlling the player at
[http://assets.showgoers.tv/sync2.js](http://assets.showgoers.tv/sync2.js)
(minified) and as far as I can tell they too simulate clicks on the interface.

~~~
tetrep
i would assume mouse controls are used because they are less likely to have a
breaking change pushed out silently by netflix than the "private" JavaScript
APIs.

~~~
bambax
True, but the classes that qualify the buttons can be changed by Netflix just
as easily as anything else...

------
m1sta_
I'd love for this to be native in the Netflix apps and to function between
accounts in two different countries. Watching TV with friends and family back
home would be wonderful.

~~~
MichaelGG
Isn't it a bit strange that after so many years, Netflix's player is as basic
as anything? Even YouTube offers more. Yeah I'm sure Netflix has all sorts of
non-visible stuff to make it work well but it's like they don't even consider
the player to be a place they can deliver features.

~~~
DanBC
I really want companies to stop stuffing features into their product.

I want them to develop something that works, and works very well, and then
optimise it carefully.

Nice to have but non essential features should be offered in an experimental,
unsupported, panel. "Try this, you might like it, but it might not work and we
don't provide any support if it doesn't work".

There's a long list of software that was good, that improved to be great, and
then continued to "improve" and became huge buggy laggy messes.

~~~
MichaelGG
OK. But Netflix doesn't even have a decent player. No audio boost. No picture
controls. Doesn't even have subtitle controls. I mostly don't use Netflix
(their selection went to hell and they seem intent on shoving 1-star stuff in
my face) but on the rare occasion I do, it's generally subpar. They're at no
risk of turning terrible.

~~~
cube00
Subtitles are available on both web and mobile apps, most (if not all) titles
have subtitles available.

------
jeremy7600
My girlfriend and I just went "3 2 1 play" on Skype.

Hardest part is picking the same movie.

Back when hulu had 1 15 second commercial, we would always pause after the
commercials so we could do another countdown (another reason Netflix wins
out). I paused and waited and waited and waited. And my girlfriend is being
very serious, after I was laughing during a very funny scene. Turns out we
started talking about one movie, then another, and one of us started the first
and the other started the 2nd, and their first commercials were several
minutes apart. We both had a good laugh over it!

------
ubertaco
My girlfriend (who lives a few states away) and I have been using
[http://showgoers.tv](http://showgoers.tv) for the same thing for a bit. Are
there any advantages of Netflix Party over Showgoers?

~~~
brazzledazzle
It seems like you'd be the most qualified to tell us.

~~~
ubertaco
My reason for asking is because I didn't see any advantages, but I wasn't sure
if I was missing something. At a glance, Showgoers seems a bit more mature of
a solution than Netflix Party; they've had head-start time to integrate simple
text chat and friendly UI, where Netflix Party seems more raw by nature of
being newer to the space.

I guess I was just looking for a "I had this problem, looked around and found
Showgoers, but it was missing _______, so I built this to fill that need", but
it looks like the case is more "I had this problem, so I just went and built
something," which is not necessarily bad either.

------
FanaHOVA
As somebody in a long distance relationship, thank you :)

------
pimlottc
Very nice! Is there a good solution like this for Spotify or other streaming
music services? One that doesn't just rebroadcast a private audio stream?

~~~
nzoschke
I experimented with making one for Spotify.

You can control the desktop player with the undocumented WebHelper API.

[http://cgbystrom.com/articles/deconstructing-spotifys-
builti...](http://cgbystrom.com/articles/deconstructing-spotifys-builtin-http-
server/)

Me and a friend could run a custom node.js script locally and control each
other's players.

However I never figured out half the polish OP did to get sync really tight,
nor packaged and published my solution.

------
flippant
I created Rabbit[0] which allows me to stream h.264/mp3 encoded videos and
synchronize the video with a partner. I recently added a feature that overlays
a video chat using some simple WebRTC code.

[0] [https://github.com/marvelm/rabbit-ex](https://github.com/marvelm/rabbit-
ex)

------
Malankov
Nice, another one exists for YouTube videos and pretty much any online HTML5
videos [http://togethr.tv/](http://togethr.tv/)

------
akilism
didn't the xbox do this 3 or 4 years ago?

~~~
moftz
They used to have this at least 6-7 years ago but took it away. Everyone had
to have a netflix account so I don't know why it went away.

~~~
Aleman360
Undoubtedly because no one used it.

~~~
moftz
I have no clue how popular it was. I do know that my friends and I used it
around once or twice a week during the school year, more during the summer.
This was also during the time where Netflix online selection really wasn't
great so whatever bad movie/show you watched (and I don't mean "so bad its
good"), it probably wasn't worth watching with friends.

