Jump to content

Watch Party


chef

Recommended Posts

BillOatman
27 minutes ago, MBSki said:

So can Emby core team take advantage of Jellyfin code or no, as @roaku said... technical and legal reasons in the way.

JF came from a old version of Emby when it was open source.  But they changed the core architecture and I don't know what else since I have not looked at it closely.  So just dropping the code directly into Emby is probably not an option.  I suspect they could look at that code and do the equivalent in Emby.  

JF is also released under the GNU GPL.  Closed source, commercial projects like Emby need to tread lightly when even looking at GPL code.  That's the legal reason people have mentioned.

Edited by BillOatman
  • Thanks 1
Link to comment
Share on other sites

sydlexius
3 hours ago, BillOatman said:

JF came from a old version of Emby when it was open source.  But they changed the core architecture and I don't know what else since I have not looked at it closely.  So just dropping the code directly into Emby is probably not an option.  I suspect they could look at that code and do the equivalent in Emby.  

JF is also released under the GNU GPL.  Closed source, commercial projects like Emby need to tread lightly when even looking at GPL code.  That's the legal reason people have mentioned.

Given the nature of how GPL v2/v3 works, you can't merely look at the code in question and implement a version of it without potentially running afoul of copyright issues (it'd still be a derivative work).  You'd need to do proper reverse engineering, which involves a "clean room" methodology along the lines of what COMPAQ did to reverse-engineer the IBM BIOS.  The short of it is that you have individuals (Group 1) that look at the code who have no knowledge of or access to the target project code (Emby).  They define a specification based upon the code they wish to copy, and then hand it off to development (Group 2)  to implement it.  The resultant compiled project then gets reviewed for QA (potentially with no access to either code bases...Group 3) to compare functionality between the original product and the new one.  Rejected code has to be re-implemented without any hints or input from Group 1.

Factoid 1: Season 1 of Halt and Catch Fire was a dramatic retelling of COMPAQ's story.

Factoid 2: COMPAQ is an acronym for COMPatability And Quality.

Edited by sydlexius
  • Agree 1
Link to comment
Share on other sites

wow, i have been after a feature like this for years, but never really cared until recently, now the requirement for it has come, i find it's still not been implemented
i've read the entire thread from the last post to this one and through this to find the thread is still ACTIVE, last post 7 hours ago

i've several friends in USA i wish to watch movies with but constantly having to resync when nature calls/other makes it impossible
with some whos internet connection is strong enough stream it on discord, although the server is in my house, if it's a movie one of us has seen before, the second-time viewer will stream the movie from my server to their desktop so they get best quality then they re-stream it back to me through discord it's completely absurd

even if a few seconds out of sync, even without a whole permissions stack as they've all got admin rights on emby anyway, we're all adults
even if it was JUST syncing the play/pause and occasionally checking timeline, even if it just prompted a counter to the one furthest ahead to pause theirs for X seconds to bring them in sync again - even the tiniest ammount of automation to make this task easier would be a godsend

jellyfin has something like this already, at this point i'd argue it's in embys interest specially since they recently got featured in an LTT video, i'd also argue the release of such feature might even end up in a another LTT video given the success of the last time he spoke about media servers, 1.2 million views in 1 week btw...

if that doesn't scream revenue idk what does

 

  • Agree 1
Link to comment
Share on other sites

solidsnakex37
55 minutes ago, bugz000 said:

wow, i have been after a feature like this for years, but never really cared until recently, now the requirement for it has come, i find it's still not been implemented
i've read the entire thread from the last post to this one and through this to find the thread is still ACTIVE, last post 7 hours ago

i've several friends in USA i wish to watch movies with but constantly having to resync when nature calls/other makes it impossible
with some whos internet connection is strong enough stream it on discord, although the server is in my house, if it's a movie one of us has seen before, the second-time viewer will stream the movie from my server to their desktop so they get best quality then they re-stream it back to me through discord it's completely absurd

even if a few seconds out of sync, even without a whole permissions stack as they've all got admin rights on emby anyway, we're all adults
even if it was JUST syncing the play/pause and occasionally checking timeline, even if it just prompted a counter to the one furthest ahead to pause theirs for X seconds to bring them in sync again - even the tiniest ammount of automation to make this task easier would be a godsend

jellyfin has something like this already, at this point i'd argue it's in embys interest specially since they recently got featured in an LTT video, i'd also argue the release of such feature might even end up in a another LTT video given the success of the last time he spoke about media servers, 1.2 million views in 1 week btw...

if that doesn't scream revenue idk what does

 

You're not wrong. Not to say that Emby doesn't have a lot of features, but when the free option is catching up it's hard to argue.

It sounds like there isn't any product roadmap available? 

  • Agree 1
Link to comment
Share on other sites

