steveseguin / vdo.ninja

VDO.Ninja is a powerful tool that lets you bring remote video feeds into OBS or other studio software via WebRTC.
https://vdo.ninja
Other
2.83k stars 810 forks source link

Allow for a guest to be pushed up or down in the order. scene building, etc. #434

Open steveseguin opened 4 years ago

jrotenstein commented 3 years ago

Example: Always wanting the hosts shown together, and the guests grouped together.

steveseguin commented 3 years ago

@jrotenstein Would you want to make GROUPs then? or is just ordering enough? ordering is something I could add quickly, while groups would need to be next month or two.

jrotenstein commented 3 years ago

Changing the order would be sufficient to do this. I hadn't even thought of "grouping".

wwboynton commented 3 years ago

Yeah, the ability to have a query parameter like ?participantIndex=1 or something would be great, because it would mean I could create sources using those URLs to display the individual participant feeds, and then use the control room on the obs.ninja side to reorder participants and switch them around without having to change anything inside OBS itself.

Similarly, it would be great for keeping kind of a dynamic scene where participants come and go -- if you had four participants being displayed this way using those individual feeds as four sources in an OBS scene, and participant three leaves, participant four would become participant three, so there would not be a visible gap in the OBS scene.

steveseguin commented 3 years ago

https://obs.ninja/beta

Added some features here

&order=N, where N is the order priority you want to give a video.

I also added a way for the director to dynamically adjust the value remotely.

image

Hopefully this is a decent start on this feature.

Wiethoofd commented 1 year ago

This seems to now be partially possible with &slotmode in the director view and (optionally?) &slots on the ?scene(=n)&room=name but requires extra steps, such as setting up a &api=roomendpoint (without password!?) on the director and then issuing a request to api.vdo.ninja/roomendpoint/layout/[{<mycustomlayoutJSON>}]. to retrigger the set slots in the director view when new feeds get added/moved between slots.


What I would like to do is define a layout with the slots in the positions I want with a 0-indexed slot numbering in a &layout defined parameter on a &scene(=n)&room, e.g.:

https://vdo.ninja/
?scene=1&room=My2x2Grid&password=changeme
&style=4&animate=0&transparent&cover
&slots=4&layout=[{"x":0,"y":0,"w":50,"h":50,"cover":true,"slot":0},
{"x":50,"y":0,"w":50,"h":50,"cover":true,"slot":1},
{"x":0,"y":50,"w":50,"h":50,"cover":true,"slot":3},
{"x":50,"y":50,"w":50,"h":50,"cover":true,"slot":4}]

In the director view: https://vdo.ninja/?director=My2x2Grid&password=changeme&slotmode (optionally: &api=GridTest) I would then simply assign any available feed to a slot, and in the default &scene it should automatically show up and move to the desired slot in the position of the defined scene &layout, and only become visible in the above provided example &scene=1 when 'add to scene 1' in the director view is set.

At the moment this works for 90%, because currently I now need to issue that api request with again the full &layout json, from the example scene, to the director/scene view to force the feeds to load in and move to the correct positions, instead of automatically updating when I change slot and/or receive an extra feed. (Mixer also requires re-setting the desired layout when new feeds become available you want to assign to slots or after changing slots, similar to the api layout set request)

This would reduce the need for /mixer (which currently does not really work if you use more than 2 rooms during production, or forces you to make groups (which isn't tamper proof as stated in the docs.


Not defining a &layout on a scene but using &slots=n instead should behave similarly in the above example when using &slotmode, where a layout is a more complex way of positioning and sizing any slots created/required.