========================================================================= TiviMate ExoPlayer Buffering / LoadControl Config (v5.3.3 decompiled) Source: C2577.java, C1760.java ========================================================================= === LOAD CONTROL CONFIGURATION (C2577.java) === Parameters passed to the LoadControl constructor: int param1 = minBufferMs (normal network) int param2 = minBufferForLocalPlaybackMs (local/file) int param3 = maxBufferMs (normal network) int param4 = maxBufferForLocalPlaybackMs (local/file) int param5 = bufferForPlaybackMs (how much buffered before starting) int param6 = bufferForPlaybackForLocalPlaybackMs int param7 = bufferForPlaybackAfterRebufferMs int param8 = bufferForPlaybackAfterRebufferForLocalPlaybackMs boolean param9 = prioritizeTimeOverSizeThresholds Map param10 = custom buffer map Validation rules from C2577 constructor: bufferForPlaybackMs >= 0 bufferForPlaybackAfterRebufferMs >= 0 minBufferMs >= bufferForPlaybackMs minBufferForLocalPlaybackMs >= bufferForPlaybackForLocalPlaybackMs maxBufferMs >= minBufferMs maxBufferForLocalPlaybackMs >= minBufferForLocalPlaybackMs backBufferDurationMs = 0 (hardcoded) DEFAULT VALUES (as determined by the caller): minBufferMs: 50000ms (50 seconds) maxBufferMs: 100000ms (100 seconds) bufferForPlaybackMs: 2500ms (2.5 seconds) bufferForPlaybackAfterRebufferMs: 5000ms (5 seconds) Local playback uses smaller buffers by default. === CORE TUNING CONSTANTS (C1760.java) === f7010 = 10000 (10 seconds) - used as a timeout for various operations The player uses a handler-based message system with 30+ message types: 1 - Play/Resume 2 - Stop 3 - Seek to position 4 - Set media source 5 - Set playback parameters 6 - Release 7 - Set volume 8 - Set audio attributes 9 - Clear audio attributes 10 - Reset 11 - Set repeat mode 12 - Set shuffle mode 13 - Set play when ready 14 - Add media item 15 - Remove media item 16 - Move media item 17 - Set media items (list) 18 - Add media items (list) 19 - Error handler 20 - Set video surface 21 - Clear video surface 22 - Prepare 23 - Set pause at end 25 - Set seek parameters 26 - Stop and reset 27 - Set video outputs 28 - Set player capabilities 29 - Get audio session ID 30 - Set media item with start position === ANALOG OUTPUT CONFIG (C0453.java) === AudioTrack buffer calculation: minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, encoding) buffer = max(minBufferSize * 4, expectedFrameSize, 750ms worth of audio) === OKHTTP CONFIG === User-Agent: "okhttp/5.4.0" Accept: application/json Content-Type: application/json ========================================================================= KEY TAKEAWAYS: 1. TiviMate uses generous buffers: 50s min, 100s max 2. Starts playback at 2.5s buffered (aggressive) 3. After rebuffer: waits 5s before playing (patient) 4. Local files get smaller buffers (not shown here but implied by dual params) 5. Audio buffer targets 750ms minimum 6. Uses OkHttp 5.4.0 for all HTTP =========================================================================