-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add RFC: Service Overhaul #39
Conversation
Services kinda suck in OBS. They can't setup outputs directly. They can't offer extra features such as the RPC of rtmp. In fact, rtmp doesn't even have a formal password/key system! Each service should be able to do its own rtmp setup as desired. I hope that this redesign helps combat this problem. Another aspect that is missing is services being able to pick which server to use given certain conditions. |
The plugin
Edit: Also there is also the ability to create and use third-party service plugin. Which can help for really specific case. |
"Sorta set up" isn't good enough for me. I'd like the service to be an output factory, taking control from centralized code for maximum control over the output. |
41ee862
to
1dd1073
Compare
|
Correct, RPC in RTMP would be a feature of the output plugin. But the service should be able of encapsulating it in the form of a nice usable api. Which includes providing the login. |
They are already usename and password in the service API, I think they are just not used except for Dacast and Custom services. |
RPC is not implemented in the rtmp client that obs uses. At least not in a good reusable way. I'm honestly more concerned about websocket based apis and such. It'd be very nice if obs could do stuff like subscriber alerts without the aid of 3rd party websites. |
Not implemented imperatively in OBS, but in a plugin meant to supply a complete integration of the stream service. |
41afe69
to
bf2bf5c
Compare
159a417
to
b285201
Compare
b285201
to
ca45d48
Compare
ca45d48
to
e2189d6
Compare
Update: This RFC draft is split into two RFCs. I put them in the same PR because they are dependent of each other. PS: It's also easier to work on both of them at the same time. |
aa1a14d
to
bf8f4d1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some spelling/typo corrections to easen the reading.
I'll come back later to a more general in depth review.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think figuring out how to split this up into smaller pieces that we can incrementally build on instead of a giant overhaul would be a good thing to look into.
Especially if we can make the underlying parts divorced from the UI changes.
As a generality OBS could benefit from getting away tight UI coupling as we build features into OBS rather than building based on the UI we have today.
Adding to `obs_service_info`: | ||
- `uint32_t flags` with the following flags: | ||
- `OBS_SERVICE_DEPRECATED`: The service is marked as deprecated. | ||
- `OBS_SERVICE_INTERNAL`: The service is meant to be used internally in some plugin (e.g., WebSocket, Scripting) and usually not directly exposed in the UI. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you expand on this with a more concrete example? I'm not clear on how web socket and scripting plugins quite match up to a service?
Service types that support only the protocol inside their id (`"custom_`*insert lowercase protocol acronym*`"`) for any first-party protocol except FTL (deprecation). | ||
|
||
Services that will only support the first-party protocol related to their id/type. | ||
The flag `OBS_SERVICE_INTERNAL` will be applied to not show them in the UI list. Those are meant for being used in WebSocket and scripting. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does the migration path look like for scripts / apps using the old method?
Can we just provide a built in way to identify the old behavior and translate to the new one instead of keeping these around?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rtmp_common
and rtmp_custom
are not removed but deprecated.
At some point we have to remove them.
We can't since service integration is too tied to the UI and the UI is too tied to Edit: Once you touch a piece, you need to replace a whole block. |
It's probably worth doing an investigation to see if there are parts of the UI we can decouple as a prerequisite before the service overhaul. Smaller changes help lower the risk and allow easier review. |
Beside the YouTube Actions UI form, most of the service UI is refactored from Qt to PropertiesViews. So there is not much to decouple. |
I made a cleanup around old review conversations, some of them were closed with a comment some not because the RFC has really changed since then. |
Based on feedback on this thread, and in off-thread discussions, the project maintainers agree that this RFC needs to be scaled back and broken up in to smaller parts to approach in a more incremental way. The project largely agrees with the end goal of what this RFC is proposing: a more customizable, flexible, and pluggable state for services and outputs in OBS. However, the size and scope of the current approach makes these changes difficult, if not near impossible, to do a complete review and provide specific feedback. It is so large in scope that it is unapproachable to others seeking to review it, and is not likely to be accepted in the current state. It was not an easy decision, but if we want to start making progress towards this goal, a new approach is necessary. To that end, a better approach would be to split out the changes in to separate RFCs/PRs. We suggest a split along the following topics:
We again thank everyone for their work on this RFC, and we hope that with these changes we can reach some of its goals sooner rather than later. |
I'm sorry to have stupidly pushed a PR about this suddenly without talking about it with you.
So now I tried to write this RFC, it's not perfect, but we are here to discuss about it.
This RFC is now split into two RFCs. They are both quite dependent of each other.
RFC 39: Service Overhaul
Summary
Motivation and Context
With those changes, developer will be able to create third-party service plugins.
And also service integrations will be separated as plugins.
Link to RFC
Link to an implementation of the RFC