Трек на 46 минут долго молчал: отдаём перекодированный звук, пока ffmpeg его ещё пишет

AstolfoOwO 4 часа назад Объяснить с Трек на 46 минут долго молчал: отдаём перекодированный звук, пока ffmpeg его ещё пишет Средний 6 мин 2.6K Rust * Звук Серверное администрирование * Кейс Я делаю Nami: музыкальный...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: AstolfoOwO 4 часа назад Объяснить с Трек на 46 минут долго молчал: отдаём перекодированный звук, пока ffmpeg его ещё пишет Средний 6 мин 2. 6K Rust * Звук Серверное администрирование * Кейс Я делаю Nami: музыкальный плеер со своим сервером на Rust. Библиотека лежит дома или на VPS, телефон и компьютер слушают её по сети.
Трек с сервера на телефоне очень долго не начинал играть. Я переключил качество потока на самое экономное, Opus 96 кбит/с, и стало не лучше. Трек длился 46 минут.
Технические детали
Даже на моём ноутбуке с i7-11800H первый байт приходил через 19,3 секунды. Экономное качество тут ухудшало ситуацию. Ниже о том, почему, и как я это починил, сохранив кеш перекодированных файлов.
Как былоСервер отдаёт трек как есть или перекодирует его под слабую сеть. Профили простые: , , ,Запрос GET /api/tracks/{id}/stream? quality=opus96 обрабатывался так:Сервер считает имя файла в кеше: id трека, размер и время изменения исходника, профиль.
Если такой файл есть, сервер отдаёт его с Content-Length и поддержкой Range. Если нет, запускает ffmpeg во временный файл, ждёт, пока тот закончит, переименовывает файл в кеш и только тогда отдаёт. let ready = tokio::task::spawn_blocking(move { transcode::ensure(&cache_dir, &src, id, size, mtime, p, range) }).
Отраслевые последствия
await;На четырёхминутном треке ожидание было 1,7 секунды, это терпимо. Но оно растёт с длиной трека. ffmpeg перекодирует FLAC в Opus примерно в 140 раз быстрее реального времени, и 46 минут звука всё равно занимают 19 секунд.
Всё это время телефон показывал крутилку. Буфер ExoPlayer тут не помогает, потому что первый байт ещё не пришёл. Почему экономный режим хуже оригинала?
Оригинал сервер читает с диска и отдаёт сразу. Перекодирование нужно только в экономном режиме, и только в нём пользователь ждёт ffmpeg. Человек снижает битрейт, чтобы грузилось быстрее, и получает обратное.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.




