jellyfin / jellyfin-androidtv

Android TV Client for Jellyfin
https://jellyfin.org
GNU General Public License v2.0
2.9k stars 493 forks source link

AAC 6/8-channel audio only outputs as Stereo PCM #3900

Open salty-sweet opened 3 months ago

salty-sweet commented 3 months ago

UPDATE: I've done some audio track testing myself, and the results are on https://github.com/jellyfin/jellyfin-androidtv/issues/3900#issuecomment-2312517826.

Describe the bug

EXPECTED OUTCOME:

ACTUAL OUTCOME:

My AV Receiver is capable to receive 6 or 8 channel audio streams albeit physically limited to 5.1 audio output. Nearly all of my Jellyfin media contains 6/8-channel audio tracks. They vary in audio codecs, but only DTS-HD MA, E-AC3, and AC3 audio codecs work. The rest contain AAC 6/8-channel audio tracks, which only gets played as Stereo PCM. I have given MediaInfo for the media file (that has AAC 5.1 audio) that I used to test and get ADB Logcat output.

  • Jellyfin Server dashboard shows that my TV is "Direct Playing" and is not transcoding any of my media.

  • Jellyfin AndroidTV client does not crash as it still plays the media, so there are no crash files from the server that I can give. The logs I have is ADB Logcat output from: ./adb logcat | Select-String -Pattern "(org.jellyfin.androidtv)|(jellyfin)|(codec)"

  • This only happened when I updated to v0.17.x. All media plays with surround sound back in v0.16.11.

  • Any other 6/8-channel audio codecs I have not mentioned above, I have not tested yet.

  • Also audio with Atmos/DTS:X metadata I have not tested, and I assume they wouldn't work anyway on my AVR.

Logs

