Skip to content
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

Implement Open Screen Protocol's Remote Playback Protocol #7346

Open
3 tasks done
TheAssassin opened this issue Nov 2, 2021 · 1 comment
Open
3 tasks done

Implement Open Screen Protocol's Remote Playback Protocol #7346

TheAssassin opened this issue Nov 2, 2021 · 1 comment
Labels
feature request Issue is related to a feature in the app

Comments

@TheAssassin
Copy link
Member

TheAssassin commented Nov 2, 2021

Checklist

What feature do you want?

As seen in #668, there is a demand for some sort of "casting" (a really misleading name, by the way) played videos to another device, e.g., a TV screen. In said issue, Chromecast was suggested. However, this is not a great idea to begin with (there are privacy and other concerns), and Chromecast cannot easily be used in open-source projects (especially when Google doesn't like you anyway) because it is tightly coupled to Google's servers.

While taking another look at the reverse engineering of Google Chromecast, I found a reference pointing to a new open protocol developed within the W3C called Open Screen Protocol. In comparison to ancient existing protocols like UPnP/DLNA, there is a Remote Playback Protocol which basically covers our use case: instructing another device to play back a stream from an external source (i.e., the sending device does not have to stream the source itself to the receiver) while being able to control the player's behavior (play, pause, etc.).

The advantages are obvious. Not only is it an open protocol that does not depend on proprietary services (at least as far as I have read the document so far), it also limits our scope to implementing the sender bit. Receivers can be all kinds of devices, and there are likely going to be open-source implementations (e.g., based on Kodi). Instead of reinventing the wheel ourselves (I started to implement my own socket protocol in my Kodi Invidious plugin, which would have supported Invidious only), any kind of player can play back any kind of stream on any kind of device.

The protocol's editor is from Google, and apparently this protocol shall ultimately replace the proprietary, limited Chromecast system anyway.

In my opinion, we should finally close #668 and bury the idea to implement Chromecast. Instead, development efforts should focus on the Open Screen Protocol once it is stable enough. The current specification is already relatively sophisticated. In fact, it looks like it even combines two existing specifications, which means there might be some implementations for remote playback already.

Why do you want this feature?

This has been discussed thoroughly in #668.

@TheAssassin TheAssassin added the feature request Issue is related to a feature in the app label Nov 2, 2021
@TheAssassin
Copy link
Member Author

TheAssassin commented Nov 2, 2021

There appears to be a reference implementation (that also contains parts of Chromecast, which we can and should ignore): https://chromium.googlesource.com/openscreen/

The explainer considers the alternatives, but ends up with the same criticism we have discussed in #668 already: those existing, proprietary protocols are not supposed to be used by third parties.

Edit: this is a comprehensive guide to Chromecast and its components, in case you want to read the backgrounds: https://github.com/geraldnilles/Chromecast-Server/blob/master/docs/GoogleCastProtocol.markdown (thanks @geraldnilles, CCing you in case you have not seen OSP yet).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Issue is related to a feature in the app
Projects
None yet
Development

No branches or pull requests

1 participant