calzoneman / sync

Node.JS Server and JavaScript/HTML Client for synchronizing online media
Other
1.47k stars 232 forks source link

Feature Request: Raw Video Metadata. #655

Closed ZizzyDizzyMC closed 7 years ago

ZizzyDizzyMC commented 7 years ago

CyTube currently supports adding raw video files from HTTPS sources.

I am requesting a feature that would allow users to submit multiple video files of different resolution creating a pop-up that allows the user to choose what resolution source to view at the time of loading, and changing the source mid-video if the user wanted to.

Pros: Higher resolution sources for those with the bandwidth to support it. Lower resolution sources for those who are bandwidth challenged. Also saves server bandwidth.

How I'm imagining it, most likely a button that says "Add source" and creates a second box that allows the user to add another source link. Much like polls have "Add Option". You could optionally allow the user to specify resolution per source but that would require that the "Quality Selector" be updated and allow dynamic loading of available qualities when a meta-data'd source plays.

*quality selector is not currently part of general cytube codebase.

calzoneman commented 7 years ago

This has been casually discussed on IRC before, but I think it's a reasonable feature to support. Rather than changing the UI this way, the way I would likely implement it is allow self-hosters to host a JSON manifest in a specific format that CyTube can retrieve and extract the data it needs for clients to play the video (title, duration, resolution and content-type of different source files, etc.). As a bonus, server operators could include VTT subtitles in the manifest, which would finally resolve #430.

The mid-playback quality selector is somewhat of an orthogonal feature; CyTube already supports multiple qualities for video types like Google Drive and vid.me, but chooses the quality statically when the video begins, based on the user's quality preference. video.js supports changing the quality programmatically, but the last I checked, it doesn't support a UI option for this, so perhaps there is some plugin providing an interface for this.

ZizzyDizzyMC commented 7 years ago

If you did that I could write a simple php (server side) or js (client side) json creator for others to quickly make the .json files required. I'm assuming then afterwards adding a properly formatted json file into the add video link would create the video entry into the queue for playback.

This seems reasonable. Can confirm after visiting a few rooms, the selector is an add-on plugin.

In the future if this is implemented could there be a source button created allowing users to select multiple sources and locations. IE '1080p - Germany, 1080p - USA, 1080p - Canada' If the different sources were added into the json. I could see this being incredibly useful in the future.

EDIT: This would also have the chance to fix #535 if someone was persistent enough to create a json file for a raw audio source.

calzoneman commented 7 years ago

Can you think of any use cases for multiple sources for the same quality level besides geolocation? CyTube already supports having multiple sources with different content-types for fallback purposes, but they aren't treated any differently from a user preference perspective.

As far as geolocation goes, I think that problem is probably better solved by using geographic DNS, anycast IPs, or having a webserver that can redirect appropriately, rather than pushing the selection logic up to CyTube/the user.

calzoneman commented 7 years ago

This seems reasonable. Can confirm after visiting a few rooms, the selector is an add-on plugin.

To clarify: I mean on the video.js player itself. Some channels have added a separate quality selector to CyTube, which works because the programmatic quality selection is there, but I'd prefer to have a native control to reduce confusion.

calzoneman commented 7 years ago

I've just written a draft of the specification. Feedback is welcomed.

calzoneman commented 7 years ago

I haven't forgotten about this, I'm planning to work on it this weekend.

calzoneman commented 7 years ago

This is now available for testing on https://beta.synchtube.me.

The spec has been moved from the gist to here.

calzoneman commented 7 years ago

Oh, I guess I should mention, instead of pasting the JSON in yourself, you need to host a .json file and input that as the source URL.

calzoneman commented 7 years ago

This is live now on the main website. Will keep this issue open for a few days in case there are problems, otherwise I'll close it out.