Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mobile app throws an error when playing remote videos #8748

Closed
1 of 3 tasks
LauriKem opened this issue Apr 12, 2024 · 9 comments
Closed
1 of 3 tasks

Mobile app throws an error when playing remote videos #8748

LauriKem opened this issue Apr 12, 2024 · 9 comments

Comments

@LauriKem
Copy link

LauriKem commented Apr 12, 2024

The bug

When trying to play a remote video on my Immich mobile application (Android 14, Pixel 8), the application throws an error.

In the UI side, when opening a video, the thumbnail, buffering icon and controls are shown for 1-2 seconds, after which the screen goes gray (with the controls still visible). No audio or video is played.

This happens only when playing videos which are located at the server, not when playing videos existing locally on the phone (even though they are backed up to the server, too).

This also happens only when using the app - by accessing the videos with the mobile browser (Chrome) the videos play OK. The videos play fine also on my computer (Firefox).

I have experienced this issue also with previous Immich server and app versions. The encoding of the video files has not helped with the issue.

From the application logs I can get these details:

  • Message:

FlutterError - Catch all

  • Details:

Exception: PlatformException(VideoError, Video player had error z2.r: Source error, null, null)
Library: widgets library
Context: building Widget-[<{
"id": 24355,
"remoteId": "5efc8cef-5675-47c8-9f26-2c1d468f217a",
"localId": "N/A",
"checksum": "qgNk8YV8kZUO+NZlMrRNxz2cdTQ=",
"ownerId": -7469303263042594039,
"livePhotoVideoId": "N/A",
"stackCount": "null",
"stackParentId": "N/A",
"fileCreatedAt": "2022-08-21 04:00:00.000",
"fileModifiedAt": "2024-01-02 12:32:28.000",
"updatedAt": "2024-01-02 13:20:53.200",
"durationInSeconds": 23,
"type": "AssetType.video",
"fileName": "WhatsApp Video 2022-08-20 at 9.35.44 PM.mp4",
"isFavorite": false,
"isRemote": true,
"storage": "AssetState.remote",
"width": 640,
"height": 352,
"isArchived": false,
"isTrashed": false,
"isReadOnly": false,
"isOffline": false,
}>]

  • From:

#1 AsyncError.value (package:riverpod/src/common.dart:494:0)
#2 VideoViewerPage.build (package:immich_mobile/modules/asset_viewer/views/video_viewer_page.dart:37:0)
#3 _ConsumerState.build (package:flutter_riverpod/src/consumer.dart:476:0)
#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:5592:0)
#5 ConsumerStatefulElement.build (package:flutter_riverpod/src/consumer.dart:539:0)
#6 HookElement.build (package:flutter_hooks/src/framework.dart:438:0)
#7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480:0)
#8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:0)
#9 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:0)
#10 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:0)
#11 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:989:0)
#12 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:0)
#13 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:0)
#14 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:0)
#15 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:0)
#16 _invoke (dart:ui/hooks.dart:312:0)
#17 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:0)
#18 _drawFrame (dart:ui/hooks.dart:283:0)

The OS that Immich Server is running on

Ubuntu Server 22.04.2 LTS

Version of Immich Server

v1.101.0

Version of Immich Mobile App

v1.101.0

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

version: "3.8"

########################### SECRETS
secrets:
  postgres_immich_password:
    file: $SECRETSDIR/postgres_immich_password
  postgres_immich_user:
    file: $SECRETSDIR/postgres_immich_user
  postgres_immich_db:
    file: $SECRETSDIR/postgres_immich_db

