diff --git a/bubble_upmpdcli.pcap b/bubble_upmpdcli.pcap
new file mode 100644
index 00000000..0d3d2c54
Binary files /dev/null and b/bubble_upmpdcli.pcap differ
diff --git a/com.bubblesoft.android.bubbleupnp_log.txt b/com.bubblesoft.android.bubbleupnp_log.txt
new file mode 100644
index 00000000..e5fc6964
--- /dev/null
+++ b/com.bubblesoft.android.bubbleupnp_log.txt
@@ -0,0 +1,834 @@
+[main (2) ] INFO - 0:00:00.155 - enableLogToFile: opened /storage/emulated/0/Download/com.bubblesoft.android.bubbleupnp_log.txt
+[main (2) ] INFO - 0:00:00.156 - enableLogToFile: logging to file is enabled in 148 ms
+[main (2) ] INFO - 0:00:00.161 - system locale: fr_FR
+[main (2) ] INFO - 0:00:00.161 - app locale: fr_FR
+[main (2) ] INFO - 0:00:00.162 - os.arch: aarch64
+[main (2) ] INFO - 0:00:00.162 - API level: 36
+[main (2) ] INFO - 0:00:00.162 - manufacturer: samsung
+[main (2) ] INFO - 0:00:00.162 - model: SM-A536B
+[main (2) ] INFO - 0:00:00.162 - product: a53xnaeea
+[main (2) ] INFO - 0:00:00.163 - fingerprint: samsung/a53xnaeea/a53x:16/BP2A.250605.031.A3/A536BXXSHGYJ3:user/release-keys
+[main (2) ] INFO - 0:00:00.163 - debuggable: false
+[main (2) ] INFO - 0:00:00.163 - installed on external storage: false
+[main (2) ] INFO - 0:00:00.165 - touch supported: true
+[main (2) ] INFO - 0:00:00.166 - gestural navigation: true
+[main (2) ] INFO - 0:00:00.166 - large memory class: 512
+[main (2) ] INFO - 0:00:00.167 - isSustainedPerformanceModeSupported: false
+[main (2) ] INFO - 0:00:00.168 - SUPPORTED_ABIS: arm64-v8a,armeabi-v7a,armeabi
+[main (2) ] INFO - 0:00:00.168 - app: version: 4.6.1, code: 3000911
+[main (2) ] INFO - 0:00:00.169 - app standby bucket: EXEMPTED
+[main (2) ] INFO - 0:00:00.170 - isBackgroundRestricted: false
+[main (2) ] INFO - 0:00:00.170 - xposed running: false
+[main (2) ] INFO - 0:00:00.171 - isDevMode: true
+[main (2) ] INFO - 0:00:00.182 - app info: true false false true true true 0
+[main (2) ] INFO - 0:00:00.191 - watchdog: set inactivity delay to 15 mins
+[main (2) ] INFO - 0:00:00.191 - useScopedStorage: true
+[main (2) ] INFO - 0:00:00.193 - created file: file:///storage/emulated/0/Android/data/com.bubblesoft.android.bubbleupnp/cache/bubbleupnpserver/.nomedia
+[main (2) ] INFO - 0:00:00.193 - getLocalRendererRemoteControlVideoApp: no package name
+[main (2) ] INFO - 0:00:00.221 - isReadExternalStorageGranted: true
+[main (2) ] INFO - 0:00:00.222 - isWriteExternalStorageGranted: true
+[main (2) ] INFO - 0:00:00.222 - dynamic theming: called AppCompatDelegate.setDefaultNightMode(-1)
+[main (2) ] INFO - 0:00:00.222 - App.onCreate() took: 226 ms
+[main (2) ] INFO - 0:00:00.224 - StrictMode (JB): LAX
+[main (2) ] INFO - 0:00:00.235 - attachBaseContext(base)@9e5576d:-1
+[main (2) ] INFO - 0:00:00.245 - onCreate(): Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 xflg=0x4 cmp=com.bubblesoft.android.bubbleupnp/.MainActivity bnds=[841,188][1041,472] }@9e5576d:5234
+[main (2) ] INFO - 0:00:00.245 - Referrer: android-app://com.sec.android.app.launcher
+[main (2) ] INFO - 0:00:00.283 - attachBaseContext(base)@2e41698:-1
+[main (2) ] INFO - 0:00:00.286 - dynamic theming: isDynamicColorAvailable: true, isRuntimeColorThemeGenAvailable: true
+[main (2) ] INFO - 0:00:00.286 - dynamic theming: theme mode: 0
+[main (2) ] INFO - 0:00:00.287 - dynamic theming: theme overlay applied
+[main (2) ] INFO - 0:00:00.288 - dynamic theming: dark theme: false
+[main (2) ] INFO - 0:00:00.288 - dynamic theming: dialogs elevation overlay enabled: true
+[main (2) ] INFO - 0:00:00.290 - dynamic theming: applied color harmonization
+[main (2) ] INFO - 0:00:00.293 - dynamic theming: initDynamicTheming took: 8 ms
+[main (2) ] INFO - 0:00:00.302 - onCreate(): Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 xflg=0x4 cmp=com.bubblesoft.android.bubbleupnp/.MainTabActivity bnds=[841,188][1041,472] }@2e41698:5234
+[main (2) ] INFO - 0:00:00.307 - dynamic theming: colorPrimary: #ff475d92
+[main (2) ] INFO - 0:00:00.307 - dynamic theming: android:windowBackground: #fffaf8ff
+[main (2) ] INFO - 0:00:00.307 - dynamic theming: android:colorbackground: #fffaf8ff
+[main (2) ] INFO - 0:00:00.309 - startAndBindServiceWithRetry: retryOnFailure true
+[Main #1 (179) ] INFO - 0:00:00.400 - task: start: getSearchableInfo
+[Main #1 (179) ] INFO - 0:00:00.401 - task: end, 2ms: getSearchableInfo
+[main (2) ] INFO - 0:00:00.407 - remote config: FirebaseApp: true
+[main (2) ] INFO - 0:00:00.410 - MainTabActivity.onCreate() took: 124 ms
+[main (2) ] INFO - 0:00:00.411 - onStart()@2e41698:5234
+[main (2) ] INFO - 0:00:00.414 - onPostCreate()@2e41698:5234
+[main (2) ] INFO - 0:00:00.414 - startup page index: 0
+[main (2) ] INFO - 0:00:00.415 - onResume()@2e41698:5234
+[main (2) ] INFO - 0:00:00.438 - Insets: Insets{left=0, top=88, right=0, bottom=45}
+[main (2) ] INFO - 0:00:00.458 - onAttach()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.459 - onCreate()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.459 - onCreateView()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.475 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:00.476 - tidal: cache folder: /data/user/0/com.bubblesoft.android.bubbleupnp/cache
+[main (2) ] INFO - 0:00:00.476 - qobuz: username: set
+[main (2) ] INFO - 0:00:00.477 - qobuz: cache folder: /data/user/0/com.bubblesoft.android.bubbleupnp/cache
+[main (2) ] INFO - 0:00:00.477 - NowPlayingFragment.onCreateView() took: 18 ms
+[main (2) ] INFO - 0:00:00.478 - onActivityCreated()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.479 - onStart()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.481 - onResume()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:00.484 - onAttach()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:00.484 - onCreate()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:00.485 - onCreateView()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:00.494 - PlaylistFragment.onCreateView() took: 9 ms
+[main (2) ] INFO - 0:00:00.494 - onActivityCreated()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:00.495 - onStart()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:00.504 - onAttach()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:00.504 - onCreate()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:00.505 - onCreateView()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:00.528 - LibraryFragment.onCreateView() took: 23 ms
+[Main #1 (179) ] INFO - 0:00:00.528 - task: start: getSearchableInfo
+[Main #1 (179) ] INFO - 0:00:00.529 - task: end, 1ms: getSearchableInfo
+[main (2) ] INFO - 0:00:00.529 - onActivityCreated()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:00.530 - onStart()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:00.533 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:00.570 - display: screen generalized size: normal
+[main (2) ] INFO - 0:00:00.571 - display: screen generalized density: 480 dpi
+[main (2) ] INFO - 0:00:00.571 - display: logical density factor: 3.000000
+[main (2) ] INFO - 0:00:00.571 - display: screen size (pixels, Display.getSize()): 1080x2400
+[main (2) ] INFO - 0:00:00.571 - display: screen size (pixels, displayMetrics): 1080x2400
+[main (2) ] INFO - 0:00:00.571 - display: screen size (dp): 360x800
+[main (2) ] INFO - 0:00:00.571 - display: screen size (conf: screenWidthDp x screenHeightDp) (dp): 360x800
+[main (2) ] INFO - 0:00:00.571 - display: smallest width (dp): 360
+[main (2) ] INFO - 0:00:00.571 - display: screen size (inches): 2.637801x5.905512, diagonal: 6.467848
+[main (2) ] INFO - 0:00:00.571 - display: screen size aspect ratio (h/w): 2.222222
+[main (2) ] INFO - 0:00:00.572 - display: isTallActivity: true
+[main (2) ] INFO - 0:00:00.572 - display: isInMultiWindowMode: false
+[main (2) ] INFO - 0:00:00.572 - display: xdpi: 409.432007
+[main (2) ] INFO - 0:00:00.572 - display: ydpi: 406.399994
+[main (2) ] INFO - 0:00:00.572 - display: landscape: false
+[main (2) ] INFO - 0:00:00.572 - display: isPhoneSize: true
+[main (2) ] INFO - 0:00:00.572 - display: E2E35.isEnforced: true
+[main (2) ] INFO - 0:00:00.572 - onCreate
+[main (2) ] INFO - 0:00:00.582 - doStartForeground: calling startForeground(), fromOnStartCommand: false, serviceType: 2
+[main (2) ] INFO - 0:00:00.593 - isCustomNotificationExitButtonSupported: true
+[main (2) ] WARNING - 0:00:00.605 - failed to set FFmpeg executable
+[main (2) ] INFO - 0:00:00.615 - ffmpeg process started, timeout: 0s: -version
+[main (2) ] INFO - 0:00:01.56 - runFFMPEG: finished ffmpeg process took: 450 ms
+[main (2) ] INFO - 0:00:01.56 - runFFMPEG: written 2136 bytes
+[main (2) ] INFO - 0:00:01.56 - ffmpeg version N-118170-g7e778586e7-bubblesoftapps.com Copyright (c) 2000-2024 the FFmpeg developers
+built with Android (6875598, based on r399163b) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)
+configuration: --target-os=android --cross-prefix=/home/bobbie/ffmpeg-android/toolchain-android/bin/aarch64-linux-android- --arch=aarch64 --cpu=armv8-a --sysroot=/home/bobbie/ffmpeg-android/toolchain-android/sysroot --pkg-config=/home/bobbie/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/bobbie/ffmpeg-android/build/arm64-v8a --extra-cflags='-I/home/bobbie/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -fPIE -fPIC' --extra-ldflags='-Wl,-z,max-page-size=16384 -fuse-ld=gold -L/home/bobbie/ffmpeg-android/toolchain-android/lib64 -L/home/bobbie/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie -Wl,--fix-cortex-a8 -Wl,-z,max-page-size=16384' --extra-libs='-lhogweed -lnettle -lgmp -lvorbis -logg -lm -lz' --extra-cxxflags= --extra-version=bubblesoftapps.com --disable-shared --disable-debug --disable-programs --disable-doc --disable-avdevice --disable-postproc --disable-protocols --disable-protocol='rtp,udp' --disable-encoders --disable-filters --disable-libv4l2 --enable-gpl --enable-version3 --enable-pic --enable-static --enable-ffmpeg --enable-libxml2 --enable-gnutls --enable-protocol='fd,http,https,pipe,crypto,file' --enable-encoder='aac,libmp3lame,libopus,ac3,eac3,pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be,flac,libvorbis,mjpeg,libx264,srt,wrapped_avframe,h264_mediacodec,png,pcm_s32le,pcm_s32be' --enable-filter='aresample,volume,afir,replaygain,scale,setsar,setdar' --enable-demuxer=dash --enable-libmp3lame --enable-libopus --enable-libsoxr --enable-libvorbis --enable-libx264 --enable-jni --enable-mediacodec --enable-hwaccels
+libavutil 59. 53.100 / 59. 53.100
+libavcodec 61. 28.100 / 61. 28.100
+libavformat 61. 9.101 / 61. 9.101
+libavfilter 10. 6.101 / 10. 6.101
+libswscale 8. 13.100 / 8. 13.100
+libswresample 5. 4.100 / 5. 4.100
+
+[main (2) ] INFO - 0:00:01.57 - FFmpeg executable: /data/app/~~rP3Ghg18CfximalIH4RRoQ==/com.bubblesoft.android.bubbleupnp-vax1mni2sS4Ql7kqL8ugMA==/lib/arm64/libffmpeg.so
+[main (2) ] INFO - 0:00:01.59 - renderer chooser target: loaded 1 targets
+[Main #1 (179) ] INFO - 0:00:01.59 - task: start: publishRendererChooserTargets
+[main (2) ] INFO - 0:00:01.62 - created Apache HttpClient
+[Main #2 (195) ] INFO - 0:00:01.76 - task: start: DownloadManager
+[Main #2: DownloadManager (195) ] INFO - 0:00:01.76 - waiting for download requests...
+[main (2) ] INFO - 0:00:01.76 - .d : default UPnP action timeout: 30s
+[main (2) ] INFO - 0:00:01.77 - StreamRequestMessage short connect timeout: 1000
+[main (2) ] INFO - 0:00:01.78 - .d : >>> Starting UPnP service...
+[main (2) ] INFO - 0:00:01.78 - .d : Using configuration: com.bubblesoft.android.bubbleupnp.AndroidUpnpService$u0
+[main (2) ] INFO - 0:00:01.81 - .d : <<< UPnP service started successfully
+[main (2) ] INFO - 0:00:01.85 - local renderer gapless support: false
+[Main #1 (179) ] INFO - 0:00:01.86 - task: end, 26ms: publishRendererChooserTargets
+[main (2) ] INFO - 0:00:01.109 - MediaPlayerRenderer.setVolume(): 14
+[main (2) ] INFO - 0:00:01.115 - local renderer audio session id: 2033, send intent delay: 500
+[main (2) ] INFO - 0:00:01.128 - local renderer: RenderingControl service max volume: 15
+[main (2) ] INFO - 0:00:01.129 - MediaRenderer LastChange thread: initial last change running: false
+[Main #1 (179) ] INFO - 0:00:01.129 - task: start: MediaRenderer-LastChange
+[Main #1: MediaRenderer-LastChange (179) ] INFO - 0:00:01.130 - MediaRenderer LastChange thread: stopped
+[main (2) ] INFO - 0:00:01.131 - created local renderer
+[main (2) ] INFO - 0:00:01.132 - OpenHome local renderer is disabled
+[main (2) ] INFO - 0:00:01.139 - starting Jetty...
+[main (2) ] INFO - 0:00:01.139 - createConnector: type: 3
+[main (2) ] INFO - 0:00:01.143 - external storage available: true, root directory: /storage/emulated/0, state: mounted, path: null
+[Main #3 (202) ] INFO - 0:00:01.145 - task: start: checkAlbumArtistColumnSupport
+[Main #3: checkAlbumArtistColumnSupport (] INFO - 0:00:01.145 - Album Artist column supported (from pref): false
+[Main #3 (202) ] INFO - 0:00:01.146 - task: end, 1ms: checkAlbumArtistColumnSupport
+[main (2) ] INFO - 0:00:01.146 - audio cast fifo exists: /data/data/com.bubblesoft.android.bubbleupnp/audiocast
+[main (2) ] INFO - 0:00:01.149 - audio cast fifo exists: /data/data/com.bubblesoft.android.bubbleupnp/audiocast
+[main (2) ] INFO - 0:00:01.150 - excluded remote directories: []
+[main (2) ] INFO - 0:00:01.152 - jetty-7.x.y-SNAPSHOT
+[main (2) ] INFO - 0:00:01.159 - started {}
+[main (2) ] INFO - 0:00:01.159 - started {}
+[main (2) ] INFO - 0:00:01.160 - started {}
+[main (2) ] INFO - 0:00:01.160 - started {}
+[main (2) ] INFO - 0:00:01.160 - started {}
+[main (2) ] INFO - 0:00:01.161 - started {}
+[main (2) ] INFO - 0:00:01.161 - started {}
+[main (2) ] INFO - 0:00:01.161 - started {}
+[main (2) ] INFO - 0:00:01.161 - started {}
+[main (2) ] INFO - 0:00:01.165 - Started {}
+[main (2) ] INFO - 0:00:01.165 - started Jetty
+[main (2) ] WARNING - 0:00:01.167 - smb: failed to load: /data/user/0/com.bubblesoft.android.bubbleupnp/files/smbshares: java.io.FileNotFoundException: /data/user/0/com.bubblesoft.android.bubbleupnp/files/smbshares: open failed: ENOENT (No such file or directory)
+[main (2) ] INFO - 0:00:01.168 - smb: setLocalIpAddress: null
+[main (2) ] INFO - 0:00:01.168 - added local media server to registry
+[main (2) ] INFO - 0:00:01.168 - created local media server
+[main (2) ] INFO - 0:00:01.169 - initBatterySavingMode: false
+[main (2) ] WARNING - 0:00:01.169 - discovery maintenance: executor already stopped
+[main (2) ] INFO - 0:00:01.169 - .b : WiFi lock acquired
+[main (2) ] INFO - 0:00:01.187 - wake lock acquired
+[main (2) ] INFO - 0:00:01.189 - initBatterySavingMode: added MediaRouter callback
+[main (2) ] INFO - 0:00:01.201 - .b : network type changed => WIFI
+[main (2) ] WARNING - 0:00:01.201 - .b : WiFi multicast lock already released
+[main (2) ] INFO - 0:00:01.201 - .b : WiFi lock released
+[main (2) ] INFO - 0:00:01.217 - .a : Creating Router: xr.b$a
+[main (2) ] WARNING - 0:00:01.218 - .f : Network interface reports it is not multicast capable: dummy0
+[main (2) ] WARNING - 0:00:01.219 - .f : Network interface reports it is not multicast capable: lo
+[main (2) ] INFO - 0:00:01.219 - .f : Skipping unsupported non-IPv4 address: /fe80::6aba:a4eb:8bbb:193e%epdg1
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /fe80::24a5:caff:fecb:20a%dummy0
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /fe80::1c35:9cff:fe48:4f02%wlan0
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /2a01:e0a:db2:76f0:1c35:9cff:fe48:4f02
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /2a01:e0a:db2:76f0:2459:6fe5:13c0:a045
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /fdde:0:31df:4f52::1288:da64
+[main (2) ] INFO - 0:00:01.220 - .f : Skipping unsupported non-IPv4 address: /::1
+[main (2) ] INFO - 0:00:01.220 - .f : Display name: wlan0
+[main (2) ] INFO - 0:00:01.220 - .f : Name: wlan0
+[main (2) ] INFO - 0:00:01.221 - .f : InetAddress: /fe80::1c35:9cff:fe48:4f02%wlan0
+[main (2) ] INFO - 0:00:01.221 - .f : InetAddress: /2a01:e0a:db2:76f0:1c35:9cff:fe48:4f02
+[main (2) ] INFO - 0:00:01.221 - .f : InetAddress: /2a01:e0a:db2:76f0:2459:6fe5:13c0:a045
+[main (2) ] INFO - 0:00:01.221 - .f : InetAddress: /192.168.0.98
+[main (2) ] INFO - 0:00:01.221 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.221 - .f : Address: /fe80::1c35:9cff:fe48:4f02%wlan0
+[main (2) ] INFO - 0:00:01.221 - .f : Broadcast: null
+[main (2) ] INFO - 0:00:01.221 - .f : Prefix length: 64
+[main (2) ] INFO - 0:00:01.221 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.221 - .f : Address: /2a01:e0a:db2:76f0:1c35:9cff:fe48:4f02
+[main (2) ] INFO - 0:00:01.222 - .f : Broadcast: null
+[main (2) ] INFO - 0:00:01.222 - .f : Prefix length: 64
+[main (2) ] INFO - 0:00:01.222 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.222 - .f : Address: /2a01:e0a:db2:76f0:2459:6fe5:13c0:a045
+[main (2) ] INFO - 0:00:01.222 - .f : Broadcast: null
+[main (2) ] INFO - 0:00:01.222 - .f : Prefix length: 64
+[main (2) ] INFO - 0:00:01.222 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.222 - .f : Address: /192.168.0.98
+[main (2) ] INFO - 0:00:01.222 - .f : Broadcast: /192.168.0.255
+[main (2) ] INFO - 0:00:01.222 - .f : Prefix length: 24
+[main (2) ] INFO - 0:00:01.222 - .f : Up? true
+[main (2) ] INFO - 0:00:01.223 - .f : Loopback? false
+[main (2) ] INFO - 0:00:01.223 - .f : PointToPoint? false
+[main (2) ] INFO - 0:00:01.223 - .f : Supports multicast? true
+[main (2) ] INFO - 0:00:01.223 - .f : Virtual? false
+[main (2) ] INFO - 0:00:01.224 - .f : Hardware address: null
+[main (2) ] INFO - 0:00:01.224 - .f : MTU: 1500
+[main (2) ] INFO - 0:00:01.224 - .f : Display name: lo
+[main (2) ] INFO - 0:00:01.224 - .f : Name: lo
+[main (2) ] INFO - 0:00:01.224 - .f : InetAddress: /::1
+[main (2) ] INFO - 0:00:01.224 - .f : InetAddress: /127.0.0.1
+[main (2) ] INFO - 0:00:01.225 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.225 - .f : Address: /::1
+[main (2) ] INFO - 0:00:01.225 - .f : Broadcast: null
+[main (2) ] INFO - 0:00:01.225 - .f : Prefix length: 128
+[main (2) ] INFO - 0:00:01.225 - .f : Interface Address
+[main (2) ] INFO - 0:00:01.225 - .f : Address: /127.0.0.1
+[main (2) ] INFO - 0:00:01.225 - .f : Broadcast: null
+[main (2) ] INFO - 0:00:01.225 - .f : Prefix length: 8
+[main (2) ] INFO - 0:00:01.225 - .f : Up? true
+[main (2) ] INFO - 0:00:01.225 - .f : Loopback? true
+[main (2) ] INFO - 0:00:01.226 - .f : PointToPoint? false
+[main (2) ] INFO - 0:00:01.226 - .f : Supports multicast? false
+[main (2) ] INFO - 0:00:01.226 - .f : Virtual? false
+[main (2) ] INFO - 0:00:01.226 - .f : Hardware address: null
+[main (2) ] INFO - 0:00:01.227 - .f : MTU: 65536
+[main (2) ] INFO - 0:00:01.227 - .i : /127.0.0.1:58645: created socket (for receiving TCP streams)
+[main (2) ] INFO - 0:00:01.227 - .i : /192.168.0.98:58645: created socket (for receiving TCP streams)
+[main (2) ] INFO - 0:00:01.228 - .e : wlan0: Creating wildcard socket (for receiving multicast datagrams) on port: 1900
+[main (2) ] INFO - 0:00:01.228 - .e : wlan0: Joining multicast group: /239.255.255.250:1900
+[main (2) ] INFO - 0:00:01.229 - .e : lo: Creating wildcard socket (for receiving multicast datagrams) on port: 1900
+[main (2) ] INFO - 0:00:01.229 - .e : lo: Joining multicast group: /239.255.255.250:1900
+[main (2) ] INFO - 0:00:01.229 - .a : Creating bound socket (for datagram input/output) on: /127.0.0.1
+[main (2) ] INFO - 0:00:01.230 - .a : Creating bound socket (for datagram input/output) on: /192.168.0.98
+[main (2) ] INFO - 0:00:01.231 - .b : WiFi multicast lock acquired
+[main (2) ] INFO - 0:00:01.244 - .b : WiFi lock acquired
+[main (2) ] INFO - 0:00:01.250 - .b : enabled router on network type change (new network: WIFI)
+[main (2) ] INFO - 0:00:01.250 - inspecting new device: La glouglou mobile
+[main (2) ] INFO - 0:00:01.251 - La glouglou mobile : No product service found
+[main (2) ] INFO - 0:00:01.251 - La glouglou mobile : volume range: 0..15
+[main (2) ] INFO - 0:00:01.251 - La glouglou mobile : supports SetNextAVTransportURI: false
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.315 - codec name: c2.sec.amrnb.decoder, supported types: audio/3gpp
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.315 - codec name: c2.sec.amrwb.decoder, supported types: audio/amr-wb
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.flac.decoder, supported types: audio/flac
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.ima.decoder, supported types: audio/x-ima
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.mp3.decoder.mpeg, supported types: audio/mpeg
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.mp3.decoder, supported types: audio/mpeg
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.mp3.decoder.mpeg-L1, supported types: audio/mpeg-L1
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.mp3.decoder.mpeg-L2, supported types: audio/mpeg-L2
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.vc1.decoder.wvc1, supported types: video/wvc1
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.vc1.decoder, supported types: video/wvc1
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.316 - codec name: c2.sec.vc1.decoder.x-ms-wmv, supported types: video/x-ms-wmv
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.dolby.ac4.decoder, supported types: audio/ac4
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: OMX.dolby.ac4.decoder, supported types: audio/ac4
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.dolby.eac3.decoder.ac3, supported types: audio/ac3
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.dolby.eac3.decoder, supported types: audio/ac3
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.dolby.eac3.decoder.eac3, supported types: audio/eac3
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.dolby.eac3.decoder.eac3-joc, supported types: audio/eac3-joc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.android.aac.decoder, supported types: audio/mp4a-latm
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: OMX.google.aac.decoder, supported types: audio/mp4a-latm
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: c2.android.amrnb.decoder, supported types: audio/3gpp
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.317 - codec name: OMX.google.amrnb.decoder, supported types: audio/3gpp
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: c2.android.amrwb.decoder, supported types: audio/amr-wb
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: OMX.google.amrwb.decoder, supported types: audio/amr-wb
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: c2.android.flac.decoder, supported types: audio/flac
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: OMX.google.flac.decoder, supported types: audio/flac
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: c2.android.g711.alaw.decoder, supported types: audio/g711-alaw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: OMX.google.g711.alaw.decoder, supported types: audio/g711-alaw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.318 - codec name: c2.android.g711.mlaw.decoder, supported types: audio/g711-mlaw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: OMX.google.g711.mlaw.decoder, supported types: audio/g711-mlaw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: c2.android.gsm.decoder, supported types: audio/gsm
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: OMX.google.gsm.decoder, supported types: audio/gsm
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: c2.android.mp3.decoder, supported types: audio/mpeg
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: OMX.google.mp3.decoder, supported types: audio/mpeg
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.319 - codec name: c2.android.opus.decoder, supported types: audio/opus
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: OMX.google.opus.decoder, supported types: audio/opus
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: c2.android.raw.decoder, supported types: audio/raw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: OMX.google.raw.decoder, supported types: audio/raw
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: c2.android.vorbis.decoder, supported types: audio/vorbis
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: OMX.google.vorbis.decoder, supported types: audio/vorbis
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: c2.exynos.h264.decoder, supported types: video/avc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: OMX.Exynos.avc.dec, supported types: video/avc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: c2.exynos.h264.decoder.secure, supported types: video/avc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: c2.exynos.hevc.decoder, supported types: video/hevc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.320 - codec name: OMX.Exynos.hevc.dec, supported types: video/hevc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.exynos.hevc.decoder.secure, supported types: video/hevc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.exynos.vp8.decoder, supported types: video/x-vnd.on2.vp8
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: OMX.Exynos.vp8.dec, supported types: video/x-vnd.on2.vp8
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.sec.mpeg4.decoder, supported types: video/mp4v-es
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.android.apv.decoder, supported types: video/apv
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.android.av1-dav1d.decoder, supported types: video/av01
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: c2.android.avc.decoder, supported types: video/avc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.321 - codec name: OMX.google.h264.decoder, supported types: video/avc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: c2.android.h263.decoder, supported types: video/3gpp
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: OMX.google.h263.decoder, supported types: video/3gpp
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: c2.android.hevc.decoder, supported types: video/hevc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: OMX.google.hevc.decoder, supported types: video/hevc
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: c2.android.mpeg4.decoder, supported types: video/mp4v-es
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: OMX.google.mpeg4.decoder, supported types: video/mp4v-es
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: c2.android.vp8.decoder, supported types: video/x-vnd.on2.vp8
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: OMX.google.vp8.decoder, supported types: video/x-vnd.on2.vp8
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: c2.android.vp9.decoder, supported types: video/x-vnd.on2.vp9
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.322 - codec name: OMX.google.vp9.decoder, supported types: video/x-vnd.on2.vp9
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.323 - codec name: c2.android.av1.decoder, supported types: video/av01
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.323 - stock audio codecs: OPUS, FLAC, WAV, MP3, MP2, MP1, AAC, M4A, OGG, DFF, DSF, DSD
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.324 - non-stock audio codecs: AIFF, L16, L24, Musepack, WavPack, TAK, AMR, AC3, MKA, MPEG-DASH, DTS, Monkey's Audio, WMA
+[cling-8 (GetProtocolInfo) (211) ] INFO - 0:00:01.324 - StockAudioSupport initialization took: 72 ms
+[main (2) ] INFO - 0:00:01.325 - La glouglou mobile : protocolInfo: http-get:*:audio/opus:*,http-get:*:audio/x-flac:*,http-get:*:application/flac:*,http-get:*:audio/flac:*,http-get:*:application/x-flac:*,http-get:*:audio/wav:*,http-get:*:application/x-wave:*,http-get:*:audio/wave:*,http-get:*:application/wave:*,http-get:*:application/wav:*,http-get:*:application/x-wav:*,http-get:*:audio/x-wave:*,http-get:*:audio/x-wav:*,http-get:*:audio/mp3:*,http-get:*:application/mp3:*,http-get:*:application/x-mp3:*,http-get:*:audio/mpg:*,http-get:*:audio/mpeg3:*,http-get:*:application/mpeg:*,http-get:*:audio/x-mp3:*,http-get:*:audio/x-mpegaudio:*,http-get:*:audio/mpeg:*,http-get:*:audio/x-mpeg3:*,http-get:*:audio/x-mpg:*,http-get:*:audio/x-mpeg:*,http-get:*:application/mpeg3:*,http-get:*:audio/mp2:*,http-get:*:application/mp2:*,http-get:*:audio/mp1:*,http-get:*:application/mp1:*,http-get:*:audio/aacp:*,http-get:*:audio/aac:*,http-get:*:audio/3gpp:*,http-get:*:audio/3gpp2:*,http-get:*:audio/x-aac:*,http-get:*:audio/m4a:*,http-get:*:audio/mp4:*,http-get:*:application/x-m4b:*,http-get:*:application/x-m4a:*,http-get:*:application/x-m4p:*,http-get:*:application/x-mp4:*,http-get:*:audio/mpeg4:*,http-get:*:audio/x-m4b:*,http-get:*:audio/x-m4a:*,http-get:*:audio/x-m4p:*,http-get:*:audio/x-mp4:*,http-get:*:application/mpeg4:*,http-get:*:audio/x-ogg:*,http-get:*:application/x-ogg:*,http-get:*:audio/vorbis:*,http-get:*:application/ogg:*,http-get:*:audio/ogg:*,http-get:*:audio/dff:*,http-get:*:audio/x-dff:*,http-get:*:audio/x-dsf:*,http-get:*:audio/dsf:*,http-get:*:audio/x-dsd:*,http-get:*:audio/dsd:*,http-get:*:audio/x-scpls:*,http-get:*:application/aiff:*,http-get:*:audio/aiff:*,http-get:*:application/x-aif:*,http-get:*:application/aif:*,http-get:*:application/x-aiff:*,http-get:*:audio/x-aifc:*,http-get:*:audio/x-aiff:*,http-get:*:audio/aif:*,http-get:*:audio/aifc:*,http-get:*:audio/x-aif:*,http-get:*:audio/L16:*,http-get:*:audio/l24:*,http-get:*:audio/L24:*,http-get:*:audio/mpc:*,http-get:*:application/musepack:*,http-get:*:application/x-mpc:*,http-get:*:application/mpc:*,http-get:*:audio/musepack:*,http-get:*:application/x-musepack:*,http-get:*:audio/x-mpc:*,http-get:*:audio/x-musepack:*,http-get:*:audio/wavpack:*,http-get:*:application/x-wavpack:*,http-get:*:audio/x-wv:*,http-get:*:application/wavpack:*,http-get:*:audio/wv:*,http-get:*:audio/x-wavpack:*,http-get:*:application/wv:*,http-get:*:application/x-wv:*,http-get:*:audio/x-tak:*,http-get:*:audio/tak:*,http-get:*:audio/amr:*,http-get:*:audio/ac3:*,http-get:*:audio/x-matroska:*,http-get:*:application/dash+xml:*,http-get:*:audio/x-dts:*,http-get:*:audio/vnd-dts:*,http-get:*:application/ape:*,http-get:*:application/x-ape:*,http-get:*:audio/monkeys-audio:*,http-get:*:audio/x-monkeys-audio:*,http-get:*:audio/ape:*,http-get:*:application/monkeysaudio:*,http-get:*:audio/x-monkeysaudio:*,http-get:*:application/monkeys-audio:*,http-get:*:audio/x-ape:*,http-get:*:application/x-monkeys-audio:*,http-get:*:application/x-monkeysaudio:*,http-get:*:audio/monkeysaudio:*,http-get:*:audio/x-ms-wma:*,http-get:*:application/x-ms-wma:*,http-get:*:application/wma:*,http-get:*:audio/wma:*,http-get:*:audio/L16:*,http-get:*:audio/L16;channels=1;rate=11025:*,http-get:*:audio/L16;channels=1;rate=22050:*,http-get:*:audio/L16;channels=1;rate=44100:*,http-get:*:audio/L16;channels=1;rate=48000:*,http-get:*:audio/L16;channels=1;rate=88200:*,http-get:*:audio/L16;channels=1;rate=96000:*,http-get:*:audio/L16;channels=1;rate=176400:*,http-get:*:audio/L16;channels=1;rate=192000:*,http-get:*:audio/L16;channels=2;rate=11025:*,http-get:*:audio/L16;channels=2;rate=22050:*,http-get:*:audio/L16;channels=2;rate=44100:*,http-get:*:audio/L16;channels=2;rate=48000:*,http-get:*:audio/L16;channels=2;rate=88200:*,http-get:*:audio/L16;channels=2;rate=96000:*,http-get:*:audio/L16;channels=2;rate=176400:*,http-get:*:audio/L16;channels=2;rate=192000:*,http-get:*:audio/L16;channels=6;rate=11025:*,http-get:*:audio/L16;channels=6;rate=22050:*,http-get:*:audio/L16;channels=6;rate=44100:*,http-get:*:audio/L16;channels=6;rate=48000:*,http-get:*:audio/L16;channels=6;rate=88200:*,http-get:*:audio/L16;channels=6;rate=96000:*,http-get:*:audio/L16;channels=6;rate=176400:*,http-get:*:audio/L16;channels=6;rate=192000:*,http-get:*:audio/L16;channels=8;rate=11025:*,http-get:*:audio/L16;channels=8;rate=22050:*,http-get:*:audio/L16;channels=8;rate=44100:*,http-get:*:audio/L16;channels=8;rate=48000:*,http-get:*:audio/L16;channels=8;rate=88200:*,http-get:*:audio/L16;channels=8;rate=96000:*,http-get:*:audio/L16;channels=8;rate=176400:*,http-get:*:audio/L16;channels=8;rate=192000:*,http-get:*:video/vnd.dlna.mpeg-tts:*,http-get:*:video/mpeg2:*,http-get:*:video/mpeg:*,http-get:*:application/vnd.apple.mpegurl:*,http-get:*:application/x-mpegurl:*,http-get:*:video/x-m4v:*,http-get:*:video/mp4v-es:*,http-get:*:video/mp4:*,http-get:*:video/mp2ts:*,http-get:*:video/mp2t:*,http-get:*:video/quicktime:*,http-get:*:video/x-ms-wmv:*,http-get:*:video/x-ms-asf:*,http-get:*:video/x-ms-video:*,http-get:*:video/divx:*,http-get:*:video/vnd.divx:*,http-get:*:video/x-divx:*,http-get:*:video/x-ms-avi:*,http-get:*:video/avi:*,http-get:*:video/x-msvideo:*,http-get:*:video/x-mkv:*,http-get:*:video/mkv:*,http-get:*:video/x-matroska:*,http-get:*:video/ogg:*,http-get:*:video/3gpp:*,http-get:*:video/webm:*,http-get:*:application/flv:*,http-get:*:video/x-flv:*,http-get:*:video/flv:*,http-get:*:video/wtv:*,http-get:*:application/vnd.rn-realmedia-vbr:*,http-get:*:video/vnd.rn-realvideo:*,http-get:*:application/vnd.rn-realmedia:*,http-get:*:image/png:*,http-get:*:image/jpeg:*,http-get:*:image/bmp:*,http-get:*:image/gif:*,http-get:*:image/jpg:*,http-get:*:image/heic:*,http-get:*:image/webp:*,http-get:*:image/mpo:*
+[main (2) ] INFO - 0:00:01.326 - La glouglou mobile : discarding problematic mime-type: audio/l24
+[main (2) ] INFO - 0:00:01.326 - La glouglou mobile : discarding problematic mime-type: audio/l24
+[main (2) ] INFO - 0:00:01.327 - La glouglou mobile : adding all DSD mime-types
+[main (2) ] INFO - 0:00:01.327 - La glouglou mobile : max samplerate: -1, supports 24-bit: true, supports multichannel: true
+[main (2) ] INFO - 0:00:01.328 - La glouglou mobile : supported mime-types: [audio/opus, audio/x-flac, application/flac, audio/flac, application/x-flac, audio/wav, application/x-wave, audio/wave, application/wave, application/wav, application/x-wav, audio/x-wave, audio/x-wav, audio/mp3, application/mp3, application/x-mp3, audio/mpg, audio/mpeg3, application/mpeg, audio/x-mp3, audio/x-mpegaudio, audio/mpeg, audio/x-mpeg3, audio/x-mpg, audio/x-mpeg, application/mpeg3, audio/mp2, application/mp2, audio/mp1, application/mp1, audio/aacp, audio/aac, audio/3gpp, audio/3gpp2, audio/x-aac, audio/m4a, audio/mp4, application/x-m4b, application/x-m4a, application/x-m4p, application/x-mp4, audio/mpeg4, audio/x-m4b, audio/x-m4a, audio/x-m4p, audio/x-mp4, application/mpeg4, audio/x-ogg, application/x-ogg, audio/vorbis, application/ogg, audio/ogg, audio/dff, audio/x-dff, audio/x-dsf, audio/dsf, audio/x-dsd, audio/dsd, audio/x-scpls, application/aiff, audio/aiff, application/x-aif, application/aif, application/x-aiff, audio/x-aifc, audio/x-aiff, audio/aif, audio/aifc, audio/x-aif, audio/lpcm, audio/L16, audio/l16, audio/mpc, application/musepack, application/x-mpc, application/mpc, audio/musepack, application/x-musepack, audio/x-mpc, audio/x-musepack, audio/wavpack, application/x-wavpack, audio/x-wv, application/wavpack, audio/wv, audio/x-wavpack, application/wv, application/x-wv, audio/x-tak, audio/tak, audio/amr, audio/ac3, audio/x-matroska, application/dash+xml, audio/x-dts, audio/vnd-dts, application/ape, application/x-ape, audio/monkeys-audio, audio/x-monkeys-audio, audio/ape, application/monkeysaudio, audio/x-monkeysaudio, application/monkeys-audio, audio/x-ape, application/x-monkeys-audio, application/x-monkeysaudio, audio/monkeysaudio, audio/x-ms-wma, application/x-ms-wma, application/wma, audio/wma, video/vnd.dlna.mpeg-tts, video/mpeg2, video/mpeg, application/vnd.apple.mpegurl, application/x-mpegurl, video/x-m4v, video/mp4v-es, video/mp4, video/3gpp, video/mp2ts, video/mp2t, video/quicktime, video/x-ms-wmv, video/x-ms-asf, video/x-ms-video, video/x-ms-avi, video/avi, video/x-msvideo, video/divx, video/vnd.divx, video/x-divx, video/x-mkv, video/mkv, video/x-matroska, video/ogg, video/webm, application/flv, video/x-flv, video/flv, video/wtv, application/vnd.rn-realmedia-vbr, video/vnd.rn-realvideo, application/vnd.rn-realmedia, image/png, image/jpeg, image/jpg, image/bmp, image/gif, image/heic, image/webp, image/mpo]
+[main (2) ] INFO - 0:00:01.328 - La glouglou mobile : hasSetNextPlayItem: false, supportsSetNextPlayItem: false
+[main (2) ] INFO - 0:00:01.329 - added renderer: La glouglou mobile (ip: null)
+[AsyncTask #1 (188) ] INFO - 0:00:01.331 - loadPlaylist: loaded /storage/emulated/0/Android/data/com.bubblesoft.android.bubbleupnp/files/playlists/playlist.dpl
+[main (2) ] INFO - 0:00:01.332 - found renderer: La glouglou mobile
+[main (2) ] INFO - 0:00:01.335 - .c :
+
+ Manufacturer: Bubblesoft
+ Manufacturer URL: http://forum.xda-developers.com/showthread.php?t=1118891
+ Model name: BubbleUPnP Media Renderer
+ Model description: BubbleUPnP Media Renderer
+ Model number: 4.6.1
+ UDN: 402e3e8f-f894-485e-b5e7-61a960912a16
+
+[main (2) ] INFO - 0:00:01.336 - La glouglou mobile : not a Media Server: java.lang.Exception: La glouglou mobile : cannot find service ContentDirectory
+[main (2) ] INFO - 0:00:01.336 - inspecting new device: BubbleUPnP Media Server (SM-A536B)
+[main (2) ] INFO - 0:00:01.337 - BubbleUPnP Media Server (SM-A536B): No product service found
+[main (2) ] WARNING - 0:00:01.337 - BubbleUPnP Media Server (SM-A536B): no RenderingControl service found
+[main (2) ] INFO - 0:00:01.337 - BubbleUPnP Media Server (SM-A536B): constructed successfully
+[Main #3 (202) ] INFO - 0:00:01.337 - task: start: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:01.338 - active media server: Local et Cloud
+[Main #3: MediaServer-FetchSupportedMimeT] INFO - 0:00:01.340 - BubbleUPnP Media Server (SM-A536B) supported mime-types: [audio/mpeg, audio/mp4, audio/mp4, audio/wav, audio/wave, audio/x-wav, audio/mpeg, audio/x-mpeg, audio/mp1, audio/aac, audio/flac, audio/x-flac, audio/m4a, audio/mp4, audio/x-m4a, audio/x-scpls, audio/vorbis, audio/ogg, audio/x-ogg, audio/x-ms-wma, application/x-ms-wma, audio/wma, application/wma, image/png, image/png, image/jpeg, image/jpeg, image/jpeg, image/jpeg, image/png, image/jpeg, image/bmp, image/gif, image/jpg, image/heic, image/webp, image/mpo, video/vnd.dlna.mpeg-tts, video/mpeg2, video/mpeg, application/vnd.apple.mpegurl, application/x-mpegurl, video/x-m4v, video/mp4v-es, video/mp4, video/mp2ts, video/mp2t, video/quicktime, video/x-ms-wmv, video/x-ms-asf, video/x-ms-video, video/divx, video/vnd.divx, video/x-divx, video/x-ms-avi, video/avi, video/x-msvideo, video/x-mkv, video/mkv, video/x-matroska, video/ogg, video/3gpp, video/webm, application/flv, video/x-flv, video/flv, video/wtv, application/vnd.rn-realmedia-vbr, video/vnd.rn-realvideo, application/vnd.rn-realmedia]
+[main (2) ] INFO - 0:00:01.340 - found Media Server: BubbleUPnP Media Server (SM-A536B)
+[main (2) ] INFO - 0:00:01.341 - .c :
+
+ Manufacturer: Bubblesoft
+ Manufacturer URL: http://forum.xda-developers.com/showthread.php?t=1118891
+ Model name: BubbleUPnP Media Server
+ Model description: BubbleUPnP Media Server
+ Model number: 4.6.1
+ UDN: d38a2dc7-13c1-4a39-ab36-513490cf6766
+
+[Main #3 (202) ] INFO - 0:00:01.341 - task: end, 3ms: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:01.341 - createConnector: type: 3
+[main (2) ] INFO - 0:00:01.344 - Started {}
+[main (2) ] INFO - 0:00:01.345 - started Jetty connector on 192.168.0.98:57645
+[main (2) ] INFO - 0:00:01.346 - smb: setLocalIpAddress: /192.168.0.98
+[main (2) ] SEVERE - 0:00:01.346 - watchdog: device search++: 1
+[main (2) ] INFO - 0:00:01.346 - performDeviceSearch: searching...
+[main (2) ] INFO - 0:00:01.351 - play mode: -1
+[main (2) ] INFO - 0:00:01.354 - play mode: -3.5
+[main (2) ] INFO - 0:00:01.358 - set scrobbler: 0
+[main (2) ] INFO - 0:00:01.358 - Trakt resume: cleared progressed entities
+[main (2) ] INFO - 0:00:01.360 - registered receiver for 'mute on phone call'
+[cling-21 (226) ] INFO - 0:00:01.368 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.233:49152/description.xml
+[main (2) ] INFO - 0:00:01.371 - setUsingBattery: true => false
+[main (2) ] WARNING - 0:00:01.372 - watchdog: already disabled
+[Main #3 (202) ] INFO - 0:00:01.373 - task: start: AndroidUpnpService-LoadResumePositions
+[main (2) ] INFO - 0:00:01.373 - isGMSAvailable: true, hasTunInterface: false, isGoogleCastDiscoveryAlwaysStarted: false
+[main (2) ] INFO - 0:00:01.375 - AndroidUpnpService.onCreate() took: 802 ms
+[Main #3: AndroidUpnpService-LoadResumePo] INFO - 0:00:01.375 - loaded 10 resume positions
+[Main #3 (202) ] INFO - 0:00:01.376 - task: end, 3ms: AndroidUpnpService-LoadResumePositions
+[main (2) ] INFO - 0:00:01.376 - doStartForeground: calling startForeground(), fromOnStartCommand: true, serviceType: 2
+[Main #4 (228) ] INFO - 0:00:01.376 - task: start: clearTempVLCSubFiles
+[Main #5 (229) ] INFO - 0:00:01.377 - task: start: processAppExitReasons
+[Main #6 (230) ] INFO - 0:00:01.378 - task: start: clear transcode tmp files
+[Main #6 (230) ] INFO - 0:00:01.380 - task: end, 2ms: clear transcode tmp files
+[Main #7 (231) ] INFO - 0:00:01.380 - task: start: clear older HLS remux files
+[Main #7 (231) ] INFO - 0:00:01.381 - task: end, 1ms: clear older HLS remux files
+[main (2) ] INFO - 0:00:01.386 - toast: AVERTISSEMENT:
+
+Le logging est activé
+
+[Main #5 (229) ] INFO - 0:00:01.396 - task: end, 19ms: processAppExitReasons
+[main (2) ] INFO - 0:00:01.403 - warning toast: Le logging est activé
+
+[main (2) ] INFO - 0:00:01.405 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:01.406 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:01.407 - Insets: Insets{left=0, top=88, right=0, bottom=45}
+[main (2) ] INFO - 0:00:01.412 - setSeekBarDetailsText:
+[cling-22 (232) ] INFO - 0:00:01.432 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.137:49152/description.xml
+[cling-20 (225) ] INFO - 0:00:01.436 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.138:8080/device/4b5d30eb-34cb-4bcc-806e-a075eebf9cd7/desc.xml
+[cling-24 (234) ] INFO - 0:00:01.439 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.138:8080/device/63623ff4-ee41-4850-90aa-2d39395df981/desc.xml
+[Main #4 (228) ] INFO - 0:00:01.441 - task: end, 66ms: clearTempVLCSubFiles
+[main (2) ] INFO - 0:00:01.443 - onDestroy()@9e5576d:5234
+[main (2) ] INFO - 0:00:01.443 - installed security provider
+[main (2) ] INFO - 0:00:01.444 - MediaPlayerRenderer: onRouteSelected: MediaRouter.RouteInfo{ uniqueId=ROUTE_2e8a299d, name=Toyota Touch, description=Audio Bluetooth, iconUri=null, enabled=true, isSystemRoute=true, connectionState=0, canDisconnect=false, playbackType=0, playbackStream=3, deviceType=3, volumeHandling=1, volume=14, volumeMax=15, presentationDisplayId=-1, extras=null, settingsIntent=null, providerPackageName=android }, BT: true
+[main (2) ] INFO - 0:00:01.445 - onRouteSelected (local): route: MediaRouter.RouteInfo{ uniqueId=ROUTE_2e8a299d, name=Toyota Touch, description=Audio Bluetooth, iconUri=null, enabled=true, isSystemRoute=true, connectionState=0, canDisconnect=false, playbackType=0, playbackStream=3, deviceType=3, volumeHandling=1, volume=14, volumeMax=15, presentationDisplayId=-1, extras=null, settingsIntent=null, providerPackageName=android }, reason: 0
+[main (2) ] INFO - 0:00:01.447 - .b : selected item: France Culture
+[main (2) ] INFO - 0:00:01.448 - .b : selected item: France Culture
+[main (2) ] INFO - 0:00:01.448 - .b : CONNECTIVITY_ACTION
+[main (2) ] INFO - 0:00:01.448 - .b : EXTRA_NO_CONNECTIVITY: false
+[main (2) ] INFO - 0:00:01.448 - .b : EXTRA_REASON: null
+[main (2) ] INFO - 0:00:01.449 - .b : EXTRA_IS_FAILOVER: false
+[main (2) ] INFO - 0:00:01.449 - .b : EXTRA_NETWORK_INFO: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: , failover: false, available: true, roaming: false]
+[main (2) ] INFO - 0:00:01.449 - .b : EXTRA_OTHER_NETWORK_INFO: none
+[main (2) ] INFO - 0:00:01.449 - .b : EXTRA_EXTRA_INFO:
+[main (2) ] INFO - 0:00:01.449 - .b : No network change...ignoring event
+[main (2) ] INFO - 0:00:01.454 - created mini-player (context: com.bubblesoft.android.bubbleupnp.MainTabActivity@2e41698)
+[main (2) ] INFO - 0:00:01.455 - added listener: 1 listeners
+[main (2) ] WARNING - 0:00:01.455 - refreshLocalMediaServerLibraryList: failed to find separator container (1)
+[main (2) ] INFO - 0:00:01.455 - active renderer: none
+[main (2) ] INFO - 0:00:01.462 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:01.462 - saveMediaServerState: Local et Cloud
+[main (2) ] INFO - 0:00:01.464 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:01.465 - saveMediaServerState: Local et Cloud
+[main (2) ] INFO - 0:00:01.465 - positionStack: []
+[main (2) ] INFO - 0:00:01.465 - itemList: Bundle[{firstVisiblePosition=0}]
+[main (2) ] INFO - 0:00:01.466 - containerPath: []
+[main (2) ] INFO - 0:00:01.470 - added listener: 2 listeners
+[main (2) ] INFO - 0:00:01.471 - added listener: 3 listeners
+[main (2) ] INFO - 0:00:01.471 - active renderer: none
+[main (2) ] INFO - 0:00:01.471 - onNetworkSearchStarted
+[AsyncTask #1 (188) ] INFO - 0:00:01.477 - BrowseTask.doInBackground(): enter
+[AsyncTask #1 (188) ] INFO - 0:00:01.477 - BrowseTask.doInBackground(): loading container 'Local et Cloud'
+[cling-23 (Browse) (233) ] INFO - 0:00:01.478 - ObjectID: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:01.478 - BrowseFlag: BrowseDirectChildren
+[cling-23 (Browse) (233) ] INFO - 0:00:01.480 - StartingIndex: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:01.481 - RequestedCount: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:01.481 - Filter: *
+[cling-23 (Browse) (233) ] INFO - 0:00:01.482 - sorted 0 items took: 0 ms
+[cling-23 (Browse) (233) ] WARNING - 0:00:01.483 - webdav: failed to load: /data/user/0/com.bubblesoft.android.bubbleupnp/files/webdavservers: java.io.FileNotFoundException: /data/user/0/com.bubblesoft.android.bubbleupnp/files/webdavservers: open failed: ENOENT (No such file or directory)
+[cling-27 (238) ] INFO - 0:00:01.497 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.254:52424/device.xml
+[cling-23 (Browse) (233) ] INFO - 0:00:01.500 - browsed 10/10 items in 19ms
+[main (2) ] INFO - 0:00:01.569 - added listener: 4 listeners
+[main (2) ] INFO - 0:00:01.569 - remote config: fetch succeeded, activated: false
+[main (2) ] INFO - 0:00:01.632 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:01.633 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:01.706 - inspecting new device: PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.706 - PMOMusic Media Server: No product service found
+[main (2) ] WARNING - 0:00:01.706 - PMOMusic Media Server: no RenderingControl service found
+[main (2) ] INFO - 0:00:01.707 - PMOMusic Media Server: constructed successfully
+[Main #4 (228) ] INFO - 0:00:01.707 - task: start: MediaServer-FetchSupportedMimeType
+[main (2) ] WARNING - 0:00:01.707 - refreshLocalMediaServerLibraryList: failed to find separator container (1)
+[main (2) ] INFO - 0:00:01.707 - no icon for PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.707 - found Media Server: PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.708 - .c :
+
+ Manufacturer: PMOMusic
+ Model name: PMOMusic Media Server
+ UDN: 63623ff4-ee41-4850-90aa-2d39395df981
+
+[main (2) ] INFO - 0:00:01.708 - inspecting new device: Chambre
+[main (2) ] INFO - 0:00:01.708 - Chambre: No product service found
+[main (2) ] INFO - 0:00:01.708 - Chambre: volume range: 0..100
+[main (2) ] INFO - 0:00:01.708 - Chambre: supports SetNextAVTransportURI: true
+[Main #4: MediaServer-FetchSupportedMimeT] WARNING - 0:00:01.722 - PMOMusic Media Server: cannot get ProtocolInfo: null source value
+[Main #4 (228) ] INFO - 0:00:01.722 - task: end, 15ms: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:01.724 - Chambre: protocolInfo: http-get:*:audio/wav:DLNA.ORG_PN=LPCM,http-get:*:audio/x-wav:DLNA.ORG_PN=LPCM,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3X,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAPRO,http-get:*:audio/mpeg:DLNA.ORG_PN=MP2_MPS,http-get:*:audio/mp3:*,http-get:*:audio/wma:*,http-get:*:audio/mpeg:*,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_320,http-get:*:audio/m4a:DLNA.ORG_PN=AAC_ISO,http-get:*:audio/aac:DLNA.ORG_PN=AAC_ISO,http-get:*:audio/ac3:DLNA.ORG_PN=AC3,http-get:*:audio/ogg:*,http-get:*:audio/ape:*,http-get:*:audio/x-ape:*,http-get:*:audio/flac:*
+[main (2) ] INFO - 0:00:01.724 - Chambre: max samplerate: 192000, supports 24-bit: true, supports multichannel: true
+[main (2) ] INFO - 0:00:01.724 - Chambre: supported mime-types: [audio/wav, application/x-wave, audio/wave, application/wave, application/wav, application/x-wav, audio/x-wave, audio/x-wav, audio/mp3, application/mp3, application/x-mp3, audio/mpg, audio/mpeg3, application/mpeg, audio/x-mp3, audio/x-mpegaudio, audio/mpeg, audio/x-mpeg3, audio/x-mpg, audio/x-mpeg, application/mpeg3, audio/x-ms-wma, application/x-ms-wma, application/wma, audio/wma, audio/vnd.dlna.adts, audio/m4a, audio/mp4, application/x-m4b, application/x-m4a, application/x-m4p, application/x-mp4, audio/mpeg4, audio/x-m4b, audio/x-m4a, audio/x-m4p, audio/x-mp4, application/mpeg4, audio/aacp, audio/aac, audio/3gpp, audio/3gpp2, audio/x-aac, audio/ac3, audio/x-ogg, application/x-ogg, audio/vorbis, application/ogg, audio/ogg, application/ape, application/x-ape, audio/monkeys-audio, audio/x-monkeys-audio, audio/ape, application/monkeysaudio, audio/x-monkeysaudio, application/monkeys-audio, audio/x-ape, application/x-monkeys-audio, application/x-monkeysaudio, audio/monkeysaudio, audio/x-flac, application/flac, audio/flac, application/x-flac]
+[main (2) ] INFO - 0:00:01.725 - Chambre: hasSetNextPlayItem: true, supportsSetNextPlayItem: true
+[main (2) ] INFO - 0:00:01.725 - added renderer: Chambre (ip: 192.168.0.233)
+[main (2) ] INFO - 0:00:01.731 - found renderer: Chambre
+[main (2) ] INFO - 0:00:01.731 - .c :
+
+ Manufacturer: Rakoit Technology(SZ) Co., Ltd.
+ Manufacturer URL: https://www.rakoit.com
+ Model name: H50
+ Model description: Arylic Wi-Fi Sound System
+ Model number: V01-Jul 4 2023
+
+ Model URL: https://www.arylic.com
+ Serial number: 00001
+ UDN: FF97F35D-934D-3F36-6EE8-4A26FF97F35D
+
+[main (2) ] INFO - 0:00:01.732 - Chambre: not a Media Server: java.lang.Exception: Chambre: cannot find service ContentDirectory
+[main (2) ] INFO - 0:00:01.733 - refreshLocalMediaServerLibraryList: added: PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.734 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:01.735 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:01.736 - loaded file d38a2dc7-13c1-4a39-ab36-513490cf6766-Bookmarks ok: 0 items, 1 ms
+[main (2) ] INFO - 0:00:01.736 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:01.739 - sorted 2 items took: 2 ms
+[main (2) ] INFO - 0:00:01.740 - sorted 2 items took: 0 ms
+[AsyncTask #1 (188) ] INFO - 0:00:01.743 - finished browsing: got 10 objects
+[AsyncTask #1 (188) ] INFO - 0:00:01.743 - BrowseTask.doInBackground(): no item
+[main (2) ] INFO - 0:00:01.744 - inspecting new device: PMOMusic Audio Renderer
+[main (2) ] INFO - 0:00:01.744 - PMOMusic Audio Renderer: No product service found
+[main (2) ] WARNING - 0:00:01.744 - PMOMusic Audio Renderer: Volume state variable has no range, using default
+[main (2) ] INFO - 0:00:01.745 - PMOMusic Audio Renderer: volume range: 0..100
+[main (2) ] INFO - 0:00:01.745 - PMOMusic Audio Renderer: supports SetNextAVTransportURI: true
+[main (2) ] WARNING - 0:00:01.753 - PMOMusic Audio Renderer: cannot get ProtocolInfo: null sink value, source value: null
+[main (2) ] INFO - 0:00:01.753 - PMOMusic Audio Renderer: supported mime-types: []
+[main (2) ] INFO - 0:00:01.753 - PMOMusic Audio Renderer: hasSetNextPlayItem: true, supportsSetNextPlayItem: true
+[main (2) ] INFO - 0:00:01.753 - added renderer: PMOMusic Audio Renderer (ip: 192.168.0.138)
+[main (2) ] INFO - 0:00:01.754 - no icon for PMOMusic Audio Renderer
+[main (2) ] INFO - 0:00:01.754 - found renderer: PMOMusic Audio Renderer
+[main (2) ] INFO - 0:00:01.754 - .c :
+
+ Manufacturer: PMOMusic
+ Model name: PMOMusic Audio Renderer
+ UDN: 4b5d30eb-34cb-4bcc-806e-a075eebf9cd7
+
+[main (2) ] INFO - 0:00:01.754 - PMOMusic Audio Renderer: not a Media Server: java.lang.Exception: PMOMusic Audio Renderer: cannot find service ContentDirectory
+[main (2) ] INFO - 0:00:01.755 - inspecting new device: Freebox Server
+[main (2) ] INFO - 0:00:01.755 - Freebox Server: No product service found
+[main (2) ] WARNING - 0:00:01.755 - Freebox Server: no RenderingControl service found
+[main (2) ] INFO - 0:00:01.755 - Freebox Server: constructed successfully
+[Main #4 (228) ] INFO - 0:00:01.755 - task: start: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:01.756 - refreshLocalMediaServerLibraryList: removed: PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.756 - refreshLocalMediaServerLibraryList: added: Freebox Server
+[main (2) ] INFO - 0:00:01.756 - refreshLocalMediaServerLibraryList: added: PMOMusic Media Server
+[main (2) ] INFO - 0:00:01.757 - sorted 2 items took: 0 ms
+[main (2) ] INFO - 0:00:01.758 - found Media Server: Freebox Server
+[main (2) ] INFO - 0:00:01.758 - .c :
+
+ Manufacturer: Freebox SAS
+ Manufacturer URL: http://www.freebox.fr
+ Model name: Freebox Media Server
+ Model description: Freebox UPnP Media Server
+ Model number: 1
+ Model URL: http://www.freebox.fr
+ Serial number: 1
+ UDN: e929a46e-d218-377d-2dde-32bd8080dfbf
+
+[main (2) ] INFO - 0:00:01.758 - inspecting new device: Glouglou Box
+[main (2) ] INFO - 0:00:01.759 - Glouglou Box: No product service found
+[main (2) ] INFO - 0:00:01.759 - Glouglou Box: volume range: 0..100
+[main (2) ] INFO - 0:00:01.759 - Glouglou Box: supports SetNextAVTransportURI: false
+[Main #4: MediaServer-FetchSupportedMimeT] INFO - 0:00:01.766 - Freebox Server supported mime-types: [image/jpeg, image/jpeg, image/jpeg, image/jpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mpeg, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/mp4, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/vnd.dlna.mpeg-tts, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/x-ms-wmv, video/3gpp, video/3gpp, audio/mpeg, audio/x-ms-wma, audio/x-ms-wma, audio/x-ms-wma, audio/x-ms-wma, audio/x-ms-wma, audio/mp4, audio/mp4, audio/mp4, audio/3gpp, audio/mp4, audio/mp4, audio/L16, image/jpeg, video/avi, video/divx, video/x-matroska, video/mpeg, video/mp4, video/x-ms-wmv, video/x-msvideo, video/x-flv, video/x-tivo-mpeg, video/quicktime, audio/mp4, audio/x-wav, audio/x-flac, application/ogg]
+[Main #4 (228) ] INFO - 0:00:01.767 - task: end, 11ms: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:01.777 - Glouglou Box: protocolInfo: http-get:*:audio/wav:DLNA.ORG_PN=LPCM,http-get:*:audio/x-wav:DLNA.ORG_PN=LPCM,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3X,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAPRO,http-get:*:audio/mpeg:DLNA.ORG_PN=MP2_MPS,http-get:*:audio/mp3:*,http-get:*:audio/wma:*,http-get:*:audio/mpeg:*,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_320,http-get:*:audio/m4a:DLNA.ORG_PN=AAC_ISO,http-get:*:audio/aac:DLNA.ORG_PN=AAC_ISO,http-get:*:audio/ac3:DLNA.ORG_PN=AC3,http-get:*:audio/ogg:*,http-get:*:audio/ape:*,http-get:*:audio/x-ape:*,http-get:*:audio/flac:*
+[main (2) ] INFO - 0:00:01.777 - Glouglou Box: max samplerate: 192000, supports 24-bit: true, supports multichannel: true
+[main (2) ] INFO - 0:00:01.778 - Glouglou Box: supported mime-types: [audio/wav, application/x-wave, audio/wave, application/wave, application/wav, application/x-wav, audio/x-wave, audio/x-wav, audio/mp3, application/mp3, application/x-mp3, audio/mpg, audio/mpeg3, application/mpeg, audio/x-mp3, audio/x-mpegaudio, audio/mpeg, audio/x-mpeg3, audio/x-mpg, audio/x-mpeg, application/mpeg3, audio/x-ms-wma, application/x-ms-wma, application/wma, audio/wma, audio/vnd.dlna.adts, audio/m4a, audio/mp4, application/x-m4b, application/x-m4a, application/x-m4p, application/x-mp4, audio/mpeg4, audio/x-m4b, audio/x-m4a, audio/x-m4p, audio/x-mp4, application/mpeg4, audio/aacp, audio/aac, audio/3gpp, audio/3gpp2, audio/x-aac, audio/ac3, audio/x-ogg, application/x-ogg, audio/vorbis, application/ogg, audio/ogg, application/ape, application/x-ape, audio/monkeys-audio, audio/x-monkeys-audio, audio/ape, application/monkeysaudio, audio/x-monkeysaudio, application/monkeys-audio, audio/x-ape, application/x-monkeys-audio, application/x-monkeysaudio, audio/monkeysaudio, audio/x-flac, application/flac, audio/flac, application/x-flac]
+[main (2) ] INFO - 0:00:01.778 - Glouglou Box: hasSetNextPlayItem: false, supportsSetNextPlayItem: false
+[main (2) ] INFO - 0:00:01.779 - added renderer: Glouglou Box (ip: 192.168.0.137)
+[main (2) ] INFO - 0:00:01.779 - found renderer: Glouglou Box
+[main (2) ] INFO - 0:00:01.779 - .c :
+
+ Manufacturer: Harman International Industries Inc
+ Manufacturer URL: https://www.harman.com
+ Model name: JBL Authentics 300
+ Model description: JBL soundbar
+ Model number: V01-May 21 2025
+
+ Model URL: https://www.jbl.com
+ Serial number: 00001
+ UDN: FFB8F005-0874-39C2-7E46-EF53FFB8F005
+
+[main (2) ] INFO - 0:00:01.780 - Glouglou Box: not a Media Server: java.lang.Exception: Glouglou Box: cannot find service ContentDirectory
+[main (2) ] INFO - 0:00:01.783 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:01.784 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[glide-disk-cache-thread-0 (243) ] INFO - 0:00:01.813 - Glide: registered GlideUrl loader
+[glide-disk-cache-thread-0 (243) ] INFO - 0:00:01.813 - created okhttp/5.3.2 client
+[cling-23 (233) ] INFO - 0:00:01.814 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.200:49152/uuid-2899a4df-39ae-160a-6563-dca6329ead0d/description.xml
+[main (2) ] INFO - 0:00:01.965 - inspecting new device: pizzicato-Music
+[main (2) ] INFO - 0:00:01.965 - pizzicato-Music: found OpenHome device
+[main (2) ] INFO - 0:00:01.966 - pizzicato-Music: Found Product service
+[main (2) ] INFO - 0:00:01.966 - pizzicato-Music: Found Playlist service
+[main (2) ] INFO - 0:00:01.966 - pizzicato-Music: Found Time service
+[main (2) ] INFO - 0:00:01.967 - pizzicato-Music: Found Volume service
+[main (2) ] INFO - 0:00:01.981 - pizzicato-Music: Found Info service
+[main (2) ] INFO - 0:00:01.982 - pizzicato-Music: Found Credentials service
+[main (2) ] INFO - 0:00:02.33 - pizzicato-Music: adding audio/x-dsf and audio/x-dff due to audio/x-dsd presence
+[main (2) ] INFO - 0:00:02.33 - pizzicato-Music: protocolInfo: http-get:*:audio/L16:DLNA.ORG_PN=LPCM,http-get:*:application/flac:*,http-get:*:application/x-flac:*,http-get:*:application/ogg:*,http-get:*:application/vnd.apple.mpegurl:*,http-get:*:application/x-mpegurl:*,http-get:*:audio/flac:*,http-get:*:audio/x-flac:*,http-get:*:audio/aac:*,http-get:*:audio/x-aiff:*,http-get:*:audio/aif:*,http-get:*:audio/aiff:*,http-get:*:audio/dff:*,http-get:*:audio/x-dff:*,http-get:*:audio/dsd:*,http-get:*:audio/x-dsd:*,http-get:*:audio/dsf:*,http-get:*:audio/x-dsf:*,http-get:*:audio/m4a:*,http-get:*:audio/x-m4a:*,http-get:*:audio/matroska:*,http-get:*:audio/x-matroska:*,http-get:*:audio/mp1:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/mpeg:*,http-get:*:audio/x-mpeg:*,http-get:*:audio/ogg:*,http-get:*:audio/vorbis:*,http-get:*:audio/x-ape:*,http-get:*:audio/ape:*,http-get:*:audio/x-monkeys-audio:*,http-get:*:audio/wav:*,http-get:*:audio/x-wav:*,http-get:*:audio/wave:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/x-ogg:*,http-get:*:audio/x-scpls:*,http-get:*:audio/x-vorbis+ogg:*,http-get:*:audio/x-vorbis:*,http-get:*:audio/x-wavpack:*,http-get:*:video/mp4:*
+[main (2) ] INFO - 0:00:02.33 - pizzicato-Music: supported mime-types: [audio/lpcm, audio/L16, audio/l16, audio/x-flac, application/flac, audio/flac, application/x-flac, audio/x-ogg, application/x-ogg, audio/vorbis, application/ogg, audio/ogg, application/vnd.apple.mpegurl, application/x-mpegurl, audio/aacp, audio/aac, audio/3gpp, audio/3gpp2, audio/x-aac, application/aiff, audio/aiff, application/x-aif, application/aif, application/x-aiff, audio/x-aifc, audio/x-aiff, audio/aif, audio/aifc, audio/x-aif, audio/dff, audio/x-dff, audio/x-dsd, audio/dsd, audio/x-dsf, audio/dsf, audio/m4a, audio/mp4, application/x-m4b, application/x-m4a, application/x-m4p, application/x-mp4, audio/mpeg4, audio/x-m4b, audio/x-m4a, audio/x-m4p, audio/x-mp4, application/mpeg4, audio/matroska, audio/x-matroska, audio/mp1, application/mp1, audio/mp3, application/mp3, application/x-mp3, audio/mpg, audio/mpeg3, application/mpeg, audio/x-mp3, audio/x-mpegaudio, audio/mpeg, audio/x-mpeg3, audio/x-mpg, audio/x-mpeg, application/mpeg3, application/ape, application/x-ape, audio/monkeys-audio, audio/x-monkeys-audio, audio/ape, application/monkeysaudio, audio/x-monkeysaudio, application/monkeys-audio, audio/x-ape, application/x-monkeys-audio, application/x-monkeysaudio, audio/monkeysaudio, audio/wav, application/x-wave, audio/wave, application/wave, application/wav, application/x-wav, audio/x-wave, audio/x-wav, audio/x-ms-wma, application/x-ms-wma, application/wma, audio/wma, audio/x-scpls, audio/x-vorbis+ogg, audio/x-vorbis, audio/wavpack, application/x-wavpack, audio/x-wv, application/wavpack, audio/wv, audio/x-wavpack, application/wv, application/x-wv, video/mp4v-es, video/mp4, video/3gpp]
+[main (2) ] INFO - 0:00:02.34 - pizzicato-Music: volume range: 0..100
+[main (2) ] INFO - 0:00:02.34 - added renderer: pizzicato-Music (ip: 192.168.0.200)
+[main (2) ] INFO - 0:00:02.35 - qobuz: user auth token: unset
+[main (2) ] INFO - 0:00:02.35 - qobuz: cleared credentials
+[main (2) ] INFO - 0:00:02.35 - qobuz: username: set
+[main (2) ] INFO - 0:00:02.36 - tidal: session: unset
+[main (2) ] INFO - 0:00:02.36 - tidal: reset
+[main (2) ] INFO - 0:00:02.36 - fireRootContentChanged
+[main (2) ] INFO - 0:00:02.37 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:02.38 - saveMediaServerState: Local et Cloud
+[main (2) ] INFO - 0:00:02.38 - positionStack: []
+[main (2) ] INFO - 0:00:02.38 - itemList: Bundle[{firstVisiblePosition=0}]
+[main (2) ] INFO - 0:00:02.39 - containerPath: []
+[main (2) ] INFO - 0:00:02.40 - active renderer: pizzicato-Music
+[AsyncTask #1 (188) ] INFO - 0:00:02.40 - BrowseTask.doInBackground(): enter
+[main (2) ] INFO - 0:00:02.41 - supports video: false
+[AsyncTask #1 (188) ] INFO - 0:00:02.41 - BrowseTask.doInBackground(): loading container 'Local et Cloud'
+[main (2) ] INFO - 0:00:02.41 - tidal: OH token id: null
+[main (2) ] INFO - 0:00:02.41 - pizzicato-Music: control volume with pizzicato-Music
+[cling-23 (Browse) (233) ] INFO - 0:00:02.41 - ObjectID: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:02.42 - BrowseFlag: BrowseDirectChildren
+[cling-23 (Browse) (233) ] INFO - 0:00:02.42 - StartingIndex: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:02.42 - RequestedCount: 0
+[cling-23 (Browse) (233) ] INFO - 0:00:02.42 - Filter: *
+[cling-23 (Browse) (233) ] INFO - 0:00:02.43 - sorted 0 items took: 0 ms
+[cling-23 (Browse) (233) ] INFO - 0:00:02.45 - browsed 10/10 items in 3ms
+[main (2) ] INFO - 0:00:02.57 - pizzicato-Music: onSourceChange: Playlist
+[main (2) ] INFO - 0:00:02.57 - pizzicato-Music: started subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Product
+[main (2) ] INFO - 0:00:02.58 - pizzicato-Music: started subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Playlist
+[main (2) ] INFO - 0:00:02.58 - pizzicato-Music: started subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Info
+[main (2) ] INFO - 0:00:02.59 - pizzicato-Music: started subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Credentials
+[main (2) ] INFO - 0:00:02.59 - pizzicato-Music: started subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Volume
+[main (2) ] INFO - 0:00:02.60 - onSourceChange: Playlist
+[main (2) ] INFO - 0:00:02.60 - selected item changed (service):
+[main (2) ] INFO - 0:00:02.62 - image file cache is enabled: /storage/emulated/0/Android/data/com.bubblesoft.android.bubbleupnp/cache/images
+[main (2) ] INFO - 0:00:02.63 - enabled image file cache
+[cling-33 (249) ] INFO - 0:00:02.71 - pizzicato-Music: Established subscription uuid:f7dc376c-5f8d-8a98-7d14-71f0fa05c524 on service (n) ServiceId: urn:av-openhome-org:serviceId:Product
+[cling-33 (249) ] INFO - 0:00:02.79 - pizzicato-Music: Established subscription uuid:b8a97f58-4648-e08f-afc9-b4705c681ad0 on service (n) ServiceId: urn:av-openhome-org:serviceId:Credentials
+[main (2) ] INFO - 0:00:02.91 - ignoreTransportStateChangeForTrackAdvance: false, allowTrackAdvance: true
+[main (2) ] INFO - 0:00:02.92 - SETACTIVE: onTransportStateChanged: post STOP callback
+[cling-28 (244) ] INFO - 0:00:02.97 - pizzicato-Music: Established subscription uuid:90204e20-0c37-40d8-bc3a-8d50647db5bb on service (n) ServiceId: urn:av-openhome-org:serviceId:Info
+[cling-29 (245) ] INFO - 0:00:02.110 - pizzicato-Music: Established subscription uuid:172cf961-f52f-73b1-bfc7-8ba9f3904e95 on service (n) ServiceId: urn:av-openhome-org:serviceId:Playlist
+[main (2) ] INFO - 0:00:02.124 - VolumeProvider: created for 'pizzicato-Music'
+[cling-23 (233) ] INFO - 0:00:02.131 - pizzicato-Music: Established subscription uuid:05c4a4a9-fc16-b9e0-dcb9-f53368484a67 on service (n) ServiceId: urn:av-openhome-org:serviceId:Volume
+[main (2) ] INFO - 0:00:02.145 - active renderer: pizzicato-Music
+[main (2) ] INFO - 0:00:02.145 - addListener (context: com.bubblesoft.android.bubbleupnp.MainTabActivity@2e41698)
+[main (2) ] INFO - 0:00:02.146 - active renderer: pizzicato-Music
+[main (2) ] INFO - 0:00:02.146 - onNetworkSearchEnded
+[main (2) ] INFO - 0:00:02.158 - active renderer: pizzicato-Music
+[main (2) ] INFO - 0:00:02.158 - source changed: Playlist
+[main (2) ] INFO - 0:00:02.158 - selected item changed (now playing):
+[main (2) ] INFO - 0:00:02.158 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:02.160 - no icon for pizzicato-Music
+[main (2) ] INFO - 0:00:02.160 - found renderer: pizzicato-Music
+[main (2) ] INFO - 0:00:02.161 - .c :
+
+ Manufacturer: JF Light Industries
+ Manufacturer URL: https://framagit.org/medoc92
+ Model name: UpMPD
+ Model description: UPnP front-end to MPD
+ Model number: 42
+ Model URL: https://framagit.org/medoc92/upmpdcli/code/
+ Serial number: upmpdcli version 1.9.5 libupnpp 1.0.2 mpd 0.23.5
+ UDN: 2899a4df-39ae-160a-6563-dca6329ead0d
+
+[main (2) ] INFO - 0:00:02.161 - pizzicato-Music: not a Media Server: java.lang.Exception: pizzicato-Music: cannot find service ContentDirectory
+[main (2) ] INFO - 0:00:02.162 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:02.163 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:02.163 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:02.169 - refreshLocalMediaServerLibraryList: added: Freebox Server
+[main (2) ] INFO - 0:00:02.170 - refreshLocalMediaServerLibraryList: added: PMOMusic Media Server
+[main (2) ] INFO - 0:00:02.170 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:02.170 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:02.171 - loaded file d38a2dc7-13c1-4a39-ab36-513490cf6766-Bookmarks ok: 0 items, 1 ms
+[main (2) ] INFO - 0:00:02.171 - sorted 0 items took: 0 ms
+[main (2) ] INFO - 0:00:02.172 - sorted 2 items took: 0 ms
+[main (2) ] INFO - 0:00:02.172 - sorted 2 items took: 0 ms
+[main (2) ] INFO - 0:00:02.173 - pizzicato-Music: Credentials: supported ids: [qobuz.com]
+[AsyncTask #1 (188) ] INFO - 0:00:02.174 - finished browsing: got 10 objects
+[AsyncTask #1 (188) ] INFO - 0:00:02.175 - BrowseTask.doInBackground(): no item
+[main (2) ] INFO - 0:00:02.188 - pizzicato-Music: CredentialsSubscriptionCallback.getAction(qobuz.com): username: unset, password: unset, enabled: true, status: null, data: set
+[main (2) ] INFO - 0:00:02.189 - onStandbyChange: standby=false, ignore=true
+[main (2) ] INFO - 0:00:02.189 - onStandbyChange: standby=false, ignore=true
+[main (2) ] INFO - 0:00:02.189 - onStandbyChange: standby=false, ignore=true
+[main (2) ] INFO - 0:00:02.189 - setSeekBarDetailsText:
+[main (2) ] WARNING - 0:00:02.190 - .b : couldn't find item trackId = 22
+[main (2) ] INFO - 0:00:02.191 - selected item changed (service):
+[Main #4 (228) ] INFO - 0:00:02.190 - task: start: AbstractPlaylistService-FirstIdArray
+[Main #4: AbstractPlaylistService-FirstId] INFO - 0:00:02.191 - pizzicato-Music: reading 1 new items to insert: [22]
+[Main #4: AbstractPlaylistService-FirstId] INFO - 0:00:02.192 - pizzicato-Music: getting [0..1[
+[main (2) ] INFO - 0:00:02.207 - selected item changed (now playing):
+[main (2) ] INFO - 0:00:02.208 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:02.209 - ignoreTransportStateChangeForTrackAdvance: false, allowTrackAdvance: true
+[Main #4 (228) ] INFO - 0:00:02.209 - task: end, 20ms: AbstractPlaylistService-FirstIdArray
+[main (2) ] INFO - 0:00:02.224 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:02.225 - pizzicato-Music: AbstractRenderer.onVolumeChange: 100
+[main (2) ] INFO - 0:00:02.226 - VolumeProvider: onVolumeChanged: 100
+[main (2) ] INFO - 0:00:02.238 - pizzicato-Music: MainFragmentBase.onVolumeChange: 100
+[main (2) ] INFO - 0:00:02.238 - pizzicato-Music: MainFragmentBase.onVolumeChange: 100
+[main (2) ] INFO - 0:00:02.238 - pizzicato-Music: MainFragmentBase.onVolumeChange: 100
+[main (2) ] INFO - 0:00:02.239 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:02.239 - pizzicato-Music: AbstractRenderer.onMuteChange: false
+[main (2) ] INFO - 0:00:02.252 - setSeekBarDetailsText:
+[main (2) ] INFO - 0:00:02.253 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:02.253 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:02.254 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:02.290 - qobuz: Linn status: null
+[main (2) ] INFO - 0:00:02.290 - qobuz: username: unset
+[main (2) ] INFO - 0:00:02.290 - qobuz: set custom app id
+[main (2) ] INFO - 0:00:02.290 - qobuz: user auth token: unset
+[main (2) ] INFO - 0:00:02.311 - .b : selected item (track id): The Curse
+[main (2) ] INFO - 0:00:02.312 - selected item changed (service): The Curse
+[main (2) ] INFO - 0:00:02.328 - selected item changed (now playing): The Curse
+[main (2) ] INFO - 0:00:02.343 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:02.343 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:02.347 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:02.885 - onRouteAdded 3d57e3df7b480b761c03a9d89520d61b => MediaRouter.RouteInfo{ uniqueId=com.google.android.gms/.cast.media.CastMediaRoute2ProviderService_Persistent:3d57e3df7b480b761c03a9d89520d61b, name=Glouglou Box, description=JBL Authentics 300, iconUri=null, enabled=true, isSystemRoute=false, connectionState=0, canDisconnect=false, playbackType=1, playbackStream=-1, deviceType=2, volumeHandling=0, volume=0, volumeMax=50, presentationDisplayId=-1, extras=Bundle[{com.google.android.gms.cast.EXTRA_CAST_DEVICE="G10x" (3d57e3df7b480b761c03a9d89520d61b) }], settingsIntent=null, providerPackageName=com.google.android.gms }
+[main (2) ] INFO - 0:00:02.887 - Glouglou Box: No product service found
+[main (2) ] WARNING - 0:00:02.887 - Glouglou Box: no RenderingControl service found
+[main (2) ] INFO - 0:00:02.888 - Glouglou Box: url: http://192.168.0.137:8008, device version: 5, model name: JBL Authentics 300, service port: 8009, video out: false, video in: false, audio out: true, audio in: false, multizone group: false
+[main (2) ] INFO - 0:00:02.888 - Glouglou Box: no video out support
+[main (2) ] INFO - 0:00:02.894 - added renderer: Glouglou Box (ip: 192.168.0.137)
+[Main #4 (228) ] INFO - 0:00:02.894 - task: start: ChromecastRenderer-FetchNetworkConnectionType
+[main (2) ] INFO - 0:00:02.904 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:02.904 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:02.905 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[Main #4: ChromecastRenderer-FetchNetwork] INFO - 0:00:02.917 - Glouglou Box: ethernet connected: false, isCCwGTV: false
+[Main #4 (228) ] INFO - 0:00:02.917 - task: end, 24ms: ChromecastRenderer-FetchNetworkConnectionType
+[cling-29 (245) ] INFO - 0:00:03.92 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.34:8096/dlna/526dedec-fde2-4224-bac6-06f7b11711cf/description.xml
+[main (2) ] INFO - 0:00:03.140 - inspecting new device: fenice
+[main (2) ] INFO - 0:00:03.140 - fenice: No product service found
+[main (2) ] WARNING - 0:00:03.140 - fenice: no RenderingControl service found
+[main (2) ] INFO - 0:00:03.140 - fenice: constructed successfully
+[main (2) ] INFO - 0:00:03.141 - refreshLocalMediaServerLibraryList: removed: Freebox Server
+[main (2) ] INFO - 0:00:03.141 - refreshLocalMediaServerLibraryList: removed: PMOMusic Media Server
+[main (2) ] INFO - 0:00:03.141 - refreshLocalMediaServerLibraryList: added: fenice
+[main (2) ] INFO - 0:00:03.141 - refreshLocalMediaServerLibraryList: added: Freebox Server
+[main (2) ] INFO - 0:00:03.141 - refreshLocalMediaServerLibraryList: added: PMOMusic Media Server
+[Main #4 (228) ] INFO - 0:00:03.142 - task: start: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:03.142 - sorted 2 items took: 0 ms
+[main (2) ] INFO - 0:00:03.142 - found Media Server: fenice
+[main (2) ] INFO - 0:00:03.143 - .c :
+
+ Manufacturer: Jellyfin
+ Manufacturer URL: https://github.com/jellyfin/jellyfin
+ Model name: Jellyfin Server
+ Model description: UPnP/AV 1.0 Compliant Media Server
+ Model number: 01
+ Model URL: https://github.com/jellyfin/jellyfin
+ Presentation URL: http://192.168.0.34:8096/web/index.html
+ Serial number: 526dedecfde24224bac606f7b11711cf
+ UDN: 526dedec-fde2-4224-bac6-06f7b11711cf
+
+[cling-29 (245) ] INFO - 0:00:03.143 - .f : Sending device descriptor retrieval message: (c) GET http://192.168.0.200:49152/uuid-c110358f-d885-b44a-d6d3-dca6329ead0d/description.xml
+[main (2) ] INFO - 0:00:03.153 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:03.154 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:03.154 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[Main #4: MediaServer-FetchSupportedMimeT] INFO - 0:00:03.163 - fenice supported mime-types: [video/mpeg, video/mp4, video/vnd.dlna.mpeg-tts, video/avi, video/x-matroska, video/x-ms-wmv, video/wtv, audio/mpeg, audio/mp3, audio/mp4, audio/x-ms-wma, audio/wav, audio/L16, image/jpeg, image/png, image/gif, image/tiff]
+[Main #4 (228) ] INFO - 0:00:03.163 - task: end, 21ms: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:03.192 - inspecting new device: pizzicato-Music-mediaserver
+[main (2) ] INFO - 0:00:03.192 - pizzicato-Music-mediaserver: No product service found
+[main (2) ] WARNING - 0:00:03.193 - pizzicato-Music-mediaserver: no RenderingControl service found
+[main (2) ] INFO - 0:00:03.193 - pizzicato-Music-mediaserver: constructed successfully
+[Main #4 (228) ] INFO - 0:00:03.193 - task: start: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:03.193 - refreshLocalMediaServerLibraryList: removed: fenice
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: removed: Freebox Server
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: removed: PMOMusic Media Server
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: added: fenice
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: added: Freebox Server
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: added: pizzicato-Music-mediaserver
+[main (2) ] INFO - 0:00:03.194 - refreshLocalMediaServerLibraryList: added: PMOMusic Media Server
+[main (2) ] INFO - 0:00:03.195 - sorted 2 items took: 0 ms
+[main (2) ] INFO - 0:00:03.195 - found Media Server: pizzicato-Music-mediaserver
+[main (2) ] INFO - 0:00:03.195 - .c :
+
+ Manufacturer: lesbonscomptes.com/upmpdcli
+ Model name: Upmpdcli Media Server
+ UDN: c110358f-d885-b44a-d6d3-dca6329ead0d
+
+[main (2) ] INFO - 0:00:03.203 - onCreateOptionsMenu()@2af0cf8/2e41698:5234
+[main (2) ] WARNING - 0:00:03.204 - getBubbleUPnPServerFFmpegDecodeREST: not supported for OpenHome renderers
+[main (2) ] INFO - 0:00:03.204 - onPrepareOptionsMenu()@2af0cf8/2e41698:5234
+[Main #4: MediaServer-FetchSupportedMimeT] WARNING - 0:00:03.210 - pizzicato-Music-mediaserver: cannot get ProtocolInfo: null source value
+[Main #4 (228) ] INFO - 0:00:03.210 - task: end, 17ms: MediaServer-FetchSupportedMimeType
+[main (2) ] INFO - 0:00:04.85 - onPause()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:04.86 - removed listener: 3 listeners
+[main (2) ] INFO - 0:00:04.87 - onResume()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:04.88 - addListener (context: com.bubblesoft.android.bubbleupnp.MainTabActivity@2e41698)
+[main (2) ] INFO - 0:00:04.89 - onStandbyChange: standby=false, ignore=true
+[main (2) ] INFO - 0:00:04.89 - pizzicato-Music: MainFragmentBase.onVolumeChange: 100
+[main (2) ] INFO - 0:00:04.95 - onCreateOptionsMenu()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:04.97 - onPrepareOptionsMenu()@ec98be8/2e41698:5234
+[pool-13-thread-1 (261) ] INFO - 0:00:05.492 - ProfileInstaller: Compiled with profile
+[main (2) ] INFO - 0:00:08.888 - path = [server://63623ff4-ee41-4850-90aa-2d39395df981]
+[main (2) ] INFO - 0:00:08.889 - active media server: PMOMusic Media Server
+[main (2) ] INFO - 0:00:08.890 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:08.891 - saveMediaServerState: PMOMusic Media Server
+[main (2) ] INFO - 0:00:08.892 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:08.893 - saveMediaServerState: PMOMusic Media Server
+[main (2) ] INFO - 0:00:08.893 - positionStack: [6]
+[main (2) ] INFO - 0:00:08.893 - itemList: Bundle[{firstVisiblePosition=0}]
+[main (2) ] INFO - 0:00:08.894 - containerPath: []
+[main (2) ] INFO - 0:00:08.897 - onCreateOptionsMenu()@ec98be8/2e41698:5234
+[AsyncTask #1 (188) ] INFO - 0:00:08.897 - BrowseTask.doInBackground(): enter
+[AsyncTask #1 (188) ] INFO - 0:00:08.898 - BrowseTask.doInBackground(): loading container 'PMOMusic Media Server'
+[main (2) ] INFO - 0:00:08.899 - onPrepareOptionsMenu()@ec98be8/2e41698:5234
+[cling-13 (Browse) (218) ] WARNING - 0:00:09.12 - .b : Action: Browse: didlXML=4: java.lang.IllegalArgumentException: field com.bubblesoft.upnp.mediaserver.MediaServer$BrowseResult.didlXML has type java.lang.String, got java.lang.Long, class=java.lang.Long
+[cling-13 (Browse) (218) ] WARNING - 0:00:09.13 - .b : Action: Browse: numberReturned=
+
+
+ Main Mix
+ object.container
+
+
+ Mellow Mix
+ object.container
+
+
+ Rock Mix
+ object.container
+
+
+ Eclectic Mix
+ object.container
+
+: java.lang.IllegalArgumentException: field com.bubblesoft.upnp.mediaserver.MediaServer$BrowseResult.numberReturned has type long, got java.lang.String, class=java.lang.String
+[AsyncTask #1 (188) ] WARNING - 0:00:09.18 - Server returned 0 items and totalMatches not 0
+[AsyncTask #1 (188) ] INFO - 0:00:09.19 - finished browsing: got 4 objects
+[AsyncTask #1 (188) ] INFO - 0:00:09.20 - BrowseTask.doInBackground(): no item
+[main (2) ] INFO - 0:00:20.194 - onPause()@2e41698:5234
+[main (2) ] INFO - 0:00:20.198 - onPause()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:20.198 - removed listener: 2 listeners
+[main (2) ] INFO - 0:00:20.201 - removeListener (context: com.bubblesoft.android.bubbleupnp.MainTabActivity@2e41698)
+[main (2) ] INFO - 0:00:20.201 - removed listener: 1 listeners
+[main (2) ] INFO - 0:00:20.202 - SETACTIVE: onMainTabActivityPause: setInactive()
+[main (2) ] INFO - 0:00:20.203 - pizzicato-Music: stopped subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Product
+[main (2) ] INFO - 0:00:20.203 - pizzicato-Music: stopped subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Playlist
+[main (2) ] INFO - 0:00:20.203 - pizzicato-Music: stopped subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Info
+[main (2) ] INFO - 0:00:20.204 - pizzicato-Music: stopped subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Credentials
+[main (2) ] INFO - 0:00:20.204 - pizzicato-Music: stopped subscription callback for service (n) ServiceId: urn:av-openhome-org:serviceId:Volume
+[main (2) ] INFO - 0:00:20.394 - onStop()@2e41698:5234
+[main (2) ] INFO - 0:00:20.395 - onStop()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:20.396 - onStop()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:20.397 - onStop()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:20.398 - onSaveInstanceState(outState)@2e41698:5234
+[main (2) ] INFO - 0:00:20.401 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:20.402 - onSaveInstanceState()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:20.404 - onSaveInstanceState()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:21.63 - onDestroy()@2e41698:5234
+[main (2) ] INFO - 0:00:21.64 - onDestroyView()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:21.65 - onDestroy()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:21.66 - onDetach()@2af0cf8/2e41698:5234
+[main (2) ] INFO - 0:00:21.67 - onDestroyView()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:21.68 - onDestroy()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:21.68 - removed listener: 0 listeners
+[main (2) ] INFO - 0:00:21.69 - onDetach()@5f65d35/2e41698:5234
+[main (2) ] INFO - 0:00:21.70 - onDestroyView()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:21.70 - removeListener (context: com.bubblesoft.android.bubbleupnp.MainTabActivity@2e41698)
+[main (2) ] INFO - 0:00:21.71 - onSaveInstanceState()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:21.71 - saveMediaServerState: PMOMusic Media Server
+[main (2) ] INFO - 0:00:21.71 - positionStack: []
+[main (2) ] INFO - 0:00:21.71 - itemList: Bundle[{firstVisiblePosition=0}]
+[main (2) ] INFO - 0:00:21.72 - containerPath: []
+[main (2) ] INFO - 0:00:21.72 - refreshLocalMediaServerLibraryList: removed: fenice
+[main (2) ] INFO - 0:00:21.72 - refreshLocalMediaServerLibraryList: removed: Freebox Server
+[main (2) ] INFO - 0:00:21.72 - refreshLocalMediaServerLibraryList: removed: pizzicato-Music-mediaserver
+[main (2) ] INFO - 0:00:21.72 - refreshLocalMediaServerLibraryList: removed: PMOMusic Media Server
+[main (2) ] INFO - 0:00:21.73 - onDestroy()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:21.74 - onDetach()@ec98be8/2e41698:5234
+[main (2) ] INFO - 0:00:21.81 - onTaskRemoved: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 xflg=0x4 cmp=com.bubblesoft.android.bubbleupnp/.MainActivity }, mode: 2
+[main (2) ] INFO - 0:00:31.347 - performDeviceSearch: search done
+[main (2) ] SEVERE - 0:00:31.348 - watchdog: device search--: 0
+[main (2) ] INFO - 0:00:59.578 - ACTION_SCREEN_OFF
diff --git a/pmomediaserver/src/content_handler.rs b/pmomediaserver/src/content_handler.rs
index 42a67103..24e4bdbe 100644
--- a/pmomediaserver/src/content_handler.rs
+++ b/pmomediaserver/src/content_handler.rs
@@ -123,12 +123,20 @@ impl ContentHandler {
container.child_count = None; // compatibilité CP
let didl = to_didl_lite(&[container], &[])?;
let update_id = source.update_id().await.max(1);
+ tracing::debug!(
+ "BrowseMetadata root (flatten) didl_len={}B",
+ didl.len()
+ );
return Ok((didl, 1, 1, update_id));
}
// Sinon retourner le container racine agrégé
let root = self.build_root_container().await;
let didl = to_didl_lite(&[root], &[])?;
+ tracing::debug!(
+ "BrowseMetadata root (aggregate) didl_len={}B",
+ didl.len()
+ );
Ok((didl, 1, 1, 1))
} else {
// Essayer de trouver l'objet dans les sources
@@ -140,6 +148,11 @@ impl ContentHandler {
.map_err(|e| format!("Failed to get root container: {}", e))?;
let didl = to_didl_lite(&[container], &[])?;
let update_id = source.update_id().await.max(1);
+ tracing::debug!(
+ "BrowseMetadata source_root id={} didl_len={}B",
+ object_id,
+ didl.len()
+ );
return Ok((didl, 1, 1, update_id));
}
@@ -149,6 +162,11 @@ impl ContentHandler {
Ok(item) => {
let didl = to_didl_lite(&[], &[item])?;
let update_id = source.update_id().await.max(1);
+ tracing::debug!(
+ "BrowseMetadata item id={} didl_len={}B",
+ object_id,
+ didl.len()
+ );
return Ok((didl, 1, 1, update_id));
}
Err(MusicSourceError::ObjectNotFound(_))
diff --git a/pmoparadise/src/source.rs b/pmoparadise/src/source.rs
index df135d97..6d4bc054 100644
--- a/pmoparadise/src/source.rs
+++ b/pmoparadise/src/source.rs
@@ -188,7 +188,7 @@ impl RadioParadiseSource {
parent_id: "radio-paradise".to_string(),
restricted: Some("1".to_string()),
child_count: None,
- searchable: Some("0".to_string()),
+ searchable: Some("1".to_string()),
title: descriptor.display_name.to_string(),
class: "object.container".to_string(),
containers: vec![],
@@ -357,7 +357,7 @@ impl MusicSource for RadioParadiseSource {
restricted: Some("1".to_string()),
// childCount retiré pour éviter les soucis de compatibilité côté CP
child_count: None,
- searchable: Some("0".to_string()),
+ searchable: Some("1".to_string()),
title: "Radio Paradise".to_string(),
class: "object.container".to_string(),
containers: vec![],
diff --git a/pmoupnp/src/actions/arg_inst_set_methods.rs b/pmoupnp/src/actions/arg_inst_set_methods.rs
index d2b07966..619bdf22 100644
--- a/pmoupnp/src/actions/arg_inst_set_methods.rs
+++ b/pmoupnp/src/actions/arg_inst_set_methods.rs
@@ -29,6 +29,7 @@ impl UpnpInstance for ArgInstanceSet {
fn new(_: &ArgumentSet) -> Self {
Self {
objects: RwLock::new(HashMap::new()),
+ order: RwLock::new(Vec::new()),
}
}
}
diff --git a/pmoupnp/src/actions/arg_instance_methods.rs b/pmoupnp/src/actions/arg_instance_methods.rs
index 73429929..ef355f9b 100644
--- a/pmoupnp/src/actions/arg_instance_methods.rs
+++ b/pmoupnp/src/actions/arg_instance_methods.rs
@@ -259,6 +259,7 @@ impl UpnpInstance for ActionInstanceSet {
fn new(_: &ActionSet) -> Self {
Self {
objects: RwLock::new(HashMap::new()),
+ order: RwLock::new(Vec::new()),
}
}
}
diff --git a/pmoupnp/src/lib.rs b/pmoupnp/src/lib.rs
index 67af0ac0..8340a145 100644
--- a/pmoupnp/src/lib.rs
+++ b/pmoupnp/src/lib.rs
@@ -32,6 +32,7 @@ pub struct UpnpObjectType {
#[derive(Debug)]
pub struct UpnpObjectSet {
objects: RwLock>>,
+ order: RwLock>,
}
#[derive(Debug)]
diff --git a/pmoupnp/src/object_set.rs b/pmoupnp/src/object_set.rs
index 79eb6a9d..3b22d1f6 100644
--- a/pmoupnp/src/object_set.rs
+++ b/pmoupnp/src/object_set.rs
@@ -12,6 +12,7 @@ use crate::{UpnpDeepClone, UpnpObjectSet, UpnpObjectSetError, UpnpTypedObject};
impl UpnpDeepClone for UpnpObjectSet {
fn deep_clone(&self) -> Self {
let guard = self.objects.read().unwrap();
+ let order_guard = self.order.read().unwrap();
let cloned_map: HashMap> = guard
.iter()
@@ -20,6 +21,7 @@ impl UpnpDeepClone for UpnpObjectSet {
Self {
objects: RwLock::new(cloned_map),
+ order: RwLock::new(order_guard.clone()),
}
}
}
@@ -39,9 +41,11 @@ impl UpnpDeepClone for UpnpObjectSet {
impl Clone for UpnpObjectSet {
fn clone(&self) -> Self {
let guard = self.objects.read().unwrap();
+ let order_guard = self.order.read().unwrap();
Self {
objects: RwLock::new(guard.clone()),
+ order: RwLock::new(order_guard.clone()),
}
}
}
@@ -57,6 +61,7 @@ impl UpnpObjectSet {
pub fn new() -> Self {
Self {
objects: RwLock::new(HashMap::new()),
+ order: RwLock::new(Vec::new()),
}
}
@@ -80,13 +85,15 @@ impl UpnpObjectSet {
/// ```
pub fn insert(&mut self, object: Arc) -> Result<(), UpnpObjectSetError> {
let mut guard = self.objects.write().unwrap();
+ let mut order_guard = self.order.write().unwrap();
let key = object.get_name().to_string();
if guard.contains_key(&key) {
return Err(UpnpObjectSetError::AlreadyExists(key));
}
- guard.insert(key, object);
+ guard.insert(key.clone(), object);
+ order_guard.push(key);
Ok(())
}
@@ -110,8 +117,13 @@ impl UpnpObjectSet {
/// ```
pub fn insert_or_replace(&mut self, object: Arc) {
let mut guard = self.objects.write().unwrap();
+ let mut order_guard = self.order.write().unwrap();
let key: String = object.get_name().to_string();
+ if !guard.contains_key(&key) {
+ order_guard.push(key.clone());
+ }
+
guard.insert(key, object);
}
@@ -192,6 +204,11 @@ impl UpnpObjectSet {
/// appeler cette méthode simultanément sans blocage.
pub fn all(&self) -> Vec> {
let guard = self.objects.read().unwrap();
- guard.values().cloned().collect()
+ let order_guard = self.order.read().unwrap();
+
+ order_guard
+ .iter()
+ .filter_map(|k| guard.get(k).cloned())
+ .collect()
}
}
diff --git a/pmoupnp/src/state_variables/var_inst_set_methods.rs b/pmoupnp/src/state_variables/var_inst_set_methods.rs
index 667f6030..21da19cf 100644
--- a/pmoupnp/src/state_variables/var_inst_set_methods.rs
+++ b/pmoupnp/src/state_variables/var_inst_set_methods.rs
@@ -29,6 +29,7 @@ impl UpnpInstance for StateVarInstanceSet {
fn new(_: &StateVariableSet) -> Self {
Self {
objects: RwLock::new(HashMap::new()),
+ order: RwLock::new(Vec::new()),
}
}
}