fredrikburmester / streamyfin

A Jellyfin client build with Expo
Mozilla Public License 2.0
1.05k stars 28 forks source link

"Error: Cannot play this video file" when selecting ASS subtitles #70

Open yihaolee85 opened 2 months ago

yihaolee85 commented 2 months ago

Describe the bug When trying to play video file with subtitles of the type ASS, the player gives an error dialog saying "Cannot play this file". Using the official Jellyfin app and the Swiftfin app, the video plays with the subtitles without any issue.

To Reproduce Steps to reproduce the behavior:

  1. Select a movie
  2. Select a subtitle of type ASS
  3. Press play

Screenshot attached IMG_1104

Smartphone (please complete the following information):

FintasticMan commented 2 months ago

As ASS subtitles are quite difficult to support natively, it would probably be best to use the device profile to indicate that they need to be burned.

yihaolee85 commented 2 months ago

Could you share the steps to do that?

Under settings I can see "Old" "Native" and "Expo" but I'm not exactly sure what they do.

I tried all 3 options but still get the error

fredrikburmester commented 2 months ago

They are mostly for testing, but the indicate to the server what codecs are supported by the client. So those are the profiles that will be tweaked going forward. Do you have transcoding turned off or on on the server? @yihaolee85

yihaolee85 commented 2 months ago

Transcoding is turned on, I can test later to check if the Jellyfin app is transcoding this same video/ASS combination as well.

Could you share what should be the typical device profile that should be selected?

yihaolee85 commented 2 months ago

Update, did some test with the same video/ASS combination:

Chrome browser on desktop: Transcoding as per logs (FFmpeg.Transcode log available as well):

[2024-08-20 09:38:57.065 +08:00] [INF] [53] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "user". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-08-20 09:38:57.666 +08:00] [INF] [60] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2024-08-20 09:38:57.668 +08:00] [INF] [60] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -ss 00:15:00.000 -noaccurate_seek -init_hw_device vaapi=va:,kernel_driver=i915,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:\"/video/movies/Apocalypse Now (1979) - Redux.mkv\" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_qsv -preset veryfast -look_ahead 0 -b:v 8463010 -maxrate 8463010 -bufsize 16926020 -g:v:0 72 -keyint_min:v:0 72 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24,hwmap=derive_device=qsv,format=qsv\" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -ar 48000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"1099854d25a6555f2b643c65602c5c83-1.mp4\" -start_number 300 -hls_segment_filename \"/config/data/transcodes/1099854d25a6555f2b643c65602c5c83%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/config/data/transcodes/1099854d25a6555f2b643c65602c5c83.m3u8\""
[2024-08-20 09:39:11.748 +08:00] [INF] [43] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for "/config/data/transcodes/1099854d25a6555f2b643c65602c5c83.m3u8"
[2024-08-20 09:39:11.978 +08:00] [INF] [43] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
[2024-08-20 09:39:11.979 +08:00] [INF] [43] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) "/config/data/transcodes/1099854d25a6555f2b643c65602c5c83.m3u8"
[2024-08-20 09:39:13.572 +08:00] [INF] [31] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Web" "10.9.7" playing "Apocalypse Now". Stopped at "910262" ms

Jellyfin app on iPhone: Transcoding as per logs (FFmpeg.DirectStream log available as well):

[2024-08-20 09:41:55.772 +08:00] [INF] [22] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "user". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-08-20 09:41:56.201 +08:00] [INF] [44] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2024-08-20 09:41:56.202 +08:00] [INF] [44] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -ss 00:14:46.176 -noaccurate_seek -fflags +genpts  -i file:\"/video/movies/Apocalypse Now (1979) - Redux.mkv\" -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 libfdk_aac -ac 6 -ab 640000 -ar 48000 -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 \"ba84f382fad6b849b6d62c15e14760d0-1.mp4\" -start_number 108 -hls_segment_filename \"/config/data/transcodes/ba84f382fad6b849b6d62c15e14760d0%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/config/data/transcodes/ba84f382fad6b849b6d62c15e14760d0.m3u8\""
[2024-08-20 09:42:12.415 +08:00] [INF] [47] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for "/config/data/transcodes/ba84f382fad6b849b6d62c15e14760d0.m3u8"
[2024-08-20 09:42:12.520 +08:00] [INF] [47] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
[2024-08-20 09:42:12.520 +08:00] [INF] [47] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) "/config/data/transcodes/ba84f382fad6b849b6d62c15e14760d0.m3u8"
[2024-08-20 09:42:14.056 +08:00] [INF] [54] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Mobile (iOS)" "1.5.0" playing "Apocalypse Now". Stopped at "919391" ms

Swiftfin app on iPhone: Unknown? logs:

[2024-08-20 09:49:56.566 +08:00] [INF] [47] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "user". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-08-20 09:50:14.426 +08:00] [INF] [22] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Swiftfin iOS" "1.2" playing "Apocalypse Now". Stopped at "9586000" ms

Another 3rd party app: same outcome as Swiftfin logs:

[2024-08-20 10:00:51.353 +08:00] [INF] [51] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "user". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-08-20 10:01:25.532 +08:00] [INF] [43] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "SenPlayer" "4.1.0" playing "Apocalypse Now". Stopped at "9607000" ms

I hope this was helpful

yihaolee85 commented 2 months ago

Forgot to add: Streamyfin logs when I tried playing it until it gave an error message:

[2024-08-20 10:06:39.668 +08:00] [INF] [34] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "user". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-08-20 10:06:42.304 +08:00] [INF] [53] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2024-08-20 10:06:42.344 +08:00] [INF] [53] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -init_hw_device vaapi=va:,kernel_driver=i915,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:\"/video/movies/Apocalypse Now (1979) - Redux.mkv\" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:0 -codec:v:0 h264_qsv -preset veryfast -look_ahead 0 -b:v 2616000 -maxrate 2616000 -bufsize 5232000 -g:v:0 72 -keyint_min:v:0 72 -filter_complex \"alphasrc=s=960x400:r=23.976025:start='0',format=bgra,subtitles=f='/video/movies/Apocalypse Now (1979) - Redux.mkv':si=8:alpha=1:sub2video=1:fontsdir='/config/cache/attachments/c094ae3094892196bfc45a3542cf3581',hwupload=derive_device=qsv:extra_hw_frames=64[sub];[0:0]setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=w=960:h=400:format=nv12:extra_hw_frames=24,hwmap=derive_device=qsv,format=qsv[main];[main][sub]overlay_qsv=eof_action=pass:repeatlast=0:w=960:h=400\" -start_at_zero -codec:a:0 libfdk_aac -ac 2 -ab 256000 -ar 48000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"8fc747489c4538b936221d255520fb05-1.mp4\" -start_number 0 -hls_segment_filename \"/config/data/transcodes/8fc747489c4538b936221d255520fb05%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/config/data/transcodes/8fc747489c4538b936221d255520fb05.m3u8\""

There was a FFmpeg.Transcode log that was also created. Let me know if this is needed?