Issue description:
Using Navidrome 0.52 and there’s a good chance this may be an issue on my end but figured I’d check since it works properly in DSub.
I am trying to stream AC3 audio that’s contained in a .mp4 container. Symfonium errors out and can’t play the file. Looks like it’s not getting picked up correctly by ffprobe.
Ffprobe shows the audio codec correctly locally and DSub and Navidrome Web UI have no issue with the same transcode command.
ffmpeg -i “${file}” -map 0:a:0 -c:a copy -f mp4 -
I have also tried this and it errors out the same way:
ffmpeg -i “${file}” -map 0:a:0 -c:a copy -f ac3 -
Logs:
Upload description: jeffgt14_ac3_log
Additional information:
Reproduction steps:
Media provider:
Subsonic
Screenshots:
Seems you are forcing transcoding on server side that’s usually not good way.
And seeing the errors I’m pretty sure the files are not transcoded the same way if they work in other apps.
Now the question since you do not apply bitrate limit why do you force a transcoding to a format that is not suitable for streaming and lossy?
-c:a copy shouldn’t be doing any transcoding for these files. It’s a very niche part of my library so I just include the command in my transcoding script for how to handle the file when it sees a .mp4 file.
If I put these ac3 files in a .mka container, I can run the below command and Symfonium plays it just fine. Problem is, since taglib doesn’t support matroska, Navidrome doesn’t read the tags so the files show up as Unknown Artist/Unknown Album.
ffmpeg -i “${file}” -map 0:a:0 -c:a copy -f matroska -
I can tag them as MP4 files but can’t manage to stream them in Symfonium. Even if I try to demux the files server side from mp4 to mka, which should just be a stream copy similar to the matroska command above, Symfonium still won’t play them even though I know it can stream matroska just fine.
You mix things and are not clear.
If those are commands inside Navidrome transcoding profiles then you are transcoding even if 1:1 it’s still creating temporary files and write to them.
To support streaming of such files it requires the proper mov header at the start of the file but even when using the proper commands in ffmpeg those will be added only after the transcoding is finished.
MP4 with aac is not a proper protocol to stream media.
you can try “-f ismv -frag_duration 60” to slightly improve streaming support of those files.
I think isma would transcode the audio from AC3 to AAC which I would like to avoid.
I do think I figured out a solution. If I run ffmpeg with -movflags faststart on the source files, it seems to move the header to the beginning of the file which allows me to play in Symfonium. No seeking or play progress bar but not a big deal as this represents an incredibly tiny fraction of a percent of my library.
Actually no ismv is the container and would work since it actually does move the header and some other optimization specially for streaming files over internet.
But yes that flag is the very bare minimum to allow streaming mp4 during transcoding.