########################### SERVICES
services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:v1.101.0
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    command: [ "start.sh", "immich" ]
    volumes:
      - /mnt/immich_share/library:/usr/src/app/upload/library
      - /mnt/immich_share/upload:/usr/src/app/upload/upload
      - /mnt/immich_share/profile:/usr/src/app/upload/profile
      - $APPDATADIR/immich_data/encoded-video:/usr/src/app/upload/encoded-video
      - $APPDATADIR/immich_data/thumbs:/usr/src/app/upload/thumbs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - DB_USERNAME=$IMMICH_POSTGRES_USER
      - DB_PASSWORD=$IMMICH_POSTGRES_PASSWORD
      - DB_DATABASE_NAME=$IMMICH_POSTGRES_DB
      - DB_HOSTNAME=immich_postgres
      - TYPESENSE_API_KEY=$IMMICH_TYPESENSE_API_KEY
      - REDIS_HOSTNAME=immich_redis
      - IMMICH_VERSION=v1.101.0
      - UPLOAD_LOCATION=/mnt/immich_share


  immich-microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:v1.101.0
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    command: [ "start.sh", "microservices" ]
    volumes:
      - /mnt/immich_share/library:/usr/src/app/upload/library
      - /mnt/immich_share/upload:/usr/src/app/upload/upload
      - /mnt/immich_share/profile:/usr/src/app/upload/profile
      - $APPDATADIR/immich_data/encoded-video:/usr/src/app/upload/encoded-video
      - $APPDATADIR/immich_data/thumbs:/usr/src/app/upload/thumbs
      - $APPDATADIR/immich_microservices:/usr/src/app/.reverse-geocoding-dump
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - redis
      - database
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - DB_USERNAME=$IMMICH_POSTGRES_USER
      - DB_PASSWORD=$IMMICH_POSTGRES_PASSWORD
      - DB_DATABASE_NAME=$IMMICH_POSTGRES_DB
      - DB_HOSTNAME=immich_postgres
      - TYPESENSE_API_KEY=$IMMICH_TYPESENSE_API_KEY
      - REDIS_HOSTNAME=immich_redis
      - IMMICH_VERSION=v1.101.0
      - UPLOAD_LOCATION=/mnt/immich_share

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:v1.101.0
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /mnt/immich_share/library:/usr/src/app/upload/library
      - /mnt/immich_share/upload:/usr/src/app/upload/upload
      - /mnt/immich_share/profile:/usr/src/app/upload/profile
      - $APPDATADIR/immich_data/encoded-video:/usr/src/app/upload/encoded-video
      - $APPDATADIR/immich_data/thumbs:/usr/src/app/upload/thumbs
      - $APPDATADIR/immich_machine_learning:/cache
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - DB_USERNAME=$IMMICH_POSTGRES_USER
      - DB_PASSWORD=$IMMICH_POSTGRES_PASSWORD
      - DB_DATABASE_NAME=$IMMICH_POSTGRES_DB
      - DB_HOSTNAME=immich_postgres
      - TYPESENSE_API_KEY=$IMMICH_TYPESENSE_API_KEY
      - REDIS_HOSTNAME=immich_redis
      - IMMICH_VERSION=v1.101.0
      - UPLOAD_LOCATION=/mnt/immich_share

  redis:
    container_name: immich_redis
    image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:51d6c56749a4243096327e3fb964a48ed92254357108449cb6e23999c37773c5
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ

  database:
    container_name: immich_postgres
    image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - POSTGRES_PASSWORD=$IMMICH_POSTGRES_PASSWORD
      - POSTGRES_USER=$IMMICH_POSTGRES_USER
      - POSTGRES_DB=$IMMICH_POSTGRES_DB
      - DB_USERNAME=$IMMICH_POSTGRES_USER
      - DB_PASSWORD=$IMMICH_POSTGRES_PASSWORD
      - DB_DATABASE_NAME=$IMMICH_POSTGRES_DB
      - DB_HOSTNAME=immich_postgres
      - TYPESENSE_API_KEY=$IMMICH_TYPESENSE_API_KEY
      - REDIS_HOSTNAME=immich_redis
      - IMMICH_VERSION=v1.101.0
      - UPLOAD_LOCATION=/mnt/immich_share
    volumes:
      - $APPDATADIR/immich_db:/var/lib/postgresql/data

Your .env content

.env contains only the variables (like $PUID), otherwise all information and data is in the docker-compose above.

Reproduction steps

