immich-app / immich

High performance self-hosted photo and video management solution.
https://immich.app
GNU Affero General Public License v3.0
51.34k stars 2.72k forks source link

Video playback on Android no longer works #6897

Closed JVT038 closed 7 months ago

JVT038 commented 9 months ago

The bug

When trying to play a video, I only hear the sound, but don't see the video itself.

I've enabled video transcoding and I'm using the QSV API. Video transcoding with QSV works perfectly fine in Jellyfin, so I'd assume it should work with Immich as well. Furthermore, it has worked pretty well, so I don't think that's the issue here.

I have a Fairphone 4 which has the Qualcomm Snapdragon 750G (SM7225) as SoC and the Qualcomm Adreno 619 as integrated GPU in the SoC. HEVC playback with Jellyfin works directly without transcoding on the phone and I assume H.264 playback would work as well.

My OS is Android 12 with /e/OS 1.19.1-s-20240110372023-stable-FP4. The /e/OS thing means that I don't have Google Play Services, but I got MicroG, which emulates / replaces the Google Play Services. Idk if that's relevant in the playback issue here.

The OS that Immich Server is running on

DSM 7.2

Version of Immich Server

v1.94.1

Version of Immich Mobile App

v1.94.1

Platform with the issue

Your docker-compose.yml content

version: "3.8"

name: immich

networks:
  traefik_proxy:
    external: true
    name: traefik_proxy

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    command: [ "start.sh", "immich" ]
    networks:
      - traefik_proxy
      - default
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - sockets:/sockets
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - database
    restart: always
    labels:
      traefik.enable: "true"
      traefik.docker.network: traefik_proxy
      traefik.http.services.immich-svc.loadbalancer.server.port: "3001"
      traefik.http.routers.immich-rtr.rule: "Host(`immich.$DOMAINNAME`)"
      traefik.http.routers.immich-rtr.priority: 10
      traefik.http.routers.immich-rtr.service: immich-svc
      traefik.http.routers.immich-rtr.middlewares: chain-basic@file
      traefik.http.routers.immich-rtr.tls: true
      traefik.http.routers.immich-rtr.tls.certresolver: dns-cloudflare
      traefik.http.routers.immich-rtr.entrypoints: https      

  immich-microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:release
    command: [ "start.sh", "microservices" ]
    # extends:
    #   file: hwaccel.yml
    #   service: hwaccel
    networks:
      - default
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - sockets:/sockets
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - database
    restart: always
    devices:
      - /dev/dri:/dev/dri

  immich-machine-learning:
    build:
      context: $DOCKERDIR/immich/immich-ml
      dockerfile: Dockerfile
    container_name: immich_machine_learning
    networks:
      - default
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - model-cache:/cache
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2
    restart: always
    networks:
      - default
    command: redis-server /etc/redis.conf
    volumes:
      - sockets:/sockets
      - $DOCKERDIR/immich/redis.conf:/etc/redis.conf
      - /etc/TZ:/etc/timezone:ro
      - $DOCKERDIR/immich/redisdb:/db

  database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.1.11
    user: 1026:100
    command: postgres -c unix_socket_directories='/var/run/postgresql/,/sockets/'
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      PG_DATA: /var/lib/postgresql/data
      PGPORT: ${DB_PORT}
    volumes:
      - $DOCKERDIR/immich/pgdata:/var/lib/postgresql/data
      - sockets:/sockets
    restart: always

volumes:
  sockets:
    external: true
  model-cache:

Your .env content

###################################################################################
# Database
###################################################################################

# DB_HOSTNAME=immich_postgres
DB_HOSTNAME=/sockets
DB_USERNAME=postgres
DB_PASSWORD=password
DB_DATABASE_NAME=immich
# Optional Database settings:
DB_PORT=5433