Cheesegeezer
3 minutes ago, Mookdog said:

Emby Next-gen v8 for kodi has a watch party function now. It just proves it can be done. Actually works quite well

 

Mook

Nice Mook, what UI elements did you need to incorporate to get it working.

Link to comment
Share on other sites

rbjtech

@chef - Looking at your Github, I don't see the proof of Concept code for Watch Party - if you are ok to share, can you upload ?  Maybe as a private repo ?

I'd just like to see if this is a 'workable' solution - as from your YT video's - it looked 'functional' ?

Thanks !

 

 

  • Agree 1
Link to comment
Share on other sites

23 minutes ago, rbjtech said:

@chef - Looking at your Github, I don't see the proof of Concept code for Watch Party - if you are ok to share, can you upload ?  Maybe as a private repo ?

I'd just like to see if this is a 'workable' solution - as from your YT video's - it looked 'functional' ?

Thanks !

 

 

for anyone curious this is the latest video 
i would consider that absolutely functional, i'd be happy with 10x that delay - just so long as playback is somewhat sync'd 
adding a programmable offset so you can jog your own client forward or back by 100ms increments would allow for fine tuning (how i sync videos atm is i can sometimes hear the video playing on their end and i'll offset my video by setting it ahead, then double tapping space to pause/unpause until the feedback and my audio are exactly aligned, this ofcourse is not true to life due to latency, but perceptually it is completely sync'd - doing this automatically is difficult, (i suppose you could get playback info and ping NTP server and sync that way though but EVEN WITHOUT THIS, the option to manually input a delay would clear up any other discrepancies)
and EVEN WITHOUT THIS i would still use it, it's absolutely functional, if a little rough, but it's a whole lot better than nothing, and that's an understatement

  • Thanks 1
Link to comment
Share on other sites

13 hours ago, sydlexius said:

Halt and Catch Fire

Great series - especially for anyone who lived through that era.

When it comes time for us to implement this (or any) feature, we're not going to "clean room" it or reverse engineer anything.  We'll design and implement a solution we feel works best for Emby users.

Thanks.

  • Like 2
Link to comment
Share on other sites

sydlexius
28 minutes ago, ebr said:

Great series - especially for anyone who lived through that era.

When it comes time for us to implement this (or any) feature, we're not going to "clean room" it or reverse engineer anything.  We'll design and implement a solution we feel works best for Emby users.

Thanks.

I enjoyed the first season, however I have little patience for series where the main characters are OP, and as the seasons went on they just so happen to be at the center of a ton huge innovations.  A better series may have change cast for each era/innovation (such as Fargo or True Detective).

Link to comment
Share on other sites

38 minutes ago, sydlexius said:

I enjoyed the first season, however I have little patience for series where the main characters are OP, and as the seasons went on they just so happen to be at the center of a ton huge innovations.  A better series may have change cast for each era/innovation (such as Fargo or True Detective).

To each his own but the series was a vehicle to tell the story of the technical innovations of the past 30-40 years and I thought the characters (and their development) was actually the strongest part of the story.  Way off topic now... sorry.

Link to comment
Share on other sites

BillOatman
2 hours ago, ebr said:

Great series - especially for anyone who lived through that era.

When it comes time for us to implement this (or any) feature, we're not going to "clean room" it or reverse engineer anything.  We'll design and implement a solution we feel works best for Emby users.

Thanks.

Agreed about the series.

Also agreed about the reverse engineering stance,  I suspect most here knew that was the case anyway.  The big question, asked numerous times in this thread, is when it might get implemented.  I realize you probably don't have a good answer for that, which frustrates some. Particularly since it has existed for several years in Emby competitors.

Edited by BillOatman
  • Agree 3
Link to comment
Share on other sites

quickmic
On 2/9/2023 at 10:13 AM, Cheesegeezer said:

Nice Mook, what UI elements did you need to incorporate to get it working.

Here are some information:

As soon as I'm satisfied with the implementation, I'll report all my "custom" API's. However, as mentioned in the thread posted. A basic implementation, doesn't need any (API) modifications  on Emby server. It just uses the session API controls.

Edited by quickmic
  • Thanks 1
Link to comment
Share on other sites

BillOatman
22 hours ago, quickmic said:

Here are some information:

As soon as I'm satisfied with the implementation, I'll report all my "custom" API's. However, as mentioned in the thread posted. A basic implementation, doesn't need any (API) modifications  on Emby server. It just uses the session API controls.

How do the Emby clients "sign up" to be included in the watch party?  Something in Kodi or this plugin?

Sorry for the basic question but I don't run Kodi and the threads I've seen don't spell it out for a 1st grader ;)

  • Haha 1
Link to comment
Share on other sites

Cheesegeezer
10 minutes ago, BillOatman said:

How do the Emby clients "sign up" to be included in the watch party?  Something in Kodi or this plugin?

Sorry for the basic question but I don't run Kodi and the threads I've seen don't spell it out for a 1st grader ;)

Same boat bro, there must be an interface for users to create or join a created party… 

Link to comment
Share on other sites

quickmic
49 minutes ago, Cheesegeezer said:

Same boat bro, there must be an interface for users to create or join a created party… 

Yep, the interface (for client assignment) is implemented in next-gen Kodi plugin.

However,  my understanding was that the Emby watch party plugin from @chef struggled with playback sync. The video he posted shows client assignment was fine.

If he uses my sync code and his client assignment, would be a nice plugin for Emby server.

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

BillOatman
2 hours ago, quickmic said:

Yep, the interface (for client assignment) is implemented in next-gen Kodi plugin.

However,  my understanding was that the Emby watch party plugin from @chef struggled with playback sync. The video he posted shows client assignment was fine.

If he uses my sync code and his client assignment, would be a nice plugin for Emby server.

 

I'm curious to see what you use to keep the clients in sync above what @chef has as well.  Thanks!

Edited by BillOatman
Link to comment
Share on other sites

3 hours ago, quickmic said:

Yep, the interface (for client assignment) is implemented in next-gen Kodi plugin.

However,  my understanding was that the Emby watch party plugin from @chef struggled with playback sync. The video he posted shows client assignment was fine.

If he uses my sync code and his client assignment, would be a nice plugin for Emby server.

 

I'm sorry I missed this post. 

I would absolutely love to collaborate on something if you're game.

"Collaborators", sounds dubious! 😆😉

Link to comment
Share on other sites

BillOatman
9 minutes ago, chef said:

I'm sorry I missed this post. 

I would absolutely love to collaborate on something if you're game.

"Collaborators", sounds dubious! 😆😉

Would you prefer co-conspirators?

  • Like 1
Link to comment
Share on other sites

Cheesegeezer

Am i correct in thinking kodi is python based. @samuelqwe may be able to help here.. he’s good with that code for sure! 

Link to comment
Share on other sites

samuelqwe
44 minutes ago, Cheesegeezer said:

Am i correct in thinking kodi is python based. @samuelqwe may be able to help here.. he’s good with that code for sure! 

I do believe Kodi add-ons are made in Python, though I’ve never really looked at add-on development much. However, I would be happy to help if it’s needed!

  • Like 1
Link to comment
Share on other sites

quickmic
3 hours ago, samuelqwe said:

I do believe Kodi add-ons are made in Python, though I’ve never really looked at add-on development much. However, I would be happy to help if it’s needed!

Well the sync code by itself is no magic. The point is getting accurate progress and event callbacks from (in my case Kodi). That's a bit a hassle in Kodi. Not sure what kind of approach the watch party plugin used. I assume it's trying the same as I do by assigning the devices and use the player (callbacks) as controls. e.g. a seek-command on the master should initiate a seek on the client.

As mentioned as faster/accurate the callbacks are, as good is the sync (for not optimized) clients. The websocket should do a good job.

In my implementation Kodi sends the commands to Emby and Emby forwards to the clients -> 2 hops. If the controller is Emby server itself, there is only one hop (which could help).

As I use http to send the (session) commands (and receive via websocket), there is a delay by http (btw would be nice if Emby server supports sending commands via websocket as well).

Therefore I added a custom "API" to send offsets (Client must support that). e.g. Master send the seek command (including the position) AND a timestamp when the command was send.

When received by the client, it can calculate the delta from the timestamp and add it to the requested seektime position ticks. Ergo playposition is very accurate.

Some other custom "APIs" are used as well, but this more eye candy. e.g. a client can confirm a watch together request or not. If not supported, you could force them to participate.

 

Edited by quickmic
  • Like 2
  • Thanks 1
Link to comment
Share on other sites

BillOatman
9 hours ago, quickmic said:

Therefore I added a custom "API" to send offsets (Client must support that). e.g. Master send the seek command (including the position) AND a timestamp when the command was send.

When received by the client, it can calculate the delta from the timestamp and add it to the requested seektime position ticks. Ergo playposition is very accurate.

@chef Something like this might mitigate some of the network latency issues. But I don't think we can do anything like this as we are strictly server side based.

Edited by BillOatman
  • Like 1
Link to comment
Share on other sites

BillOatman
9 hours ago, quickmic said:

Therefore I added a custom "API" to send offsets (Client must support that). e.g. Master send the seek command (including the position) AND a timestamp when the command was send.

When received by the client, it can calculate the delta from the timestamp and add it to the requested seektime position ticks. Ergo playposition is very accurate.

How did you get the Emby clients to do this?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...