Проблема
iPhone по умолчанию записывает HEVC (H.265). Все клиентские подходы, которые я пробовал, не работают в iOS Safari для больших файлов HEVC:
WebCodecs:
Код: Выделить всё
VideoDecoder.isConfigSupported({ codec: "hev1..." }) → false
ffmpeg.wasm: fetchFile() copies entire file to JS heap → OOM (tab crash)
captureStream: video.captureStream() not supported on iOS Safari
canvas: must decode HEVC frames → ~8MB × 5 frame buffer → OOM
Что работает
- iOS + H.264: конвейер WebCodecs работает нормально (декодирование → перекодирование в разрешении 720p с помощью VideoEncoder → mp4box.js mux)
- Android Chrome: работают и WebCodecs, и ffmpeg.wasm.
Что я рассмотрел
1. Извлечение только аудио с помощью mp4box.js + AudioDecoder (AAC всегда поддерживается даже в iOS HEVC) — решает этап обрезки, а не этап мультиплексирования
2. Мультиплексор на стороне сервера — работает, но увеличивает задержку и пропускную способность
3. Замена звуковой дорожки на уровне контейнера mp4box.js — по-прежнему требует загрузки moov + mdat в память
Вопрос
Существует ли какой-либо веб-API iOS Safari 16.4+, который позволяет заменять звуковую дорожку в контейнере MP4/MOV без декодирования видеокадров? Или какой-либо безопасный для памяти подход к мультиплексированию нового аудио в большой файл HEVC на стороне клиента?
Или мультиплексирование на стороне сервера является единственным реалистичным вариантом?
Подробнее: https://stackoverflow.com/questions/799 ... e-approach
Мобильная версия