fredrikburmester / streamyfin

A Jellyfin client build with Expo
Mozilla Public License 2.0
1.12k stars 31 forks source link

Only audio and QuickTime Splash Screen instead of video #67

Open fidoriel opened 3 months ago

fidoriel commented 3 months ago

Describe the bug Sometimes only audio is played. Video Shows only QuickTime symbol. I will investigate server logs to give a more precise error log.

To Reproduce Steps to reproduce the behavior:

  1. Server with disabled transcoding. MKV file with h265.
  2. Play this movie. Only audio plays, video shows QuickTime symbol. Video played in previous version fine.

Smartphone:

fredrikburmester commented 3 months ago

This is because the client does not support that file format/client. Since the server has transcoding turned off you can't play the file on the client. This is a limitation of apple/android devices and the default supported codecs.

fidoriel commented 3 months ago

That is expected behavior for formats that are not supported out of the box. But imho h265 is supported out of the box on ios. With a previous version of streamyfin the same movie worked fine. Some release last week broke it.

Video

fredrikburmester commented 3 months ago

What's the container? Mkv?

fidoriel commented 3 months ago

Yes, MKV Container. But it should remux it? Audio works.

fredrikburmester commented 3 months ago

I don't know how Jellyfin works but I don't think it can remux if transcoding is turned off on the server. We could maybe build remuxing into the app from mkv to mp4 container (?). If that's possible.

michi7801 commented 3 months ago

I'm having the same issue with h265 playback on the iOS app. Except I'm using a mp4 container. I have not tested playback with previous versions of the app though.

It works fine on the official app and h265 is definitely supported on my iPhone 12...

It is also marked as supported by the Jellyfin App and SwiftFin in the docs.

https://jellyfin.org/docs/general/clients/codec-support/

fredrikburmester commented 3 months ago

That's interesting! Could you send the information about that file? @michi7801

michi7801 commented 3 months ago

Sure thing:

Title: 1080p HEVC SDR Codec: HEVC AVC: No Profile: Main Level: 120 Resolution: 1920x1080 Aspect Ratio: 16:9 Anamorphic: No Interlaced: No Framerate: 25 Bitrate: 1429 kbps Bit Depth: 8 bit Video Range: SDR Video Dynamic Range: SDR Color Space: bt709 Color Transfer: bt709 Primaries: bt709 Pixel Format: yuv420p Reference Frames: 1

fredrikburmester commented 3 months ago

That file seems quite small, would you mind sharing it with me? Send me an email and i'll send you an upload link. fredrik.burmester@gmail.com @michi7801

fredrikburmester commented 3 months ago

I've looked into this, it seems that iOS devices do not support MPEG-H Part 2/HEVC, not even on my iPhone 15 Pro. This is causing the video playback to fail. A solution for this is to switch to the "Old" profile in the settings, forcing the transcoding from HEVC->H264.

Now, why it works in other apps but not Streamyfin is probably because of the Device Profile we're using, even though we're using the same as the official Jellyfin app...

fidoriel commented 3 months ago

hevc/h265 is supported on iOS: https://support.apple.com/en-us/116944 Also safari on iOS seems to support the playback of h265. https://caniuse.com/hevc Correct me if I am wrong, but WebKit is used to render expo?

michi7801 commented 3 months ago

@fredrikburmester First of all: Thank you for looking into this issue so quickly.

Your findings made me retest my previous statements about what's working and what's not:

I love the look and feel of StreamyFin but my poor Synology can't handle that for multiple users.

fredrikburmester commented 3 months ago

Yeah Swiftfin uses VLC player which supports many more formats/codecs than the default iOS video player.

michi7801 commented 1 month ago

Anything I can do to help resolve this issue? It hurts that I can't use this gorgeous app.

With TV support upcoming and the current pace of development this could really get the default app for Jellyfin

fredrikburmester commented 1 month ago

A great way to start is to look into why some video files don't get transcoded into a supported container. It's probably because of the device profile doesn't tell the server correctly what codecs/containers are supported. But it might be some other issues.

michi7801 commented 1 month ago

Yes, I actually caught a difference in behavior. Thanks for the hint! You initially said that you use the same expo profile as the official Jellyfin client (and I also verified that), but the Jellyfin client actually only does direct stream (it changes the container format) while Streamyfin attempts to direct play.

This would lead me to the assumption that Streamyfin incorrectly informs that server about the clients capabilities. Does that help you in any way?

fredrikburmester commented 1 month ago

You say that Streamyfin Direct plays while JF Direct streams, what do you base that on?

michi7801 commented 1 month ago

The Admin interface tells you all active streams and their properties. For Jellyfin-Expo it remuxes the container while for Streamyfin it direct plays.

fredrikburmester commented 1 month ago

I was afraid you were gonna say that. Unfortunately Streamyfin does not accurately report playback information to the server. Best way to determine what is going on is by looking at the server logs.

michi7801 commented 1 month ago

I redid my testing with the logs:

If I start playback with JF I can observe the following log line

[2024-10-14 11:17:01.189 +02:00] [INF] [83] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -fflags +genpts  -i file:\"/data/media/movies/moviename/moviename.mp4\" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 copy -tag:v:0 hvc1 -bsf:v hevc_mp4toannexb -start_at_zero -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type fmp4 -hls_fmp4_init_filename \"70c1b19b2b474ff73db3036468bec9cd-1.mp4\" -start_number 0 -hls_segment_filename \"/config/data/transcodes/70c1b19b2b474ff73db3036468bec9cd%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/config/data/transcodes/70c1b19b2b474ff73db3036468bec9cd.m3u8\""

The same does not happen if I start playback through Streamyfin. Also no separate log file FFmpeg.Remux-2024-10-14_11-17-01_ead5e17198726ee10d7c6f1f56d3b7fd_d92a17bc is created

michi7801 commented 1 month ago

I further investigated and found pretty unreliable behavior actually. It turns out that some of my media is remuxed and does playback on streamyfin while other doesn't. This is weird because all my media is converted to a single format through an app called unmanic (essentially an ffmpeg wrapper). So everything I own is h265, SDR, AAC, mp4...

The app actually knows about this before requesting the stream because it already tells you ahead of time "Direct Stream" or "Transcoded Stream". All videos marked with "Transcoded Stream" do playback correctly (although the loading icon does not vanish)

Any idea what is causing that?

fredrikburmester commented 1 month ago

The only thing you didn't mention was subtitles. That could definitely cause a transcode and or remux which could cause problems. All of this probably stems from an incorrect device profile, which we are working on.

fredrikburmester commented 1 month ago

Also we're very close to releasing a new integrated VLC player for iOS which will fix all of these problems.

michi7801 commented 1 month ago

Correct, I do not modify the original subtitles. Got it, thank you for helping me investigate this problem. Looking forward to future releases!

fredrikburmester commented 1 month ago

Could you figure out what subtitles are causing issues? @michi7801

michi7801 commented 1 month ago

Yes, videos with no subtitles at all seem to be the one who direct stream

fredrikburmester commented 1 month ago

Ok thanks, what are the codec/format of the subs that don't work?

michi7801 commented 1 month ago

I worked through my whole library (about 130 Files) and literally the only ones not working are those without any subtitles at all

Edit for clarification: With "Direct Stream" i mean the hint below the play button in Streamyfin. Videos with the hint "Direct Stream" are those without subs and don't work