-
-
Notifications
You must be signed in to change notification settings - Fork 334
Custom Device Profile(s) #1168
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
Comments
Since this is all about media compatibility, we can change this to encompass everything when it comes to how media is played, including combining the direct play setting and providing that very compatible profile as a preset. Just as a design prototype, I've come up with the following (but only I didn't make a prototype for the profile creation screen but that shouldn't be too difficult and doesn't need to be fancy. Since there can be multiple profiles used I don't see why not to make that the functionality which also covers the single-profile case and allows people "who know what they're doing" to do what they want to do. We also need to have protections in case the user selects For the |
@LePips This looks awesome! Do you want me to finish out the PR with what I have now and then I can look towards this or should I go straight to trying towards this? |
Let's do this right at the beginning alongside the cleanup. |
I've been working on this and I think my biggest snag is storing this. If we're allowing more than one profile, it makes the most sense to store it all together. Since we're allowing changes to Audio, Video, and Container, I thought making a struct to store it made the most sense. Something like:
Then we can just call the var depending on whether this is a directPlay or transcodingProfile. The type is almost always going to be video but I thought I would include that so down the road we'd have something in place if we ever start looking at audio. Does this make sense to store our profiles as [PlaybackDeviceProfile]? If so, how would I represent that in StoredValues? |
Yes, combining them into single objects makes the most sense. |
I've made some progress on this. This feature is now entirely functional but I have some weird bugs I still need to work out. For some reason, I started on tvOS so that's just what I have done. I expect iOS to be easier once I have the quirks figured out. Here is my current state: Issues:
I'm committing everything I have now. I'm hoping to knock out the issues above before I move to iOS. |
Describe the feature you'd like
Have Swiftfin default to a standard, universally functional Device Profile, but allow users to manually specify/override with their own profile for better compatibility.
Additional context
Currently, Apple does a good job of keeping devices fairly standard but recently I have found there are some issues with codecs like AV1 between devices. Officially, Apple does not support AV1 hardware decoding on currently available Apple TVs. However, using players like Infuse, Software Decoding appears to work great for some models. 4K gen 1 and 2 stutter and playback is very poor but gen 3 playback works great with the software decoder. Additionally, many iPhones/iPads can software decode AV1 without issue, with the M4/A17 SOCs having hardware accelerated playback.
As a result of this, it's probably best for Swiftfin to default to transcoding AV1 content on the Server but allowing users to manually enable it. Roku has gone the route of allowing users to manually enable/disables things like HEVC/AV1 but it might make the most sense to just allow users to make their own profile. This way, so long as the enum for Video/Audio codecs are up to date, users can try whatever settings make the most sense.
Additionally, this lets users with older devices to downgrade their profiles to force transcoding for lower powered devices.
I have a PR where I have been messing around with this. I will like this issue on that Draft PR for feedback!
The text was updated successfully, but these errors were encountered: