• Login
  • Register
  • Login Register
    Login
    Username/Email:
    Password:
    Or login with a social network below
  • Forum
  • Website
  • GitHub
  • Status
  • Translation
  • Features
  • Team
  • Rules
  • Help
  • Feeds
User Links
  • Login
  • Register
  • Login Register
    Login
    Username/Email:
    Password:
    Or login with a social network below

    Useful Links Forum Website GitHub Status Translation Features Team Rules Help Feeds
    Jellyfin Forum Development Client Development Roku Development Roku Portrait Bug

     
    • 0 Vote(s) - 0 Average

    Roku Portrait Bug

    jellyflick
    Offline

    Junior Member

    Posts: 5
    Threads: 2
    Joined: 2025 Dec
    Reputation: 0
    #1
    2025-12-27, 05:46 PM
    Hello

    I noticed that when I play videos on Roku that are in portrait, I just get a blank screen.

    I threw together a script to fix this with ffmpeg adding black bars:

    Code:
    #!/usr/bin/env bash

    fname="${1%.*}-landscape"

    ffmpeg -i "$1" \
      -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1" \
      -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.1 \
      -c:a aac -movflags +faststart \
      "${fname}.mp4"

    Maybe not a perfect script but gets the job done for now. Does anyone know the reason for this? There is no useful information in the log, it just tries to DirectPlay the video and nothing shows.
    1hitsong
    Offline

    Team Member

    Posts: 138
    Threads: 13
    Joined: 2023 Jun
    Reputation: 5
    #2
    2025-12-27, 07:20 PM
    If you check the force transcode option, does it play as expected?

    On the detail screen, click Options, then in the popup move to options, then check ForceTranscode (Allow Remux)

       
    🤘 Enjoy

    jellyflick
    Offline

    Junior Member

    Posts: 5
    Threads: 2
    Joined: 2025 Dec
    Reputation: 0
    #3
    2025-12-27, 07:55 PM
    (2025-12-27, 07:20 PM)1hitsong Wrote: If you check the force transcode option, does it play as expected?

    On the detail screen, click Options, then in the popup move to options, then check ForceTranscode (Allow Remux)

    Yes, I enabled force transcode. Interestingly, it's still attempting DirectStream? Also, I made sure to clear Roku app cache.

    Playback log "FFmpeg.DirectStream-2025-12-27_13-51-56_ddc4a63be20f0c9904188b5e68ff7da9_e54bb1f4.log":

    Code:
    {"Protocol":0,"Id":"ddc4a63be20f0c9904188b5e68ff7da9","Path":"/home/REDACTED/Jellyfin Server Media/Climb/climbert.mp4","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":"mov,mp4,m4a,3gp,3g2,mj2","Size":3834731,"Name":"climbert","IsRemote":false,"ETag":"80b13fca62da6f3351c329cdb8c0dea1","RunTimeTicks":109461460,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"UseMostCompatibleTranscodingProfile":false,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":null,"RequiresLooping":false,"SupportsProbing":true,"VideoType":0,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":"aac","CodecTag":"mp4a","Language":"eng","ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/48000","CodecTimeBase":null,"Title":"SoundHandle","Hdr10PlusPresentFlag":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":"Default","LocalizedForced":null,"LocalizedExternal":"External","LocalizedHearingImpaired":null,"DisplayTitle":"SoundHandle - English - AAC - Stereo - Default","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":"stereo","BitRate":191816,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":2,"SampleRate":48000,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":"LC","Type":0,"AspectRatio":null,"Index":0,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null},{"Codec":"h264","CodecTag":"avc1","Language":"eng","ColorRange":null,"ColorSpace":"bt709","ColorTransfer":"bt709","ColorPrimaries":"bt709","DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/90000","CodecTimeBase":null,"Title":null,"Hdr10PlusPresentFlag":null,"VideoRange":1,"VideoRangeType":1,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"LocalizedHearingImpaired":null,"DisplayTitle":"1080p H264 SDR","NalLengthSize":"4","IsInterlaced":false,"IsAVC":true,"ChannelLayout":null,"BitRate":2607792,"BitDepth":8,"RefFrames":1,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":1280,"Width":720,"AverageFrameRate":58.659508,"RealFrameRate":60,"ReferenceFrameRate":58.659508,"Profile":"High","Type":1,"AspectRatio":null,"Index":1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":"yuv420p","Level":32,"IsAnamorphic":true}],"MediaAttachments":[],"Formats":[],"Bitrate":2802616,"FallbackMaxStreamingBitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":0,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null,"HasSegments":false}

    ffmpeg -analyzeduration 200M -probesize 1G -fflags +genpts -f mov,mp4,m4a,3gp,3g2,mj2  -i file:"/home/REDACTED/Jellyfin Server Media/Climb/climbert.mp4" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:1 -map 0:0 -map -0:s -codec:v:0 copy -bsf:v h264_mp4toannexb -start_at_zero -codec:a:0 libmp3lame -ac 2 -ab 256000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type mpegts -start_number 0 -hls_segment_filename "/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b1%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b1.m3u8"


    ffmpeg version 7.1.3-Jellyfin Copyright (c) 2000-2025 the FFmpeg developers
      built with gcc 14.3.0 (GCC)
      configuration: --prefix=/app --disable-doc --disable-ffplay --disable-libxcb --disable-ptx-compression --disable-sdl2 --disable-static --disable-xlib --enable-chromaprint --enable-gmp --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libmp3lame --enable-libopenmpt --enable-libopus --enable-libsvtav1 --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-libzvbi --enable-lto=auto --enable-opencl --enable-shared --enable-version3 --extra-libs=-lfftw3f --extra-version=Jellyfin --target-os=linux --enable-libvpl --enable-amf --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-libplacebo --enable-libshaderc --enable-nvdec --enable-nvenc --enable-vaapi --enable-vulkan
      libavutil      59. 39.100 / 59. 39.100
      libavcodec    61. 19.101 / 61. 19.101
      libavformat    61.  7.100 / 61.  7.100
      libavdevice    61.  3.100 / 61.  3.100
      libavfilter    10.  4.100 / 10.  4.100
      libswscale      8.  3.100 /  8.  3.100
      libswresample  5.  3.100 /  5.  3.100
      libpostproc    58.  3.100 / 58.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file:/home/REDACTED/Jellyfin Server Media/Climb/climbert.mp4':
      Metadata:
        major_brand    : isom
        minor_version  : 512
        compatible_brands: isomiso2avc1mp41
        creation_time  : 2025-09-15T02:12:28.000000Z
      Duration: 00:00:10.95, start: 0.000000, bitrate: 2802 kb/s
      Stream #0:0[0x1](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s (default)
          Metadata:
            creation_time  : 2025-09-15T02:12:09.000000Z
            handler_name    : SoundHandle
            vendor_id      : [0][0][0][0]
      Stream #0:1[0x2](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, 2607 kb/s, 58.66 fps, 60 tbr, 90k tbn (default)
          Metadata:
            creation_time  : 2025-09-15T02:12:10.000000Z
            handler_name    : VideoHandle
            vendor_id      : [0][0][0][0]
    Stream mapping:
      Stream #0:1 -> #0:0 (copy)
      Stream #0:0 -> #0:1 (aac (native) -> mp3 (libmp3lame))
    Press [q] to stop, [?] for help
    Output #0, hls, to '/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b1.m3u8':
      Metadata:
        encoder        : Lavf61.7.100
      Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, q=2-31, 2607 kb/s, 58.66 fps, 60 tbr, 90k tbn (default)
      Stream #0:1: Audio: mp3, 48000 Hz, stereo, fltp, 256 kb/s (default)
          Metadata:
            encoder        : Lavc61.19.101 libmp3lame
    [hls @ 0x55930dd94b80] Opening '/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b10.ts' for writing
    [hls @ 0x55930dd94b80] Opening '/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b11.ts' for writing
    [out#0/hls @ 0x55930dd80b80] video:3473KiB audio:343KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
    frame=  640 fps=0.0 q=-1.0 Lsize=N/A time=00:00:00.00 bitrate=N/A speed=  0x   

    General log "log_20251227.log":

    Code:
    [2025-12-27 13:51:56.273 -06:00] [INF] [66] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "abc". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
    [2025-12-27 13:51:56.423 -06:00] [INF] [66] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "abc". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
    [2025-12-27 13:51:56.671 -06:00] [INF] [66] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "ffmpeg" "-analyzeduration 200M -probesize 1G -fflags +genpts -f mov,mp4,m4a,3gp,3g2,mj2  -i file:\"/home/REDACTED/Jellyfin Server Media/Climb/climbert.mp4\" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:1 -map 0:0 -map -0:s -codec:v:0 copy -bsf:v h264_mp4toannexb -start_at_zero -codec:a:0 libmp3lame -ac 2 -ab 256000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type mpegts -start_number 0 -hls_segment_filename \"/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b1%d.ts\" -hls_playlist_type vod -hls_list_size 0 -y \"/home/REDACTED/.var/app/org.jellyfin.JellyfinServer/cache/jellyfin/transcodes/bd5bac6844120c70ae82c650f5d292b1.m3u8\""
    [2025-12-27 13:51:56.798 -06:00] [INF] [66] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
    [2025-12-27 13:52:04.639 -06:00] [INF] [44] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "127.0.0.1" request
    [2025-12-27 13:52:56.903 -06:00] [INF] [38] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Roku" "3.0.15" playing "climbert". Stopped at "0" ms
    jellyflick
    Offline

    Junior Member

    Posts: 5
    Threads: 2
    Joined: 2025 Dec
    Reputation: 0
    #4
    2025-12-27, 08:01 PM
    (2025-12-27, 07:20 PM)1hitsong Wrote: If you check the force transcode option, does it play as expected?

    On the detail screen, click Options, then in the popup move to options, then check ForceTranscode (Allow Remux)

    On second glance as well, my roku app does not have a detail screen like yours. I have Force Transcode option in the main options menu which I selected on.
    1hitsong
    Offline

    Team Member

    Posts: 138
    Threads: 13
    Joined: 2023 Jun
    Reputation: 5
    #5
    2025-12-27, 08:18 PM (This post was last modified: 2025-12-27, 08:18 PM by 1hitsong.)
    Quote: On second glance as well, my roku app does not have a detail screen like yours. I have Force Transcode option in the main options menu which I selected on.

    Everyone should have this screen. What version of the Jellyfin client are you running? You can find the version number at the bottom of the main settings screen.

    Can you post a screenshot/photo of the movie detail screen so I can get my bearings of what screen you are on?
    🤘 Enjoy

    jellyflick
    Offline

    Junior Member

    Posts: 5
    Threads: 2
    Joined: 2025 Dec
    Reputation: 0
    #6
    2025-12-27, 08:21 PM (This post was last modified: 2025-12-27, 08:22 PM by jellyflick.)
    (2025-12-27, 08:18 PM)1hitsong Wrote:
    Quote: On second glance as well, my roku app does not have a detail screen like yours. I have Force Transcode option in the main options menu which I selected on.

    Everyone should have this screen. What version of the Jellyfin client are you running? You can find the version number at the bottom of the main settings screen.

    Can you post a screenshot/photo of the movie detail screen so I can get my bearings of what screen you are on?

    Jellyfin 3.0.15

    [Image: EJ6T8ay.png]

    What button do I press to get to that screen?
    « Next Oldest | Next Newest »

    Users browsing this thread: 1 Guest(s)


    • View a Printable Version
    • Subscribe to this thread
    Forum Jump:

    Home · Team · Help · Contact
    © Designed by D&D - Powered by MyBB
    L


    Jellyfin

    The Free Software Media System

    Linear Mode
    Threaded Mode