MediaMuxer записывает видео и попирает ямные записи
MediaMuxer записывает видео и попирает ямные записи

Базовые знания

Соответствующая единица времени данных MediaCodec — (наносекунда/1000), что аналогично 610 729 613 772, 7-я цифра снизу представляет второй уровень.

MediaMuxer.writeSampleData Failed

описывать:Не удалось записать данные

Распространенные причины

Этот тип ошибки в основном связан с временными метками

Проблема регрессии временных меток

Феномен

решать

выплюнуть временную метку задом наперед

Отбрасывать ненормальные кадры (проверено, что они не оказывают никакого влияния, а величина невелика)

выплюнуть временные метки равные

Отбрасывать ненормальные кадры (некоторые машины могут принимать одинаковые данные, но отбрасывают их ради универсальности)

Проблемы такого типа обычно возникают, когда после исключения сообщается об ошибке записи кадра.

Чтобы проанализировать проблему, необходимо различать временные метки аудио и видео.

Пример

Язык кода:javascript
копировать
ТС второго ряда меньше, чем ТС первого ряда, а третий ряд нормальный.

размер writeSampleData = 186, ts = 621441165854
размер writeSampleData = 186, ts = 621441065854
размер writeSampleData = 185, ts = 621441131957

Это неправильный журнал записи звука. writeSampleData Failed появится только при записи третьей строки. Поэтому для анализа такого рода проблем может потребоваться поиск еще нескольких кадров. Данные кадра, в котором возникает проблема, не обязательно являются текущим кадром.

Скорость звука увеличивается после записи и синтеза аудио и видео.

Как работает Медиакодек

Две очереди управляют входом и выходом из очереди. Исходные данные передаются на вход и выводятся на выход.

Причина проблемы

Если ввод и вывод находятся в разных потоках,Потому что скорость обработки с обеих сторон непоследовательна.,Это приведет к тому, что входные данные будут слишком запоздалыми для использования.,Вызывает перезапись (удаление) части исходных данных.,Окончательное формирование Феномен - Аудио ускорится,Призрачный зверь. видео Он замерзнет, ​​если вы его выбросите.

решение

  1. Используйте очередь для сохранения исходных данных и обычно используйте механизм Looper HandlerThread для сохранения сообщений.
  2. Выполняйте ввод и вывод в одном потоке. Каждый ввод ожидает завершения вывода, прежде чем переходить к следующему вводу, чтобы гарантировать использование каждого кадра данных.

Заикание после аудио и видео записи

Проблемы такого типа обычно возникают в двух ситуациях: неправильная временная метка и некоторые кадры данных отброшены.

MediaMuxer.Start Неверное время

решение

Рекомендуемое время:dequeueOutputBufferвозвращатьсяMediaCodec.INFO_OUTPUT_FORMAT_CHANGEDвозобновлятьMediaMuxer.addTrack, Старт срабатывает после завершения всех треков.

Аудио:dequeueOutputBufferвозвращатьсяMediaCodec.INFO_OUTPUT_FORMAT_CHANGEDвызвать новыйMediaMuxer.addTrack видео:dequeueOutputBufferвозвращатьсяMediaCodec.INFO_OUTPUT_FORMAT_CHANGEDвызвать новыйMediaMuxer.addTrack MediaMuxer:всеtrack запуск срабатывает после завершения добавления

Пример вопроса

  1. Если вы начнете раньше, addTrack ERROR взорвется при запуске addTrack.
  2. Если добавить трек заранее && начать, запись зависнет.

Проблемы совместимости приводят к удалению данных

Проблемное явление

В некоторых моделях инициализация аудио или видео идет очень медленно и время сдвинуто. В результате после поступления данных другого канала из-за того, что MediaMuxer не запускается, эта часть данных по умолчанию отбрасывается.

решение

  1. Добавьте очередь для сохранения данных, которые поступают заранее, и записывайте их равномерно после MediaMuxer.Start.
  2. При записи в кеш вам необходимо заблокировать его, чтобы предотвратить поступление новых данных и возникновение ошибок синхронизации. Появится указанное выше сообщение MediaMuxer.writeSampleData Failed.

MediaMuxer.stop: Failed to stop the muxer

Как правило, сценарии возникновения таких проблем следующие: требуется логическая защита.

  1. Перед запуском многодорожечных сцен необходимо дождаться освобождения нескольких MediaCodec.
  2. В многодорожечных сценариях определенная дорожка никогда не записывает данные.
  3. При записи сцены быстрой остановки медиакодек, соответствующий некоторым дорожкам, еще не инициализирован.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода