jellyfin / jellyfin-roku

The Official Roku Client for Jellyfin
https://jellyfin.org
GNU General Public License v2.0
460 stars 144 forks source link

Server is incorrectly Direct Playing/Streaming even though client doesn't support subtitle format #562

Open panama007 opened 2 years ago

panama007 commented 2 years ago

Relevant output of ffprobe (I cut out some sections I thought were irrelevant and replaced with ... to reduce noise):

ffprobe version 4.4.1-Jellyfin Copyright (c) 2007-2021 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-shared --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-static --enable-gmp --enable-gnutls --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --arch=amd64 --enable-opencl --enable-vaapi --enable-amf --enable-libmfx --enable-vdpau --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, matroska,webm, from 'AHO-GIRL - S01E01 - Here She Is! Aho Girl.mkv':
...
  Stream #0:0(jpn): Video: hevc (Main 10), yuv420p10le(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)
...
  Stream #0:1(jpn): Audio: opus, 48000 Hz, stereo, fltp (default)
...
  Stream #0:2(eng): Subtitle: ass (default)
    Metadata:
      title           : Dialogue | Chihiro
      BPS-eng         : 3128
      DURATION-eng    : 00:12:26.330000000
      NUMBER_OF_FRAMES-eng: 2393
      NUMBER_OF_BYTES-eng: 291891
      _STATISTICS_WRITING_APP-eng: mkvmerge v47.0.0 ('Black Flag') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-06-12 15:38:58
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
...

Logs If I'm reading this correctly, the client is not broadcasting ASS subtitle support, but the server thinks the file is still eligible for DirectPlay and DirectStream.

[2022-03-24 14:04:48.181 -05:00] [INF] Found ffmpeg version "4.4.1"
[2022-03-24 14:04:48.189 -05:00] [INF] Available "decoders": ["h264", "h264_qsv", "h264_cuvid", "hevc", "hevc_qsv", "hevc_cuvid", "mpeg2video", "mpeg2_qsv", "mpeg2_cuvid", "mpeg4", "mpeg4_cuvid", "msmpeg4", "vc1_qsv", "vc1_cuvid", "vp8_cuvid", "vp8_qsv", "vp9_cuvid", "vp9_qsv", "aac", "ac3", "flac", "mp3"]
[2022-03-24 14:04:48.197 -05:00] [INF] Available "encoders": ["libx264", "h264_amf", "h264_nvenc", "h264_qsv", "h264_v4l2m2m", "h264_vaapi", "libx265", "hevc_amf", "hevc_nvenc", "hevc_qsv", "hevc_vaapi", "mpeg4", "msmpeg4", "libvpx", "libvpx-vp9", "aac", "ac3", "flac", "libmp3lame", "libopus", "libvorbis", "srt"]
[2022-03-24 14:04:48.203 -05:00] [INF] Available hwaccel types: ["vdpau", "cuda", "vaapi", "qsv", "drm", "opencl"]
[2022-03-24 14:04:48.203 -05:00] [INF] FFmpeg: Custom: "/usr/lib/jellyfin-ffmpeg/ffmpeg"
[2022-03-24 14:09:55.136 -05:00] [INF] GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp4,m4v,mov", AudioCodec: "mp3,pcm,lpcm,wav,ac3,alac,aac,eac3", VideoCodec: "h264,h265,hevc,mpeg2video", Type: Video }, DirectPlayProfile { Container: "mkv,webm", AudioCodec: "mp3,pcm,lpcm,wav,ac3,flac,alac,aac,opus,dts,vorbis,eac3", VideoCodec: "h264,vp8,h265,hevc,vp9,mpeg2video", Type: Video }, DirectPlayProfile { Container: "mp3,pcm,lpcm,wav,ac3,wma,flac,alac,aac,dts,wmapro,eac3", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: " 6", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: " 6", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264,mpeg2video", AudioCodec: "aac,ac3", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: " 6", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: LessThanEqual, Property: AudioChannels, Value: " 6", IsRequired: False }], ApplyConditions: [], Codec: "mp3,pcm,lpcm,wav,ac3,flac,alac,aac,opus,dts,vorbis,eac3", Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "srt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ttml", Method: External, DidlMode: null, Language: null, Container: null }] }
[2022-03-24 14:09:55.139 -05:00] [INF] User policy for "alex". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2022-03-24 14:09:55.139 -05:00] [INF] Profile: "Unknown Profile", Path: "/mnt/media/Anime/AHO-GIRL/Season 1/AHO-GIRL - S01E02 - Aho Girl Multiplies!.mkv", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2022-03-24 14:09:55.139 -05:00] [INF] Profile: "Unknown Profile", Path: "/mnt/media/Anime/AHO-GIRL/Season 1/AHO-GIRL - S01E02 - Aho Girl Multiplies!.mkv", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2022-03-24 14:09:55.140 -05:00] [INF] Profile: "Unknown Profile", Path: "/mnt/media/Anime/AHO-GIRL/Season 1/AHO-GIRL - S01E02 - Aho Girl Multiplies!.mkv", isEligibleForDirectPlay: True, isEligibleForDirectStream: True

FFmpeg Logs None, the file ends up being DirectPlay'ed.

Server System:

Client System:

whiteowl3 commented 2 years ago

this is a known issue with the roku app. The subtitle profiles are incomplete. please consider moving this issue to https://github.com/jellyfin/jellyfin-roku the solution is to add subtitle profiles which indicate the roku cannot display graphical subs. all graphical subs will have to be burned in on roku. 10.7.7 may never work properly though all the work we are doing the roku is against 10.8, so your best mileage will come from there.

cewert commented 1 year ago

Hi @panama007 are you still experiencing this issue on the latest stable version of the app, v1.6.6?