feat(recordings): перемотка записей + тайм-коды треков

1) Перемотка: записи эфира — сырой ADTS-AAC/MP3 без индексов, ExoPlayer
   считал их неперематываемыми (старт всегда с нуля). Включён CBR-seeking
   (DefaultExtractorsFactory.setConstantBitrateSeekingEnabled) — seek работает.

2) Тайм-коды треков: при записи фиксируются смены now-playing с offset от
   начала (модель TrackMarker, колонка markers в recordings, миграция v6,
   захват через NowPlayingRepository — свой поллинг, не зависит от экрана).
   В плеере записи — список «Треки в записи»: тайм-код + название, тап
   переходит к моменту, текущий трек подсвечен.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-04 13:18:23 +03:00
parent 777f5d5082
commit fc63814f97
8 changed files with 172 additions and 6 deletions

View File

@@ -8,5 +8,17 @@ data class Recording(
val startTime: Long,
val endTime: Long?,
val trackName: String?,
val duration: Long?
val duration: Long?,
// Тайм-коды треков, звучавших во время записи (для навигации при прослушивании).
val markers: List<TrackMarker> = emptyList()
)
/** Отметка трека в записи: смещение от начала записи + что играло. */
data class TrackMarker(
val offsetMs: Long,
val artist: String,
val song: String
) {
val title: String
get() = listOf(artist, song).filter { it.isNotBlank() }.joinToString("")
}