1. Open the Immich app on mobile
2. Open a video which is available only remotely (cloud icon)
3. Video does not play and the error above is thrown in the logs

Additional information

No response

@LauriKem LauriKem changed the title Mobile app gives error when playing remote videos Mobile app throws an error when playing remote videos Apr 12, 2024
@bo0tzz
Copy link
Member

bo0tzz commented Apr 12, 2024

Are there any errors in the server logs?

@LauriKem
Copy link
Author

Nothing alarming visible in the containers' logs. I can try next week to increase the log level to debug if that would give any new insights. (Currently on default level)

@alextran1502
Copy link
Contributor

Is it possible to share the problematic video?

@LauriKem
Copy link
Author

LauriKem commented Apr 17, 2024

Hi, here's the video (different video but same behavior and bug on each video):

Video file:

4_5766872624361637683.1.mp4

I also took quick screencaptures of playing the video:

Mobile app (does not play):

screen-20240417-094441.mp4

Mobile web browser (plays OK):

screen-20240417-095248.mp4

Details for this video error in app:

Exception: PlatformException(VideoError, Video player had error z2.r: Source error, null, null) Library: widgets library Context: building Widget-[<{ "id": 511, "remoteId": "418c8d8b-079e-4a76-8d2a-cb02bd509102", "localId": "N/A", "checksum": "/1uFmYVhhMPT7qRt3sWLlSFRm7Y=", "ownerId": -7469303263042594039, "livePhotoVideoId": "N/A", "stackCount": "null", "stackParentId": "N/A", "fileCreatedAt": "2020-07-05 17:05:45.000", "fileModifiedAt": "2024-01-02 19:22:21.000", "updatedAt": "2024-04-17 09:43:44.163", "durationInSeconds": 9, "type": "AssetType.video", "fileName": "4_5766872624361637683.mp4", "isFavorite": true, "isRemote": true, "storage": "AssetState.remote", "width": 720, "height": 1280, "isArchived": false, "isTrashed": false, "isReadOnly": false, "isOffline": false, }>]

Stack trace for this video error in app:
#1 AsyncError.value (package:riverpod/src/common.dart:494:0) #2 VideoViewerPage.build (package:immich_mobile/modules/asset_viewer/views/video_viewer_page.dart:37:0) #3 _ConsumerState.build (package:flutter_riverpod/src/consumer.dart:476:0) #4 StatefulElement.build (package:flutter/src/widgets/framework.dart:5592:0) #5 ConsumerStatefulElement.build (package:flutter_riverpod/src/consumer.dart:539:0) #6 HookElement.build (package:flutter_hooks/src/framework.dart:438:0) #7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480:0) #8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:0) #9 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:0) #10 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:0) #11 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:989:0) #12 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:0) #13 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:0) #14 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:0) #15 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:0) #16 _invoke (dart:ui/hooks.dart:312:0) #17 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:0) #18 _drawFrame (dart:ui/hooks.dart:283:0)

@LexorELX
Copy link

I have exactly the same problem. I would be glad if the developers help solve it.

@rwells1703
Copy link

rwells1703 commented Apr 23, 2024

I'm also facing the same issue with my videos, although for me the web interface does not display them either (on any device). I've tried running the transcode video job but I see the same.

App: 1.102.2 build.135 (Android 14 Pixel 8)
Server: 1.102.3

The error log in my mobile app log is attached.
details.txt
stacktrace.txt

@alextran1502
Copy link
Contributor

alextran1502 commented Apr 26, 2024

Are you using self-signed certificate by chance? I tested on both iOS and Android accessing the instance locally and the video can play normally

@LauriKem
Copy link
Author

A very good point! I tested connection directly with IP address and the videos play now accordingly.

Interesting case, should we add a note of this into the mobile app FAQ (https://immich.app/docs/FAQ#mobile-app) for others facing this issue?

@bo0tzz
Copy link
Member

bo0tzz commented Apr 26, 2024

Dupe: #5553

@bo0tzz bo0tzz closed this as not planned Won't fix, can't repro, duplicate, stale Apr 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants