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

Server Side Transcoding #8

Closed
jeffgt14 opened this issue Jun 26, 2023 · 7 comments
Closed

Server Side Transcoding #8

jeffgt14 opened this issue Jun 26, 2023 · 7 comments
Labels
enhancement New feature or request

Comments

@jeffgt14
Copy link

Hi, love what you have going here. I might add quite a few separate issues so I hope you don't mind.

For this one, is there a way to let the server decide what gets transcoded? This app seems similar to Symfonium in that you can either get the raw file with no transcoding or select one of the prebuilt profiles on the client for the trancoding to occur. DSub has always been my go-to because it just pulls in whatever the server sends over.

I have profiles setup that transcodes 24/96 FLAC to 16/44 FLAC, MP3's to MP3's, DSD Wavpack files decompressed to PCM with filters applied then transcoded to 16/44 FLAC, Obscure files such as AC3 Audio from DVD's that get converted to FLAC. All this is handled by what I specify on the server and the client (DSub in this case) just takes the final transcode and streams it for me.

Tempo can handle my 24/96 FLAC files but not necessarily with my preferred dithering mechanism that I specify in my current transcodes. It's unable to handle my WAVPACK DSD files entirely because it doesn't know how to convert this to a PCM format that can be streamed. For obscure formats such as AC3 and MKA, Tempo just shows the files as (null) and can't handle them at all.

@c0utta
Copy link

c0utta commented Jun 27, 2023

Agree 100%

I also prefer the server to designate the transcoding, not the client. As Jeff says above, it enables fine tweaking for particular files, meaning the client just does what it's told.

@CappielloAntonio
Copy link
Owner

I would like to know how to replicate this behavior on the server first, I don't know if Navidrome or Gonic (the servers I use) have this capability, maybe yes or maybe not.
Then I would like to understand how the official stream API behaves when the rules for transcoding are enforced by the server.

Anyway, thanks for the suggestion, I'll keep that in mind!

@CappielloAntonio CappielloAntonio added the enhancement New feature or request label Jun 27, 2023
@jeffgt14
Copy link
Author

I can't speak for Navidrome (although from previous research, I believe it behaves the same), but I'm not sure you can completely replicate with Gonic but maybe enough for testing a single server side transcode vs client specified.

Gonic allows for the server to specify a transcode towards a specific client, however it is restricted to FFmpeg only and only on a 1:1 relationship so all input files must go through the same transcode process with the same output format. The custom profiles can be created within the transcode.go file.

I've created this as a feature request within Gonic, however, only Airsonic/Subsonic allows you to drop/symlink custom transcoders into the /var/airsonic/transcoders folder and have it available for the server to use. It allows you to specify, by client, how to transcode a file based on file format.

@ivan-avalos
Copy link

Supysonic is much better in this regard, because it allows you to use any custom command to decode and encode files from/to different formats. https://supysonic.readthedocs.io/en/latest/transcoding.html

@ivan-avalos
Copy link

Also, this might be a duplicate of my issue: #6

@CappielloAntonio
Copy link
Owner

Hello everyone, here we are. I added an option in the settings to give transcoding priority to the server, overriding any user settings.

It seems to work with Navidrome, but using the Subsonic API I miss the transcoding specification information (at least with Navidrome). The Child object by definition has two properties, "transcodedContentType" and "transcodedSuffix" which I would have expected to have a value do not.

Anyway, it works, so as soon as I release this new version I should be able to mark this issue as closed. You are free to reopen it or open new issues related to the problem.

@CappielloAntonio
Copy link
Owner

New version released, closing the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants