Jump to content

Watch Party


chef

Recommended Posts

Raelone
On 7/29/2022 at 12:44 PM, chef said:

 

Okay, a single server solution should be easy enough.

Once the controlling session initiates playback, and the devices are sync'd, we'll connect all playback events from  each device to the group.

If someone pauses their device, do we  pause them all?

If someone stops playback (that isn't the controlling session), we'll just remove them from the group.

Shouldn't be too complicated really...

@Cheesegeezer @rbjtech, @BillOatman you think we should write this thing?

Probabaly wouldn't take more then a couple days of writing and testing.

Let me know 😁

 

Pause rewind and FF should all just keep in sync (happen to everyone in the party) and anyone in the watch together group should be able to do these functions.  I wouldn't worry too much about someone intentionally messing up the party by rewinding or FF, these should usually be people you know.

  • Agree 1
Link to comment
Share on other sites

Raelone
8 hours ago, speechles said:

The ability to control the experience on the Roku will only work on the local LAN. Meaning those users at the same location already. Which sort of makes this hard to do on the Roku for that reason. The Roku External Control Protocol (ECP) will only work locally on the LAN.

The Roku app used to be able to use a web socket with an external listener. But that did not include the ability to "launch" into the application. The application had to already be running. Roku has changed certification requirements. Roku is forcing developers to implement deep-linking and ECP into their applications if they are public applications that serve video streams.

https://developer.roku.com/docs/developer-program/discovery/implementing-deep-linking.md

Because of this change think of the Roku more on terms with second screen type applications. Where the second screen can contain the Emby remote control interface, such as the web app, or other such things.

https://developer.roku.com/docs/developer-program/debugging/external-control-api.md

With Roku the context requested to play must come from within the network. Roku has blocked any attempt to access their API from an external location.

Threads such as the above used to be able to work on almost every Roku around the world that wasn't firewalled. Every single model until Roku introduced Roku OS 8. Ever since it has been LAN only. Just giving this as a reason not to give up on this entirely. But to not count on Roku being able to participate. It isn't us. It is them. Apologies.

 

I am sure you get tied of hearing things like this, but Plex's Watch together feature has no such limitation in Roku.  Watch together works just fine with people on different LAN (I have watched together from GA with someone in the UK before and out in CA all the time).

  • Like 1
Link to comment
Share on other sites

14 minutes ago, Raelone said:

Pause rewind and FF should all just keep in sync (happen to everyone in the party) and anyone in the watch together group should be able to do these functions.  I wouldn't worry too much about someone intentionally messing up the party by rewinding or FF, these should usually be people you know.

Okay, note taken.

Pause will be easy enough.

Syncing FF and rewind 😬

We'll be sure to write it into the controller for sure, just not sure what the results will be like, especially when one client is transcoding while the others direct playing.

Should be interesting to see what happens.

 

Link to comment
Share on other sites

Raelone
2 minutes ago, chef said:

Okay, note taken.

Pause will be easy enough.

Syncing FF and rewind 😬

We'll be sure to write it into the controller for sure, just not sure what the results will be like, especially when one client is transcoding while the others direct playing.

Should be interesting to see what happens.

 

FF is used when for some reason there is some sort of outage and you have to start the party over for some reason then someone has to FF to get to the spot where it was (if you aren't able to just resume at that spot).  I've also been watching with someone and they get a phone call and forget to pause so she would want to back up to where the phone call happened.

Link to comment
Share on other sites

rbjtech
8 hours ago, Raelone said:

I am sure you get tied of hearing things like this, but Plex's Watch together feature has no such limitation in Roku.  Watch together works just fine with people on different LAN (I have watched together from GA with someone in the UK before and out in CA all the time).

All we can do is try - We never had any reports of the Roku not working with Introskip Auto-skip - and this uses the same 'session control' method - so maybe this will work just fine.  It may just be the 'pause/unpause' only as originally said - in which case that sounds more like an Emby Roku Client issue than a Roku issue.   We shall have to see. 

Link to comment
Share on other sites

So, I guess it will be the sys admin who sets up the library?

Creates the item to put into the watch party?

At least at first to test this thing out.

 

I'm sure @rbjtech and @samuelqwe have some kind of cool ideas to create playlists and allow users to eventually create the parties themselves through the client UI? 😉 Maybe??

 

But for testing the playback sync, should we just write a plugin config to start?

 

Link to comment
Share on other sites

rbjtech
21 minutes ago, chef said:

So, I guess it will be the sys admin who sets up the library?

Creates the item to put into the watch party?

At least at first to test this thing out.

 

I'm sure @rbjtech and @samuelqwe have some kind of cool ideas to create playlists and allow users to eventually create the parties themselves through the client UI? 😉 Maybe??

 

But for testing the playback sync, should we just write a plugin config to start?

 

Yea to start - lets just use Admin.

But to answer the question - yes anybody can potentially add to the 'Watch Together' library - borrowing from the 'Spotlight' idea - users can add to the 'Watch Together' playlist - and it then creates the strm file automatically from this.   But that's ways down the line .. ;)

  • Like 1
Link to comment
Share on other sites

12 hours ago, Raelone said:

I am sure you get tied of hearing things like this, but Plex's Watch together feature has no such limitation in Roku.  Watch together works just fine with people on different LAN (I have watched together from GA with someone in the UK before and out in CA all the time).

That's because they know about (and can control) your entire user session through their central server and they have developed their app to be aware of this feature.  With them, the users aren't yours - they are theirs. 

These guys are trying to do this as a 3rd party plug-in with the app completely un-aware of it so that will have some limitations.

Link to comment
Share on other sites

Posted (edited)
55 minutes ago, ebr said:

Guys - I'd suggest maybe you start your own thread in the plug-ins forum to continue this discussion.

Thanks.

Will do.

@rbjtech wanna do the honors?

Or wait until we test out the playback sync privately?

It's up to you guys.

I don't know the entire community needs to know how many times we fail at writting the thing before it works. 😆

Edited by chef
Link to comment
Share on other sites

16 hours ago, Raelone said:

I am sure you get tied of hearing things like this, but Plex's Watch together feature has no such limitation in Roku.  Watch together works just fine with people on different LAN (I have watched together from GA with someone in the UK before and out in CA all the time).

Like mentioned already, because your server users are not yours. All users belong to "them". Then users decide how they proceed through "them" and if you are even allowed to cater to to those users. Users choose to attach to your server through "them". There is a central agency tracking you.

Whereas on Emby all users must be created on a server. There is no central location tracking everyone coming and going through your server. Your Emby server users are catered to by you and no one else. There is no central agency tracking you.

Also, Roku made it clear that there was to be no intercepts used except their ECP mechanism and it seems they have gone around that. "They" aren't following rules and eventually that will cost "them".

They also might be allowed to break the rules because they just get to. Who knows. It is a world of you rub my back and I rub yours a bit. Share the data they get from tracking users on Rokus with Roku possibly. Well not possibly.. haw. That is what "they" do. That might be how they get around certain rules. I am just conjecture. Speculation. But the reality is there are forces at play which allow certain freedoms to exist only for certain programs, people, and geographic locations. We must find a happy place and learn to deal with it depending on the program, person, or geographic location. Find your happy place. ^_^

Edited by speechles
  • Like 2
  • Agree 2
Link to comment
Share on other sites

Mookdog

Makes me happy that you guys are brainstorming this idea. Cant believe emby doesnt have it already but that piece of crap known as Jellyfin does. Hopefully we see a beta of it soon. That is one feature I would love to test.

 

Mook

  • Agree 1
Link to comment
Share on other sites

ertagon2
4 hours ago, Mookdog said:

Makes me happy that you guys are brainstorming this idea. Cant believe emby doesnt have it already but that piece of crap known as Jellyfin does. Hopefully we see a beta of it soon. That is one feature I would love to test.

 

Mook

Well it JF is a piece of crap I am scared to think what that makes Emby.

Maybe I am just a sucker for Open-Source software.

Link to comment
Share on other sites

BillOatman
1 minute ago, ertagon2 said:

Well it JF is a piece of crap I am scared to think what that makes Emby.

Maybe I am just a sucker for Open-Source software.

I favor open source as well.  Doesn't mean either is crap, just different.

  • Like 2
  • Agree 1
Link to comment
Share on other sites

dannymichel
1 hour ago, BillOatman said:

I favor open source as well.  Doesn't mean either is crap, just different.

Jellyfin is just very buggy. The only ‘client’ that works for Jellyfin is the web browser. Literally every Jellyfin client is broken. Infuse works but it’s not by them. To be honest as it stands Emby is only better than Jellyfin because it has a mobile and firestick clients that work and aren’t buggy. Emby severely lacks in features paid or otherwise but at least it’s solid in that it works 

Link to comment
Share on other sites

Mookdog
1 hour ago, dannymichel said:

Jellyfin is just very buggy. The only ‘client’ that works for Jellyfin is the web browser. Literally every Jellyfin client is broken. Infuse works but it’s not by them. To be honest as it stands Emby is only better than Jellyfin because it has a mobile and firestick clients that work and aren’t buggy. Emby severely lacks in features paid or otherwise but at least it’s solid in that it works 

Yeah I think I was too harsh saying piece of crap. Emby is far superior though. With all the plugins and the work the developers put in I will continue to use Emby (Heck I bought the lifetime like 2 years ago). 

 

Mook

Link to comment
Share on other sites

dannymichel
35 minutes ago, Mookdog said:

Yeah I think I was too harsh saying piece of crap. Emby is far superior though. With all the plugins and the work the developers put in I will continue to use Emby (Heck I bought the lifetime like 2 years ago). 

 

Mook

I want to use Emby badly but without random library sorting and the bad subtitles that you can’t change I just can’t 

Link to comment
Share on other sites

evil_crab
On 7/30/2022 at 4:35 PM, chef said:

Sounds like the plugin needs to do some setup when it is installed.

1. Create the Watch Party library on the server if it doesn't exist.

2. A method that creates .strm files

3. Message sender to active sessions

 "{user.Name} has joined the party."

4. Figure out how to update the library when strm files are added.

 

Maybe start there. That's quite a bit.

Will it be possible to use Collections instead of the library for that? Collections are much easier to manage.

  • Like 1
Link to comment
Share on other sites

Cheesegeezer

Wow!! 2 days of being away at shows and look how far you have come!! Nice work fellas as always!! 
 

i will get on with making a watch together intro 

did the other thread get started.

  • Like 1
Link to comment
Share on other sites

Posted (edited)
28 minutes ago, Cheesegeezer said:

Wow!! 2 days of being away at shows and look how far you have come!! Nice work fellas as always!! 
 

i will get on with making a watch together intro 

did the other thread get started.

Ah, there he is.

No the other thread hasn't started yet.

I can make a GitHub repo with stuff I started so you can see it.

Was about to write the StrmFileWriter this morning.

And also, some kind of DirectoryManager.

 

 

 

Edited by chef
Link to comment
Share on other sites

Cheesegeezer
1 minute ago, chef said:

Ah, there he is.

No the other thread hasn't started yet.

I can make a GitHub repo with stuff I started so you can see it.

Was about to write the StrmFileWriter this morning.

And also, some kind of DirectoryManager.

 

 

 

Morning chief, sounds good, I’m out again today. Princess Anne is coming to the Show today so i will be out all day and a bit squiffy (drunk) by the end lol 😂 

ill be back on the laptop tomorrow for sure. 
 

did you get the collaborator invite for the End Credit repo? If not I’ll add you to that again. 
 

so glad you’re back and got your mojo going again 😉👍

 

  • Thanks 1
Link to comment
Share on other sites

2 hours ago, evil_crab said:

Will it be possible to use Collections instead of the library for that? Collections are much easier to manage.

That is a good question.

We'll have to see how the ILibraryManager creates these different types of virtual folders.

We should test out creating all the types, and see what happens.

To be honest I have never created libraries through the API before... I can see how it is done, but until we try them all, I can't say I know for sure what the outcome is.

I'm not sure the differences between a collection virtual folder setup, and a movie virtual folder.

But, we'll try it. Probabaly something we should get to know while using the LibraryManager. 👍

Link to comment
Share on other sites

Cheesegeezer
15 minutes ago, chef said:

That is a good question.

We'll have to see how the ILibraryManager creates these different types of virtual folders.

We should test out creating all the types, and see what happens.

To be honest I have never created libraries through the API before... I can see how it is done, but until we try them all, I can't say I know for sure what the outcome is.

I'm not sure the differences between a collection virtual folder setup, and a movie virtual folder.

But, we'll try it. Probabaly something we should get to know while using the LibraryManager. 👍

Rich does this a lot for test libraries so we will be fine for testing POC. 

  • Like 1
Link to comment
Share on other sites

I can create Library virtual folders, and  strm files that handle library items now!

Cool!

All it took was this:

using System.IO;
using System.Linq;
using MediaBrowser.Controller.Library;

namespace Emby.WatchParty
{
    public class StrmFileWriter
    {
        private ILibraryManager LibraryManager { get; set; }
        private ILibraryMonitor LibraryMonitor { get; set; }
        public StrmFileWriter(ILibraryManager libraryManager, ILibraryMonitor libraryMonitor)
        {
            LibraryManager = libraryManager;
            LibraryMonitor = libraryMonitor;
        }
        public string GetStrmFilePath(string name) //name: "Watch Party"
        {
            var virtualFolders = LibraryManager.GetVirtualFolders(false).FirstOrDefault(f => f.Name == name);
            //Best check it exists
            var virtualFolderPath = virtualFolders?.Locations?.FirstOrDefault();
            if (virtualFolderPath == null) return null; //This should not happen. But, since it could... check for null
            return Path.Combine(virtualFolderPath, string.Concat(name, ".strm"));
        }

        public void UpdateStrmFile(long internalId, string strmFilePath)
        {
            var item = LibraryManager.GetItemById(internalId);
            LibraryMonitor.ReportFileSystemChangeBeginning(strmFilePath); //Tell Emby we are changing this location
            using (var sw = new StreamWriter(strmFilePath, append: false)) //DO not append. Overwrite with the new value. 
            {
                sw.Write(item.Path);
                sw.Flush();
            }

            //Tell Emby, we have finished changing this location, and it should be refresh.
            //This should update the virtual folder
            LibraryMonitor.ReportFileSystemChangeComplete(strmFilePath, refreshPath: true); 
        }
    }
}

 

We've gotta start that new thread.

Link to comment
Share on other sites

1 hour ago, chef said:

We've gotta start that new thread.

Yes, please, but I would suggest using our Channel interface for this instead of trying to directly manipulate libraries.  Channels show up just like a library.

  • Agree 1
Link to comment
Share on other sites

rbjtech

Hi All,

We'll get all of the Dev talk from the FR thread moved here - and this thread can be used for general updates, proof of concepts etc.

I suggest we do all the early testing via teams as that is a much more fluid and productive environment for quick testing etc.

Thanks.

  • Agree 1
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...