08-15 18:21:57.400  1170  1170 I org.jellyfin.sdk.api.ktor.KtorClient: GET http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/Intros
08-15 18:21:57.466  1170  1170 D NavigationRepositoryImpl: Navigating to Fragment(fragment=class org.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment (Kotlin reflection is not available), arguments=Bundle[{Position=0}]) (via navigate function)
08-15 18:21:57.698  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/PlaybackInfo?format=json
08-15 18:21:57.709   719  2076 I MediaFocusControl: requestAudioFocus() from uid/pid 10093/1170 clientId=tcl.android.media.TclAudioManager@9641d3borg.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment$6@494a6b5 callingPack=org.jellyfin.androidtv req=1 flags=0x0 sdk=34
08-15 18:21:57.754  1426  1426 I GoogleInputMethodService: GoogleInputMethodService.onStartInput():1899 onStartInput(EditorInfo{inputType=0x0(NULL) imeOptions=0x0 privateImeOptions=null actionName=UNSPECIFIED actionLabel=null actionId=0 initialSelStart=-1 initialSelEnd=-1 initialCapsMode=0x0 hintText=null label=null packageName=org.jellyfin.androidtv fieldId=2131427902
fieldName=null extras=null hintLocales=[]}, false)
08-15 18:21:57.957  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/PlaybackInfo?format=json
08-15 18:21:58.008  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing
08-15 18:21:58.283  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing
08-15 18:21:58.620  1170  1772 D MediaCodecInfo: NoSupport [codec.profileLevel, hvc1.2.4.L150.90, video/hevc] [c2.android.hevc.decoder, video/hevc] [BeyondTV4, Smart TV Pro, TCL, 30]
08-15 18:21:58.623  1170  1772 D MediaCodec: [KK][init] name OMX.realtek.video.decoder localame OMX.realtek.video.decoder, InitName OMX.realtek.video.decoder
08-15 18:21:58.623  1170  1772 D MediaCodec: MediaCodec init , pid = 1170
08-15 18:21:58.624  1170  1772 D MediaCodec: [KK][init] mediaType video/3gpp
08-15 18:21:58.626   485  1622 D ResourceManagerService: ipel set ux, tid = 1782, name = codecloop_tid, operation = 1
08-15 18:21:58.651   485  1622 D ResourceManagerService: ipel set ux, tid = 1780, name = mediacodec_looper_tid, operation = 1
08-15 18:21:58.652  1170  1772 D MediaCodec: [configure----1362] format= AMessage(what = 0x00000000) = {
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t max-height = 1600
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t max-width = 3840
08-15 18:21:58.652  1170  1772 D MediaCodec:   string mime = "video/hevc"
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t width = 3840
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t priority = 0
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t rotation-degrees = 0
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t max-input-size = 4608000
08-15 18:21:58.652  1170  1772 D MediaCodec:   int32_t height = 1600
08-15 18:21:58.652  1170  1772 D MediaCodec:   Buffer *csd-0 = 0x6f889d90
08-15 18:21:58.652  1170  1772 D MediaCodec: }
08-15 18:21:58.652  1170  1772 D MediaCodec: MediaCodec configure
08-15 18:21:58.652  1170  1780 D MediaCodec: flushMediametrics
08-15 18:21:58.653  1170  1780 I MediaCodec: [OMX.realtek.video.decoder] setting surface generation to 1198094
08-15 18:21:58.656  1170  1782 E ACodec  : [OMX.realtek.video.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
08-15 18:21:58.661  1170  1782 I ACodec  : codec does not support config priority (err -1010)
08-15 18:21:58.664  1170  1772 D MediaCodec: MediaCodec start
08-15 18:21:58.659   492   492 W OMX_VideoLooper: type=1400 audit(0.0:29730): avc: denied { read } for name="u:object_r:default_prop:s0" dev="tmpfs" ino=9439 scontext=u:r:mediacodec:s0 tcontext=u:object_r:default_prop:s0 tclass=file permissive=0
08-15 18:21:58.676   492  1784 I OMX_VDEC: consumer-usage: hwc, usage=0x900, adaptive=1, codec=11, transfer=3
08-15 18:21:58.711   492  1784 I OMX_VDEC: configure reference mode: codec=2, size=3840x1600, rate=0
08-15 18:21:58.712   492  1784 E CodecResource: [CRM] (0xae541210)Construct
08-15 18:21:58.712   492  1784 E CodecResource: [CRM] initialize client name: (VDC)
08-15 18:21:58.712   492  1784 E CodecResource: acquireResource codec(hevc) max_width(3840) max_height(2160) fps(0) encoder(0) adaptive(1) try_acquire(0)
08-15 18:21:58.712   492  1786 E CodecResource: [CRM] (0xae541210)(VDC) wait events
08-15 18:21:58.714   492  1784 E VideoClient: Wrong Core Type: CodecType=2 coreType=801
08-15 18:21:58.794  1170  1432 D org.jellyfin.sdk.api.sockets.OkHttpSocketConnection: Receiving (raw) message {"MessageId":"0bcf4a4097ee4e6ea873c2acc8804856","Data":{"UserId":"e68cb36acbf940febbc60f40bdb2d6e4","UserDataList":[{"PlaybackPositionTicks":0,"PlayCount":16,"IsFavorite":false,"LastPlayedDate":"2024-08-15T10:21:56.7015281Z","Played":false,"Key":"954","ItemId":"b0b
94e1dc2c8183d6e7fbbdbe8fa1cd7"},{"UnplayedItemCount":21,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"78f59e42-76ce-6860-8973-18b36bb7b6a3","ItemId":"78f59e4276ce6860897318b36bb7b6a3"}]},"MessageType":"UserDataChanged"}
08-15 18:21:58.807  1170  1772 E MediaCodec: getNameByCurrentProcessName =org.jellyfin.androidtv
08-15 18:21:58.807  1170  1772 D MediaCodec: Current app: org.jellyfin.androidtv
08-15 18:21:58.821  1170  1772 D MediaCodec: [KK][init] name c2.android.aac.decoder localame c2.android.aac.decoder, InitName c2.android.aac.decoder
08-15 18:21:58.821  1170  1772 D MediaCodec: MediaCodec init , pid = 1170
08-15 18:21:58.824  1170  1791 D CCodec  : allocate(c2.android.aac.decoder)
08-15 18:21:58.840  1170  1791 I CCodec  : Created component [c2.android.aac.decoder]
08-15 18:21:58.841  1170  1791 D CCodecConfig: read media type: audio/mp4a-latm
08-15 18:21:58.856  1170  1791 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
08-15 18:21:58.856  1170  1791 D CCodecConfig: c2 config diff is Dict {
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 coded.aac-packaging.value = 0
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 coded.bitrate.value = 64000
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 coded.pl.level = 0
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 coded.pl.profile = 8192
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::i32 coding.drc.album-mode.value = 0
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::float coding.drc.attenuation-factor.value = 1
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::float coding.drc.boost-factor.value = 1
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::i32 coding.drc.compression-mode.value = 3
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::i32 coding.drc.effect-type.value = 3
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::float coding.drc.encoded-level.value = 0.25
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::float coding.drc.reference-level.value = -16
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 input.buffers.max-size.value = 8192
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 input.delay.value = 0
08-15 18:21:58.856  1170  1791 D CCodecConfig:   string input.media-type.value = "audio/mp4a-latm"
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 output.delay.value = 2
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::float output.drc.output-loudness.value = 0.25
08-15 18:21:58.856  1170  1791 D CCodecConfig:   string output.media-type.value = "audio/raw"
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 raw.channel-count.value = 1
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 raw.max-channel-count.value = 8
08-15 18:21:58.856  1170  1791 D CCodecConfig:   c2::u32 raw.sample-rate.value = 44100
08-15 18:21:58.856  1170  1791 D CCodecConfig: }
08-15 18:21:58.858   485  1622 D ResourceManagerService: ipel set ux, tid = 1791, name = mediacodec_looper_tid, operation = 1
08-15 18:21:58.859  1170  1772 D MediaCodec: [configure----1362] format= AMessage(what = 0x00000000) = {
08-15 18:21:58.859  1170  1772 D MediaCodec:   float operating-rate = 48000.000000
08-15 18:21:58.859  1170  1772 D MediaCodec:   int32_t sample-rate = 48000
08-15 18:21:58.859  1170  1772 D MediaCodec:   string mime = "audio/mp4a-latm"
08-15 18:21:58.859  1170  1772 D MediaCodec:   int32_t channel-count = 6
08-15 18:21:58.859  1170  1772 D MediaCodec:   int32_t priority = 0
08-15 18:21:58.859  1170  1772 D MediaCodec:   Buffer csd-0 = {
08-15 18:21:58.859  1170  1772 D MediaCodec:     00000000:  11 b0                                             ..
08-15 18:21:58.859  1170  1772 D MediaCodec:   }
08-15 18:21:58.859  1170  1772 D MediaCodec: }
08-15 18:21:58.859  1170  1772 D MediaCodec: MediaCodec configure
08-15 18:21:58.859  1170  1791 D MediaCodec: flushMediametrics
08-15 18:21:58.860  1170  1791 D CCodec  : [c2.android.aac.decoder] buffers are bound to CCodec for this session
08-15 18:21:58.860  1170  1791 D CCodecConfig: no c2 equivalents for flags
08-15 18:21:58.861  1170  1791 D CCodecConfig: c2 config diff is   c2::u32 raw.channel-count.value = 6
08-15 18:21:58.861  1170  1791 D CCodecConfig:   c2::u32 raw.sample-rate.value = 48000
08-15 18:21:58.864  1170  1791 W Codec2Client: query -- param skipped: index = 1107298332.
08-15 18:21:58.864  1170  1791 D CCodec  : setup formats input: AMessage(what = 0x00000000) = {
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-album-mode = 0
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-boost-level = 127
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-cut-level = 127
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-effect-type = 3
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-heavy-compression = 3
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-encoded-target-level = -1
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-max-output-channel_count = 8
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-target-ref-level = 64
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t channel-count = 6
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t level = 0
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t max-input-size = 8192
08-15 18:21:58.864  1170  1791 D CCodec  :   string mime = "audio/mp4a-latm"
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t profile = 2
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t sample-rate = 48000
08-15 18:21:58.864  1170  1791 D CCodec  : } and output: AMessage(what = 0x00000000) = {
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-album-mode = 0
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-boost-level = 127
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-cut-level = 127
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-effect-type = 3
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-heavy-compression = 3
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-drc-output-loudness = -1
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-encoded-target-level = -1
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-max-output-channel_count = 8
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t aac-target-ref-level = 64
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t channel-count = 6
08-15 18:21:58.864  1170  1791 D CCodec  :   string mime = "audio/raw"
08-15 18:21:58.864  1170  1791 D CCodec  :   int32_t sample-rate = 48000
08-15 18:21:58.864  1170  1791 D CCodec  : }
08-15 18:21:58.864  1170  1772 D MediaCodec: MediaCodec start
08-15 18:21:58.866  1170  1791 W Codec2Client: query -- param skipped: index = 1342179345.
08-15 18:21:58.866  1170  1791 W Codec2Client: query -- param skipped: index = 2415921170.
08-15 18:21:58.866  1170  1791 W Codec2Client: query -- param skipped: index = 1610614798.
08-15 18:21:58.870  1170  1791 D CCodecBufferChannel: [c2.android.aac.decoder#696] Created input block pool with allocatorID 16 => poolID 28 - OK (0)
08-15 18:21:58.872  1170  1791 I CCodecBufferChannel: [c2.android.aac.decoder#696] Created output block pool with allocatorID 16 => poolID 61 - OK
08-15 18:21:58.872  1170  1791 D CCodecBufferChannel: [c2.android.aac.decoder#696] Configured output block pool ids 61 => OK
08-15 18:21:58.875  1170  1772 E MediaCodec: getNameByCurrentProcessName =org.jellyfin.androidtv
08-15 18:21:58.875  1170  1772 D MediaCodec: Current app: org.jellyfin.androidtv
08-15 18:21:58.879  1170  1791 D MediaCodec: updateStaticUxTidEX tid:1927
08-15 18:21:58.897  1170  1791 D CCodecConfig: c2 config diff is   c2::i32 coding.drc.compression-mode.value = 1
08-15 18:21:58.899  1170  1791 D CCodecBuffers: [c2.android.aac.decoder#696:Output[N]] popFromStashAndRegister: output format changed to AMessage(what = 0x00000000) = {
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-album-mode = 0
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-boost-level = 127
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-cut-level = 127
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-effect-type = 3
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-heavy-compression = 1
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-drc-output-loudness = -1
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-encoded-target-level = -1
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-max-output-channel_count = 8
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t aac-target-ref-level = 64
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t channel-count = 6
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   string mime = "audio/raw"
08-15 18:21:58.899  1170  1791 D CCodecBuffers:   int32_t sample-rate = 48000
08-15 18:21:58.899  1170  1791 D CCodecBuffers: }
08-15 18:21:58.907   298   712 E CodecResource: [CRM] (0xb0141600)Construct
08-15 18:21:58.908   298   712 E CodecResource: [CRM] initialize client name: (hwc-monitor)
08-15 18:21:58.909   298   712 E CodecResource: registerResource coreType(0) vport(1) aport(0) mixport(0) max_width(0) max_height(0) encoder(0)
08-15 18:21:58.913   298  1796 E CodecResource: [CRM] (0xb0141600)(hwc-monitor) wait events
08-15 18:21:58.934  1170  1772 D AudioTrack: set: client package name is : org.jellyfin.androidtv
08-15 18:21:58.970  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:21:58.976  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Videos/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/b0b94e1dc2c8183d6e7fbbdbe8fa1cd7/Subtitles/0/0/Stream.JSON?format=json
08-15 18:21:59.205  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Videos/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/b0b94e1dc2c8183d6e7fbbdbe8fa1cd7/Subtitles/0/0/Stream.JSON?format=json
08-15 18:21:59.205  1170  1170 D jellyfin-apiclient: Received response from http://192.168.137.1:8096/Videos/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/b0b94e1dc2c8183d6e7fbbdbe8fa1cd7/Subtitles/0/0/Stream.JSON?format=json
08-15 18:21:59.325  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:21:59.587  1794  1794 D com.tcl.tv.util.Util: getTopPackage: org.jellyfin.androidtv
08-15 18:21:59.587  1794  1794 D com.tcl.tv.TVRootApp: checkShowDolby: mTopPackageName = org.jellyfin.androidtv
08-15 18:21:59.592  1794  1794 D com.tcl.tv.util.Util: getTopPackage: org.jellyfin.androidtv
08-15 18:21:59.804   719  1230 D AppRecordListenerForFreeze: noteTrafficChanged  pid = 1170 pro = org.jellyfin.androidtv using = true
08-15 18:22:01.971  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:02.069  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:03.003  1170  1927 D CCodecBuffers: [c2.android.aac.decoder#696:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
08-15 18:22:04.977  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:05.110  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:07.978  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:08.119  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:08.125  1170  1374 D org.jellyfin.sdk.api.sockets.OkHttpSocketConnection: Sending (raw) message {"MessageType":"KeepAlive"}
08-15 18:22:08.255  1170  1432 D org.jellyfin.sdk.api.sockets.OkHttpSocketConnection: Receiving (raw) message {"MessageId":"32bee266ed484200b1e098f780041cc2","MessageType":"KeepAlive"}
08-15 18:22:10.980  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:11.119  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:11.944  1026  1236 I TGuardMemoryManagerMemoryInfoManager: org.jellyfin.androidtv avgPss is 114234  predictSize is 251954
08-15 18:22:11.946  1026  1227 I TGuardMemoryManagerKillHandler: killCache skipped high rank:12 procName:org.jellyfin.androidtv pid:1170 mem:178226
08-15 18:22:13.981  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:14.048  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:16.982  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:17.116  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:18.516  1026  1236 I TGuardMemoryManagerMemoryInfoManager: org.jellyfin.androidtv avgPss is 114234  predictSize is 251954
08-15 18:22:18.521  1026  1227 I TGuardMemoryManagerKillHandler: killCache skipped high rank:12 procName:org.jellyfin.androidtv pid:1170 mem:178226
08-15 18:22:19.984  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:20.032  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Progress
08-15 18:22:20.755   719  1610 I MediaFocusControl: abandonAudioFocus() from uid/pid 10093/1170 clientId=tcl.android.media.TclAudioManager@9641d3borg.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment$6@494a6b5
08-15 18:22:20.758   719  1610 I MediaFocusControl: abandonAudioFocus() from uid/pid 10093/1170 clientId=tcl.android.media.TclAudioManager@9641d3borg.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment$6@494a6b5
08-15 18:22:20.764  1170  1170 I jellyfin-apiclient: ReportPlaybackStopped: Item b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7, Ticks: 214390000
08-15 18:22:20.765  1170  1170 D jellyfin-apiclient: Adding request to queue: http://192.168.137.1:8096/Sessions/Playing/Stopped
08-15 18:22:20.785  1170  1791 D CCodecBuffers: [c2.android.aac.decoder#696:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
08-15 18:22:20.785  1170  1791 D CCodecBuffers: [c2.android.aac.decoder#696:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 1
08-15 18:22:20.785  1170  1791 D CCodecBuffers: [c2.android.aac.decoder#696:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 2
08-15 18:22:20.786  1170  1791 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
08-15 18:22:20.786  1170  1791 D CCodecConfig: c2 config diff is   c2::i32 coding.drc.compression-mode.value = 3
08-15 18:22:20.789  1170  1791 W Codec2Client: query -- param skipped: index = 1342179345.
08-15 18:22:20.789  1170  1791 W Codec2Client: query -- param skipped: index = 2415921170.
08-15 18:22:20.789  1170  1791 W Codec2Client: query -- param skipped: index = 1610614798.
08-15 18:22:20.794   485  1622 D ResourceManagerService: ipel set ux, tid = 1780, name = mediacodec_looper_tid, operation = 2
08-15 18:22:20.797   485  3503 D ResourceManagerService: ipel set ux, tid = 1782, name = codecloop_tid, operation = 2
08-15 18:22:20.797  1170  1772 D MediaCodec: MediaCodec stop
08-15 18:22:20.823   298  1796 E CodecResource: [CRM] receive reclaim event
08-15 18:22:20.823   298  1796 E CodecResource: [CRM] lock reclaim
08-15 18:22:20.823   298  1796 E CodecResource: [CRM] reclaiming
08-15 18:22:21.209   298   712 E CodecResource: [CRM] releaseResource: release monitor directly
08-15 18:22:21.209   298   712 E CodecResource: [CRM] releaseResource: in reclaiming process, just return OK
08-15 18:22:21.209   298   712 E CodecResource: [CRM] Free monitor 0xb0141600, isReclaim=1
08-15 18:22:21.209   298   712 E CodecResource: [CRM] 0xb0141600, setDeferDestruct, enable=1
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] reclaiming done
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] release resource
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] release resource done
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] response reclaim
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] response reclaim done
08-15 18:22:21.209   298  1796 E CodecResource: [CRM] (0xb0141600)break while, defer=1
08-15 18:22:21.210   492  1784 E CodecResource: [CRM] Free client 0xae541210, isReclaim=0
08-15 18:22:21.210   492  1784 E CodecResource: [CRM] (0xae541210)Destruct
08-15 18:22:21.210   492  1786 E CodecResource: [CRM] receive cancel event
08-15 18:22:21.210   492  1786 E CodecResource: [CRM] (0xae541210)break while, defer=0
08-15 18:22:21.211   298  1852 E CodecResource: [CRM] (0xb0141600)Destruct
08-15 18:22:21.212   298  1852 E CodecResource: [CRM] (0xb0141600), Destruct, thread done, typeId=2
08-15 18:22:21.217   485  3503 D ResourceManagerService: ipel set ux, tid = 1791, name = mediacodec_looper_tid, operation = 2
08-15 18:22:21.217  1170  1772 D MediaCodec: MediaCodec stop
08-15 18:22:21.218   485  3503 D ResourceManagerService: ipel set ux, tid = 1927, name = codecloop_tid, operation = 2
08-15 18:22:21.218  1170  1791 D CCodecBufferChannel: [c2.android.aac.decoder#696] MediaCodec discarded an unknown buffer
08-15 18:22:21.219  1170  1791 I chatty  : uid=10093(org.jellyfin.androidtv) MediaCodec_loop identical 2 lines
08-15 18:22:21.219  1170  1791 D CCodecBufferChannel: [c2.android.aac.decoder#696] MediaCodec discarded an unknown buffer
08-15 18:22:21.220  1170  1780 D MediaCodec: flushMediametrics
08-15 18:22:21.222  1170  1780 D MediaCodec: flushMediametrics
08-15 18:22:21.232  1794  1794 D com.tcl.tv.util.Util: getTopPackage: org.jellyfin.androidtv
08-15 18:22:21.232  1794  1794 D com.tcl.tv.TVRootApp: checkShowDolby: mTopPackageName = org.jellyfin.androidtv
08-15 18:22:21.247  1170  1791 D MediaCodec: flushMediametrics
08-15 18:22:21.250  1170  1791 D MediaCodec: flushMediametrics
08-15 18:22:21.280  1170  1170 I org.jellyfin.sdk.api.ktor.KtorClient: GET http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7
08-15 18:22:21.307  1170  1385 P Quality : 09 03 info 1723717341305 procName:org.jellyfin.androidtv 2 callback:androidx.fragment.app.FragmentManager$5,target:android.os.Handler $ latencyTime:0,WallTime:553
android.os.MessageQueue.nativePollOnce:-2,android.os.MessageQueue.next:335,android.os.Looper.loop:200,android.app.ActivityThread.main:7848,java.lang.reflect.Method.invoke:-2,com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run:592,com.android.internal.os.ZygoteInit.main:1192, allocWait:-1,ionwait:-1,dstate:-1,sched:-1,iowait:-1 $ $
08-15 18:22:21.312  1170  1385 P Quality : 09 03 info 1723714871996 procName:org.jellyfin.androidtv 1 what:1,target:android.os.Handler callback:androidx.fragment.app.FragmentManager$5,target:android.os.Handler,maxWallTime:748 latencyTime:485,WallTime:0,normalLatencySlowTimes:10 $ $ $ $
08-15 18:22:21.313   719   783 D BMS-BlockMonitorManagerService: ProcessName: org.jellyfin.androidtv
08-15 18:22:21.329  1426  1426 I GoogleInputMethodService: GoogleInputMethodService.onStartInput():1899 onStartInput(EditorInfo{inputType=0x0(NULL) imeOptions=0x0 privateImeOptions=null actionName=UNSPECIFIED actionLabel=null actionId=0 initialSelStart=-1 initialSelEnd=-1 initialCapsMode=0x0 hintText=null label=null packageName=org.jellyfin.androidtv fieldId=2131427516
fieldName=null extras=null hintLocales=[]}, false)
08-15 18:22:21.409  1170  1432 D org.jellyfin.sdk.api.sockets.OkHttpSocketConnection: Receiving (raw) message {"MessageId":"2abdff72fade47d981ae633921331063","Data":{"UserId":"e68cb36acbf940febbc60f40bdb2d6e4","UserDataList":[{"PlaybackPositionTicks":0,"PlayCount":16,"IsFavorite":false,"LastPlayedDate":"2024-08-15T10:21:56.7015281Z","Played":false,"Key":"954","ItemId":"b0b
94e1dc2c8183d6e7fbbdbe8fa1cd7"},{"UnplayedItemCount":21,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"78f59e42-76ce-6860-8973-18b36bb7b6a3","ItemId":"78f59e4276ce6860897318b36bb7b6a3"}]},"MessageType":"UserDataChanged"}
08-15 18:22:21.916  1170  1170 I org.jellyfin.sdk.api.ktor.KtorClient: GET http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7/Similar?limit=20&fields=PrimaryImageAspectRatio&fields=DisplayPreferencesId&fields=ChildCount
08-15 18:22:22.215  1170  1170 I jellyfin-apiclient: Response received from: http://192.168.137.1:8096/Sessions/Playing/Stopped
08-15 18:22:22.252  1170  1170 I org.jellyfin.sdk.api.ktor.KtorClient: GET http://192.168.137.1:8096/Items/b0b94e1d-c2c8-183d-6e7f-bbdbe8fa1cd7
08-15 18:22:22.252  1426  1426 I GoogleInputMethodService: GoogleInputMethodService.onStartInput():1899 onStartInput(EditorInfo{inputType=0x0(NULL) imeOptions=0x0 privateImeOptions=null actionName=UNSPECIFIED actionLabel=null actionId=0 initialSelStart=-1 initialSelEnd=-1 initialCapsMode=0x0 hintText=null label=null packageName=org.jellyfin.androidtv fieldId=-1
fieldName=null extras=null hintLocales=[]}, false)

FFmpeg logs

No response

Media info of the file

General
Unique ID                                : 199092271658267263624334183602017517043 (0x95C7C6DA491B4E5A3C38AECBDD23BDF3)
Complete name                            : G:\_JellyfinMovies\Mission - Impossible (1996)\Mission - Impossible (1996).mkv
Format                                   : Matroska
Format version                           : Version 4
File size                                : 14.0 GiB
Duration                                 : 1 h 50 min
Overall bit rate                         : 18.2 Mb/s
Frame rate                               : 23.976 FPS
Movie name                               : Mission: Impossible
Encoded date                             : 2018-09-03 09:32:14 UTC
Writing application                      : mkvmerge v26.0.0 ('In The Game') 64-bit
Writing library                          : libebml v1.3.6 + libmatroska v1.4.9

Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L5@Main
HDR format                               : SMPTE ST 2086, HDR10 compatible
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 1 h 50 min
Bit rate                                 : 17.5 Mb/s
Width                                    : 3 840 pixels
Height                                   : 1 600 pixels
Display aspect ratio                     : 2.40:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits
Bits/(Pixel*Frame)                       : 0.119
Stream size                              : 13.5 GiB (96%)
Writing library                          : x265 2.8+40-0106f9f2f867:[Windows][GCC 7.3.0][64 bit] 10bit
Encoding settings                        : cpuid=1111039 / frame-threads=3 / numa-pools=8 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=3840x1600 / interlace=0 / total-frames=158552 / level-idc=0 / high-tier=1 / uhd-bd=0 / ref=4 / no-allow-non-conformance / repeat-headers / annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=23 / keyint=250 / gop-lookahead=0 / bframes=4 / b-adapt=2 / b-pyramid / bframe-bias=0 / rc-lookahead=25 / lookahead-slices=4 / scenecut=40 / radl=0 / no-intra-refresh / ctu=64 / min-cu-size=8 / rect / no-amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=2 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=3 / limit-refs=3 / limit-modes / me=3 / subme=3 / merange=57 / temporal-mvp / weightp / no-weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=4 / no-early-skip / rskip / no-fast-intra / no-tskip-fast / no-cu-lossless / no-b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=2.00 / psy-rdoq=1.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=abr / bitrate=17500 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=2 / cplxblur=20.0 / qblur=0.5 / ipratio=1.40 / pbratio=1.30 / aq-mode=3 / aq-strength=1.00 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / no-const-vbv / sar=0 / overscan=0 / videoformat=5 / range=0 / colorprim=9 / transfer=16 / colormatrix=9 / chromaloc=0 / display-window=0 / master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1) / max-cll=0,0 / min-luma=0 / max-luma=1023 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / no-opt-cu-delta-qp / aq-motion / hdr / hdr-opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level=5 / scale-factor=0 / refine-intra=0 / refine-inter=0 / refine-mv=0 / no-limit-sao / ctu-info=0 / no-lowpass-dct / refine-mv-type=0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant
Mastering display color primaries        : Display P3
Mastering display luminance              : min: 0.0001 cd/m2, max: 1000 cd/m2

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : A_AAC-2
Duration                                 : 1 h 50 min
Bit rate                                 : 662 kb/s
Channel(s)                               : 6 channels
Channel layout                           : C L R Ls Rs LFE
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Delay relative to video                  : 20 ms
Stream size                              : 521 MiB (4%)
Language                                 : English
Default                                  : Yes
Forced                                   : No

Text #1
ID                                       : 3
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 45 min
Bit rate                                 : 7 892 b/s
Frame rate                               : 0.174 FPS
Count of elements                        : 1103
Stream size                              : 5.95 MiB (0%)
Language                                 : English
Default                                  : No
Forced                                   : No

Text #2
ID                                       : 4
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 min 30 s
Bit rate                                 : 5 406 b/s
Frame rate                               : 0.221 FPS
Count of elements                        : 20
Stream size                              : 59.6 KiB (0%)
Title                                    : Forced
Language                                 : English
Default                                  : No
Forced                                   : Yes

Text #3
ID                                       : 5
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 368 b/s
Frame rate                               : 0.096 FPS
Count of elements                        : 630
Stream size                              : 4.22 MiB (0%)
Language                                 : Danish
Default                                  : No
Forced                                   : No

Text #4
ID                                       : 6
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 027 b/s
Frame rate                               : 0.098 FPS
Count of elements                        : 643
Stream size                              : 3.95 MiB (0%)
Language                                 : Dutch
Default                                  : No
Forced                                   : No

Text #5
ID                                       : 7
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 4 908 b/s
Frame rate                               : 0.103 FPS
Count of elements                        : 682
Stream size                              : 3.86 MiB (0%)
Language                                 : Finnish
Default                                  : No
Forced                                   : No

Text #6
ID                                       : 8
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 6 687 b/s
Frame rate                               : 0.152 FPS
Count of elements                        : 1004
Stream size                              : 5.25 MiB (0%)
Language                                 : French
Default                                  : No
Forced                                   : No

Text #7
ID                                       : 9
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 45 min
Bit rate                                 : 7 538 b/s
Frame rate                               : 0.159 FPS
Count of elements                        : 1005
Stream size                              : 5.69 MiB (0%)
Language                                 : German
Default                                  : No
Forced                                   : No

Text #8
ID                                       : 10
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 min 30 s
Bit rate                                 : 6 358 b/s
Frame rate                               : 0.220 FPS
Count of elements                        : 20
Stream size                              : 70.4 KiB (0%)
Title                                    : Forced
Language                                 : German
Default                                  : No
Forced                                   : No

Text #9
ID                                       : 11
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 680 b/s
Frame rate                               : 0.100 FPS
Count of elements                        : 661
Stream size                              : 4.46 MiB (0%)
Language                                 : Italian
Default                                  : No
Forced                                   : No

Text #10
ID                                       : 12
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 45 min
Bit rate                                 : 4 689 b/s
Frame rate                               : 0.144 FPS
Count of elements                        : 910
Stream size                              : 3.54 MiB (0%)
Language                                 : Japanese
Default                                  : No
Forced                                   : No

Text #11
ID                                       : 13
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 505 b/s
Frame rate                               : 0.094 FPS
Count of elements                        : 622
Stream size                              : 4.32 MiB (0%)
Language                                 : Norwegian Bokmal
Default                                  : No
Forced                                   : No

Text #12
ID                                       : 14
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 516 b/s
Frame rate                               : 0.135 FPS
Count of elements                        : 892
Stream size                              : 4.33 MiB (0%)
Language                                 : Portuguese
Default                                  : No
Forced                                   : No

Text #13
ID                                       : 15
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 287 b/s
Frame rate                               : 0.096 FPS
Count of elements                        : 633
Stream size                              : 4.15 MiB (0%)
Language                                 : Spanish
Default                                  : No
Forced                                   : No

Text #14
ID                                       : 16
Format                                   : VobSub
Muxing mode                              : zlib
Codec ID                                 : S_VOBSUB
Codec ID/Info                            : Picture based subtitle format used on DVDs
Duration                                 : 1 h 49 min
Bit rate                                 : 5 173 b/s
Frame rate                               : 0.087 FPS
Count of elements                        : 572
Stream size                              : 4.06 MiB (0%)
Language                                 : Swedish
Default                                  : No
Forced                                   : No

Menu
00:00:00.000                             : en:Chapter 01
00:03:01.139                             : en:Chapter 02
00:10:44.894                             : en:Chapter 03
00:26:43.977                             : en:Chapter 04
00:32:21.147                             : en:Chapter 05
00:39:50.513                             : en:Chapter 06
00:49:39.309                             : en:Chapter 07
00:55:45.800                             : en:Chapter 08
01:12:25.883                             : en:Chapter 09
01:18:34.543                             : en:Chapter 10
01:28:14.664                             : en:Chapter 11
01:38:06.630                             : en:Chapter 12
01:44:02.945                             : en:Chapter 13

Application version

0.17.3

Device information

TCL Smart TV Pro 65C645

Android version

Android 11

Jellyfin server version

10.9.9

salty-sweet commented 3 months ago

Also mentionworthy:

I have tried using several external players to extensively diagnose the issue. So far only VLC and TCL's built-in Media Player plays in surround sound audio.

I'd love to not use either of them due to their subtitle sizing issues.

Chuckame commented 3 months ago

Same here, true HD atmos 7.1 is played as pcm, while on plex it plays as DD+. Also played as pcm with vlc even if audio pass-through enabled

nielsvanvelzen commented 3 months ago

When you say this worked fine in 0.16.11, did you use exoplayer as video player or change it to libvlc?

salty-sweet commented 3 months ago

When you say this worked fine in 0.16.11, did you use exoplayer as video player or change it to libvlc?

I only used ExoPlayer back in 0.16.11 as libvlc would occasionally have synchronization issues.

videodisco commented 3 months ago

I believe I have the same issue. Since the new update my Denon receiver now displays audio as "multi-in" when playing truehd, dd, or dts content instead of the appropriate codec when direct playing source videos. Which means it is coming as PCM. The audio still comes as surround but I believe jellyfin is decoding it instead of doing pass thru to the receiver. When I use VLC player the audio is passed thru correctly.

However I found a work around that temporarily fixes it. In playback settings, change the audio setting from direct to downmix to stereo and back to direct. Then start the movie/show. Sometimes it will start passing audio thru correctly. If not, then I select a second audio track and switch back. This extra step always fixes it. If the source doesn't have a second audio track, seems like lowering bitrate to switch to transcoding and raising it back to direct also fixes it.

Based on this work around, it seems like jellyfin gets stuck in decoding the audio instead of passing it thru.

jjmirks commented 3 months ago

I'm having this issue too, switching the audio track usually fixes the stereo issue but EAC3 still gets transcoded to AAC. If I play with an external player no transcoding takes place.

jjmirks commented 3 months ago

It looks like the PCM / AAC issue is related to #3528 After turning off refresh rate switching the correct audio codec is used

salty-sweet commented 3 months ago

Following @videodisco's comment, the issue that I am experiencing is that Jellyfin outputs Stereo PCM while theirs outputs to be Surround PCM. Despite that, I still tried their temporary fix:

So unfortunately in my situation, the said temporary fix did NOT work.

I didn't have Refresh Rate Switching enabled in any way, so @jjmirks referencing Refresh Rate Switching wouldn't really fit my issue. I tried to change the values though, thinking it would make a change, but I can confidently say it doesn't change anything for me.

I appreciate these comments as I've never thought of changing other settings in my Jellyfin AndroidTV assuming they don't do much. Thanks!

salty-sweet commented 3 months ago

I did further manual diagnostic tests in my free time. Multiple types of playbacks involving different types of audio codecs and channel count, using different test files I sourced online and ones I made myself using FFMPEG.

Hardware: Yamaha HTR-2071, TCL Smart TV Pro 65C645 Codecs tested: AAC, PCM (S16LE), AC3, E-AC3, E-AC3 with Atmos metadata, DTS, DTS-MA, DTS-MA with DTS:X metadata Channel counts tested: Stereo (2), 5.1 (6), 7.1 (8; but AVR downstreams them to 6) Direct Audio: Enabled BitStreaming Support: Enabled for Dolby and DTS audio Downmixing: Disabled

Results:

🟩 - successfully played back as surround sound 🟨 - cannot not play at all 🟥 - fails to play as surround sound; only stereo

Audio Codec Channel Count Additional Notes
🟩 * 2 Stereo audio streams always work.
🟥 AAC 6 / 8 Only Stereo AAC works.
🟥 PCM 6 / 8 Only Stereo PCM works.
🟩 AC3 6
🟩 E-AC3 6 / 8
🟨 E-AC3 + Atmos * Can't play. Hardware incompatibility.
🟩 DTS 6
🟩 DTS-MA 6 / 8
🟨 DTS-MA + DTS:X * Can't play. Hardware incompatibility.

I did the testing a week ago on JF AndroidTV v0.17.3 with JF Server v10.9.9. I updated to JF AndroidTV v0.17.4 and JF Server v10.9.10, still the same results.

I may or may have some things done wrong here, but I'm open to changes or suggestions to improve my testing.

MichaelRUSF commented 3 months ago

@salty-sweet This is a limitation of running apps internally on the TV. Internal apps are limited to ARC capabilities: 5.1 compressed audio and 2.0 uncompressed. When manufacturers advertise Dolby Atmos, PCM 7.1, DTS:X, etc., these standards are for external devices connected via eARC, not for apps running directly from your TV.

You can only get these to play back correctly if you use an external HDMI device such as an Nvidia Shield or Amazon Fire Stick connected via eARC. The client doesn't make that distinction, so it may send audio formats that are incompatible with your connection method.

I have proposed a PR that will add an "SPDIF" option for situations like this, you can test it out here. Download the artifact and sideload the APK onto your TV. In Playback - Audio output, select the SPDIF option.

Note: Default media apps usually can play uncompressed audio with more than 2 channels by converting it to AC3.

salty-sweet commented 3 months ago

@MichaelRUSF I looked more into the HDMI eARC/ARC capabilities and limitations you've mentioned, and I found something I overlooked: My Yamaha HTR-2071 AV Receiver is only capable of ARC while my TCL 65C645 AndroidTV has eARC capabilities.

I guess this explains why Jellyfin can still play at the start of my test files that have DTS-MA + DTS:X audio tracks before freezing or crashing completely. Jellyfin would only take the TV's capabilities without considering what audio device the TV outputs to. Shouldn't Jellyfin check both to intelligently choose what's best to do with reported TV/Device capabilities and Digital audio connection details?

I'd love to test your PR's fix for this but do I need to switch to a S/PDIF connection? I only have HDMI as of the moment. Do tell if I can still do the testing with only an HDMI cable.

Man, it gives a whole lot of sense to my problem, but I'm still somewhat confused as to why AAC 5.1, being an uncompressed codec, would be bitstreamed as DD or DD+ to my AV receiver back in JF AndroidTV v0.16.11. JF Server would report "Direct Play" back then too.

MichaelRUSF commented 3 months ago

I'd love to test your PR's fix for this but do I need to switch to a S/PDIF connection? I only have HDMI as of the moment. Do tell if I can still do the testing with only an HDMI cable.

You don't need to switch any cables. That's just what the setting is called in the app. Right now, there's only a direct and stereo option setting in the app. This PR adds a new option called "SPDIF".

salty-sweet commented 3 months ago

So I downloaded and tested the build artifact from #3936. The added SPDIF Audio Output option works and transcodes AAC 6/8 channel audio tracks into AC3, but with a few small issues though.

EDIT: All subtitles are burned in when using SPDIF option, only that. Direct and Downmix to Stereo doesn't.

For clarification, these are relating to the build artifact from #3936.

MichaelRUSF commented 3 months ago
  1. Direct streaming is the expected behavior when the audio format isn't compatible, but the video stream is. The video stream is copied while the audio stream is being transcoded. If you check your ffmpeg logs you'll see something like this:
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (aac (native) -> ac3 (native))
Stream #0:0: Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbr, 90k tbn (default)
Stream #0:1: Audio: ac3, 48000 Hz, 5.1(side), fltp, 320 kb/s (default)
  1. Since this is built on the master branch, your experience will differ from the current release due to unreleased code changes. For example, external subtitles currently aren't supported in the master branch, while they are on the release branch, as outlined in #3825. So they will get burnt in.

I mainly want to verify if you're now receiving surround sound for AAC/PCM 6/8 channel audio. Since the subtitle code has changed, tests should exclude subtitle files as a variable.

salty-sweet commented 3 months ago

I mainly want to verify if you're now receiving surround sound for AAC/PCM 6/8 channel audio. Since the subtitle code has changed, tests should exclude subtitle files as a variable.

Yeah, surround sound works and AAC 6/8 channel audio is received by my AV receiver as AC3/Dolby Digital, but then again:

Only AAC audio tracks with HE-AAC profile would sound really bad, like as if the transcoded bitrate was very low. LC profile AAC audio tracks are unaffected by this.

svemonix commented 2 months ago

This is a limitation of running apps internally on the TV. Internal apps are limited to ARC capabilities: 5.1 compressed audio and 2.0 uncompressed. When manufacturers advertise Dolby Atmos, PCM 7.1, DTS:X, etc., these standards are for external devices connected via eARC, not for apps running directly from your TV.

Sorry but this is incorrect. I have a Philips Android TV and I can play DD+ Atmos on all TV apps (Jellyfin, Plex, Kodi, Max, Prime, Apple TV+, ...). DD+ Atmos doesn't even require eARC - ARC is good enough.

Actually, my TV can even decode TrueHD Atmos internally but can't of course pass it through due to ARC limitations.

MichaelRUSF commented 2 months ago

EAC-3 with JOC (Dolby Digital Plus with Dolby Atmos), the lossy compression variant of Dolby Atmos, is not what I was referring to in that statement.

svemonix commented 2 months ago

Sorry but you stated that ARC is limited to 5.1 compressed audio which is not the case since EAC3 can do 7.1 + Atmos.

You also stated that internal TV app wouldn't play TrueHD Atmos which is not necessarily true since there are TVs with embedded TrueHD Atmos decoder.

For instance my TV itself supports: • Dolby Atmos (DDP/DTHD) • Dolby MS12 V2.3 • Dolby AC-4 • DTS-HD (M6) • Dolby Atmos Virtualizer

nextlooper42 commented 1 week ago

ffmpeg implementation of EAC3 have issues on Receivers (sound is glitching/going on and off), so would be nice to either have a choice between AC3 and EAC3 or just use AC3 transcode for full compatibility (also with older ARC) although with 5.1 channel limitation.