###################################################################################
# Redis
###################################################################################
# REDIS_HOSTNAME=immich_redis
# Optional Redis settings:
# REDIS_PORT=6379
# REDIS_DBINDEX=0
REDIS_PASSWORD="password"
REDIS_SOCKET=/sockets/immich_redis.sock

###################################################################################
# Upload File Config
###################################################################################
UPLOAD_LOCATION=$DOCKERDIR/immich/gallery

###################################################################################
# JWT SECRET
###################################################################################
JWT_SECRET=secret

TYPESENSE_API_KEY=apikey

Reproduction steps

1. Open a video on android
2. See black screen

Additional information

The logs I found after running adb logcat:

--------- beginning of main
02-03 21:40:52.073  2330  2805 D BufferPoolAccessor2.0: evictor expired: 1, evicted: 1
02-03 21:41:31.796  2330  2330 I ExoPlayerImpl: Init d8f4b44 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:31.823  2330  2330 I ExoPlayerImpl: Init a607147 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:31.830  2330  5061 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.835  2330  2330 I ExoPlayerImpl: Release d8f4b44 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32] [goog.exo.core, goog.exo.exoplayer, goog.exo.decoder, goog.exo.datasource, goog.exo.extractor]
02-03 21:41:31.837  2330  5065 I OMXClient: IOmx service obtained
02-03 21:41:31.846  2330  5063 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.851  2330  5069 I OMXClient: IOmx service obtained
02-03 21:41:31.864  2330  5064 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.865  2330  5061 W MediaCodecRenderer: Preferred decoder instantiation failed. Sleeping for 50ms then retrying.
02-03 21:41:31.875  2330  5064 D MediaCodec: flushMediametrics
02-03 21:41:31.876  2330  5064 D MediaCodec: flushMediametrics
02-03 21:41:31.876  2330  5068 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.877  2330  5068 D MediaCodec: flushMediametrics
02-03 21:41:31.877  2330  5068 D SurfaceUtils: connecting to surface 0xb40000752c2dcbf0, reason connectToSurface
02-03 21:41:31.877  2330  5068 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385939
02-03 21:41:31.877  2330  5068 D SurfaceUtils: disconnecting from surface 0xb40000752c2dcbf0, reason connectToSurface(reconnect)
02-03 21:41:31.877  2330  5068 D SurfaceUtils: connecting to surface 0xb40000752c2dcbf0, reason connectToSurface(reconnect)
02-03 21:41:31.887  2330  5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:31.896  2330  5069 D SurfaceUtils: set up nativeWindow 0xb40000752c2dcbf0 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:31.903  2330  5063 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type audio
02-03 21:41:31.907  2330  5079 D CCodec  : allocate(c2.android.aac.decoder)
02-03 21:41:31.910  2330  5079 I CCodec  : setting up 'default' as default (vendor) store
02-03 21:41:31.912  2330  5079 I CCodec  : Created component [c2.android.aac.decoder]
02-03 21:41:31.912  2330  5079 D CCodecConfig: read media type: audio/mp4a-latm
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
02-03 21:41:31.914  2330  5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
02-03 21:41:31.915  2330  5061 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.916  2330  5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:31.916  2330  5079 D CCodecConfig: c2 config diff is Dict {
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 coded.aac-packaging.value = 0
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 coded.bitrate.value = 64000
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 coded.pl.level = 0
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 coded.pl.profile = 8192
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::i32 coding.drc.album-mode.value = 0
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::float coding.drc.attenuation-factor.value = 1
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::float coding.drc.boost-factor.value = 1
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::i32 coding.drc.compression-mode.value = 3
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::i32 coding.drc.effect-type.value = 3
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::float coding.drc.encoded-level.value = 0.25
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::float coding.drc.reference-level.value = -16
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 input.buffers.max-size.value = 8192
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 input.delay.value = 0
02-03 21:41:31.916  2330  5079 D CCodecConfig:   string input.media-type.value = "audio/mp4a-latm"
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 output.delay.value = 2
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::float output.drc.output-loudness.value = 0.25
02-03 21:41:31.916  2330  5079 D CCodecConfig:   string output.media-type.value = "audio/raw"
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 raw.channel-count.value = 1
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 raw.max-channel-count.value = 8
02-03 21:41:31.916  2330  5079 D CCodecConfig:   c2::u32 raw.sample-rate.value = 44100
02-03 21:41:31.916  2330  5079 D CCodecConfig: }
02-03 21:41:31.919  2330  5079 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.919  2330  5079 D MediaCodec: flushMediametrics
02-03 21:41:31.919  2330  5079 D CCodec  : [c2.android.aac.decoder] buffers are bound to CCodec for this session
02-03 21:41:31.919  2330  5079 D CCodecConfig: no c2 equivalents for log-session-id
02-03 21:41:31.919  2330  5079 D CCodecConfig: no c2 equivalents for flags
02-03 21:41:31.920  2330  5079 D CCodecConfig: config failed => CORRUPTED
02-03 21:41:31.920  2330  5079 D CCodecConfig: c2 config diff is   c2::u32 raw.channel-count.value = 2
02-03 21:41:31.920  2330  5079 D CCodecConfig:   c2::u32 raw.sample-rate.value = 48000
02-03 21:41:31.920  2330  5079 W Codec2Client: query -- param skipped: index = 1107298332.
02-03 21:41:31.920  2330  5079 D CCodec  : client requested max input size 398, which is smaller than what component recommended (8192); overriding with component recommendation.
02-03 21:41:31.920  2330  5079 W CCodec  : This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
02-03 21:41:31.920  2330  5079 D CCodec  : setup formats input: AMessage(what = 0x00000000) = {
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-album-mode = 0
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-boost-level = 127
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-cut-level = 127
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-effect-type = 3
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-encoded-target-level = -1
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-max-output-channel_count = 8
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-target-ref-level = 64
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t bitrate = 64000
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t channel-count = 2
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t level = 0
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t max-input-size = 8192
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t max-output-channel-count = 8
02-03 21:41:31.920  2330  5079 D CCodec  :   string mime = "audio/mp4a-latm"
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t profile = 2
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t sample-rate = 48000
02-03 21:41:31.920  2330  5079 D CCodec  : }
02-03 21:41:31.920  2330  5079 D CCodec  : setup formats output: AMessage(what = 0x00000000) = {
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-album-mode = 0
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-boost-level = 127
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-cut-level = 127
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-effect-type = 3
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-drc-output-loudness = -1
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-encoded-target-level = -1
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-max-output-channel_count = 8
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t aac-target-ref-level = 64
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t channel-count = 2
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t max-output-channel-count = 8
02-03 21:41:31.920  2330  5079 D CCodec  :   string mime = "audio/raw"
02-03 21:41:31.920  2330  5079 D CCodec  :   int32_t sample-rate = 48000
02-03 21:41:31.920  2330  5079 D CCodec  : }
02-03 21:41:31.920  2330  5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:31.921  2330  5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:31.924  2330  5082 I OMXClient: IOmx service obtained
02-03 21:41:31.925  2330  5079 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:31.925  2330  5079 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:31.925  2330  5079 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:31.926  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] Created input block pool with allocatorID 16 => poolID 26 - OK (0)
02-03 21:41:31.927  2330  2726 D BufferPoolAccessor2.0: bufferpool2 0xb40000748c334b98 : 0(0 size) total buffers - 0(0 size) used buffers - 24/29 (recycle/alloc) - 5/24 (fetch/transfer)
02-03 21:41:31.927  2330  2726 D BufferPoolAccessor2.0: Destruction - bufferpool2 0xb40000748c334b98 cached: 0/0M, 0/0% in use; allocs: 29, 83% recycled; transfers: 24, 79% unfetched
02-03 21:41:31.927  2330  5079 I CCodecBufferChannel: [c2.android.aac.decoder#336] Created output block pool with allocatorID 16 => poolID 827 - OK
02-03 21:41:31.927  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] Configured output block pool ids 827 => OK
02-03 21:41:31.927  2330  2726 D BufferPoolAccessor2.0: bufferpool2 0xb40000748c2f9e68 : 0(0 size) total buffers - 0(0 size) used buffers - 696/701 (recycle/alloc) - 5/696 (fetch/transfer)
02-03 21:41:31.927  2330  2726 D BufferPoolAccessor2.0: Destruction - bufferpool2 0xb40000748c2f9e68 cached: 0/0M, 0/0% in use; allocs: 701, 99% recycled; transfers: 696, 99% unfetched
02-03 21:41:31.945  2330  5081 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer: Failed to initialize decoder: OMX.qcom.video.decoder.avc
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:   java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.b.v(Unknown Source:14)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.b.p(Unknown Source:0)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.k.a(Unknown Source:58)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at q3.s.w(Unknown Source:28)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946  2330  5061 W MediaCodecRenderer:       at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer: Video codec error
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:   q3.s$b: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1])
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.P0(Unknown Source:146)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.w(Unknown Source:28)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:   Caused by: java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.b.v(Unknown Source:14)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.b.p(Unknown Source:0)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.k.a(Unknown Source:58)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946  2330  5061 E MediaCodecVideoRenderer:       ... 11 more
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal: Playback error
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:   z2.r: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1]), format_supported=YES
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at z2.k1.handleMessage(Unknown Source:344)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:   Caused by: q3.s$b: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1])
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.P0(Unknown Source:146)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.w(Unknown Source:28)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       ... 4 more
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:   Caused by: java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.b.v(Unknown Source:14)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.b.p(Unknown Source:0)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.k.a(Unknown Source:58)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946  2330  5061 E ExoPlayerImplInternal:       ... 11 more
02-03 21:41:31.957  2330  5081 D MediaCodec: flushMediametrics
02-03 21:41:31.958  2330  5081 D MediaCodec: flushMediametrics
02-03 21:41:31.985  2330  5068 W MediaCodec: mapFormat: no mediaType information
02-03 21:41:32.099  2330  2330 I ExoPlayerImpl: Init 39394b [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:32.120  2330  2330 I ExoPlayerImpl: Release a607147 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32] [goog.exo.core, goog.exo.exoplayer, goog.exo.decoder, goog.exo.datasource, goog.exo.extractor]
02-03 21:41:32.136  2330  5091 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:32.136  2330  5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.137  2330  5079 D CCodecBuffers: [c2.android.aac.decoder#336:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
02-03 21:41:32.138  2330  5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.138  2330  5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.138  2330  5079 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:32.138  2330  5079 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:32.138  2330  5079 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:32.140  2330  5068 D SurfaceUtils: connecting to surface 0xb40000752c3cd500, reason connectToSurface
02-03 21:41:32.140  2330  5068 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385940
02-03 21:41:32.140  2330  5068 D SurfaceUtils: disconnecting from surface 0xb40000752c3cd500, reason connectToSurface(reconnect)
02-03 21:41:32.140  2330  5068 D SurfaceUtils: connecting to surface 0xb40000752c3cd500, reason connectToSurface(reconnect)
02-03 21:41:32.141  2330  5069 D SurfaceUtils: set up nativeWindow 0xb40000752c3cd500 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:32.142  2330  5068 D SurfaceUtils: disconnecting from surface 0xb40000752c2dcbf0, reason disconnectFromSurface
02-03 21:41:32.142  2330  5068 E Surface : freeAllBuffers: 12 buffers were freed while being dequeued!
02-03 21:41:32.142  2330  5095 I OMXClient: IOmx service obtained
02-03 21:41:32.143  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144  2330  5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.148  2330  5079 I hw-BpHwBinder: onLastStrongRef automatically unlinking death recipients
02-03 21:41:32.148  2330  5079 D MediaCodec: flushMediametrics
02-03 21:41:32.148  2330  5079 D MediaCodec: flushMediametrics
02-03 21:41:32.161  2330  5093 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:32.161  2330  5093 D MediaCodec: flushMediametrics
02-03 21:41:32.161  2330  5093 D SurfaceUtils: connecting to surface 0xb40000752c2efe80, reason connectToSurface
02-03 21:41:32.161  2330  5093 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385941
02-03 21:41:32.161  2330  5093 D SurfaceUtils: disconnecting from surface 0xb40000752c2efe80, reason connectToSurface(reconnect)
02-03 21:41:32.161  2330  5093 D SurfaceUtils: connecting to surface 0xb40000752c2efe80, reason connectToSurface(reconnect)
02-03 21:41:32.167  2330  5091 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.171  2330  5068 D SurfaceUtils: disconnecting from surface 0xb40000752c3cd500, reason disconnectFromSurface
02-03 21:41:32.175  2330  5068 D MediaCodec: flushMediametrics
02-03 21:41:32.175  2330  5068 D MediaCodec: flushMediametrics
02-03 21:41:32.177  2330  5095 D SurfaceUtils: set up nativeWindow 0xb40000752c2efe80 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:32.181  2330  5091 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type audio
02-03 21:41:32.187  2330  5102 D CCodec  : allocate(c2.android.aac.decoder)
02-03 21:41:32.188  2330  5102 I CCodec  : setting up 'default' as default (vendor) store
02-03 21:41:32.191  2330  5102 I CCodec  : Created component [c2.android.aac.decoder]
02-03 21:41:32.191  2330  5102 D CCodecConfig: read media type: audio/mp4a-latm
02-03 21:41:32.192  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
02-03 21:41:32.192  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
02-03 21:41:32.192  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
02-03 21:41:32.193  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
02-03 21:41:32.193  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
02-03 21:41:32.193  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
02-03 21:41:32.193  2330  5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
02-03 21:41:32.194  2330  5102 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.195  2330  5102 D CCodecConfig: c2 config diff is Dict {
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 coded.aac-packaging.value = 0
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 coded.bitrate.value = 64000
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 coded.pl.level = 0
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 coded.pl.profile = 8192
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::i32 coding.drc.album-mode.value = 0
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::float coding.drc.attenuation-factor.value = 1
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::float coding.drc.boost-factor.value = 1
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::i32 coding.drc.compression-mode.value = 3
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::i32 coding.drc.effect-type.value = 3
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::float coding.drc.encoded-level.value = 0.25
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::float coding.drc.reference-level.value = -16
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 input.buffers.max-size.value = 8192
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 input.delay.value = 0
02-03 21:41:32.195  2330  5102 D CCodecConfig:   string input.media-type.value = "audio/mp4a-latm"
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 output.delay.value = 2
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::float output.drc.output-loudness.value = 0.25
02-03 21:41:32.195  2330  5102 D CCodecConfig:   string output.media-type.value = "audio/raw"
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 raw.channel-count.value = 1
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 raw.max-channel-count.value = 8
02-03 21:41:32.195  2330  5102 D CCodecConfig:   c2::u32 raw.sample-rate.value = 44100
02-03 21:41:32.195  2330  5102 D CCodecConfig: }
02-03 21:41:32.196  2330  5102 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:32.196  2330  5102 D MediaCodec: flushMediametrics
02-03 21:41:32.196  2330  5102 D CCodec  : [c2.android.aac.decoder] buffers are bound to CCodec for this session
02-03 21:41:32.196  2330  5102 D CCodecConfig: no c2 equivalents for log-session-id
02-03 21:41:32.197  2330  5102 D CCodecConfig: no c2 equivalents for flags
02-03 21:41:32.197  2330  5102 D CCodecConfig: config failed => CORRUPTED
02-03 21:41:32.197  2330  5102 D CCodecConfig: c2 config diff is   c2::u32 raw.channel-count.value = 2
02-03 21:41:32.197  2330  5102 D CCodecConfig:   c2::u32 raw.sample-rate.value = 48000
02-03 21:41:32.197  2330  5102 W Codec2Client: query -- param skipped: index = 1107298332.
02-03 21:41:32.197  2330  5102 D CCodec  : client requested max input size 398, which is smaller than what component recommended (8192); overriding with component recommendation.
02-03 21:41:32.197  2330  5102 W CCodec  : This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
02-03 21:41:32.197  2330  5102 D CCodec  : setup formats input: AMessage(what = 0x00000000) = {
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-album-mode = 0
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-boost-level = 127
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-cut-level = 127
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-effect-type = 3
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-encoded-target-level = -1
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-max-output-channel_count = 8
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-target-ref-level = 64
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t bitrate = 64000
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t channel-count = 2
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t level = 0
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t max-input-size = 8192
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t max-output-channel-count = 8
02-03 21:41:32.197  2330  5102 D CCodec  :   string mime = "audio/mp4a-latm"
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t profile = 2
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t sample-rate = 48000
02-03 21:41:32.197  2330  5102 D CCodec  : }
02-03 21:41:32.197  2330  5102 D CCodec  : setup formats output: AMessage(what = 0x00000000) = {
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-album-mode = 0
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-boost-level = 127
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-cut-level = 127
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-effect-type = 3
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-drc-output-loudness = -1
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-encoded-target-level = -1
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-max-output-channel_count = 8
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t aac-target-ref-level = 64
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t channel-count = 2
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t max-output-channel-count = 8
02-03 21:41:32.197  2330  5102 D CCodec  :   string mime = "audio/raw"
02-03 21:41:32.197  2330  5102 D CCodec  :   int32_t sample-rate = 48000
02-03 21:41:32.197  2330  5102 D CCodec  : }
02-03 21:41:32.198  2330  5102 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.200  2330  5091 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.201  2330  5102 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:32.201  2330  5102 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:32.201  2330  5102 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:32.202  2330  5102 D CCodecBufferChannel: [c2.android.aac.decoder#858] Created input block pool with allocatorID 16 => poolID 27 - OK (0)
02-03 21:41:32.203  2330  5102 I CCodecBufferChannel: [c2.android.aac.decoder#858] Created output block pool with allocatorID 16 => poolID 828 - OK
02-03 21:41:32.203  2330  5102 D CCodecBufferChannel: [c2.android.aac.decoder#858] Configured output block pool ids 828 => OK
02-03 21:41:32.266  2330  5093 W MediaCodec: mapFormat: no mediaType information
02-03 21:41:32.285  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:32.321  2330  5091 D AudioTrack: getTimestamp_l(981): device stall time corrected using current time 584847988232938
02-03 21:41:32.804  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:33.305  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:33.807  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:34.291  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:34.810  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:35.293  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:35.794  2330  2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
muava12 commented 9 months ago

I have same issue, so I tried downgrade android apps to 1.93.x, and video playback work. but once I upgrade to 1.94 I gat the same error again..

halphalp commented 9 months ago

I do not have hardware acceleration enabled and am also experiencing this on Android when running the latest version for both the mobile app and server.

JVT038 commented 9 months ago

Update: I previously downloaded and installed Immich from the Github release page, but after reinstalling the app from the Google Play Store instead, the video playback worked! So it's probably related to a difference in the Google Play build vs the GitHub release build.

meichthys commented 9 months ago

Same issue here. Web playback is fine and iOS playback is fine.

alextran1502 commented 9 months ago

@meichthys IF you are using the APK, the fixed version hasn't been uploaded yet

davidezanella commented 8 months ago

Is there an ETA for the fix of this bug? I love Immich but this bug is very annoying.

muava12 commented 7 months ago

it fixed now