@zhogar

Как реализовать циклический буфер видеопотока?

Здравствуйте.

Необходимо реализовать циклический буфер видео потока поступающего с камеры мобильного устройства, под управлением Android 4.4 . Дело в том, что стандартный MediaRecorder имеет фиксированный VideoDuration, по достижению которого вызывается событие на сохранение видео файла. Но для моих задач, это абсолютно не подходит.

Подскажите по какому пути пойти, чтобы реализовать "непрерывный" (циклический) буфер кадров видео потока с заданным FPS=25кадр./сек. И выгружать данные только по некому событию.

Ориентировочная структурная схема реализации буфера:

0d10ab5b33364b819ffdac5a4ce2bed7.png

Предположим, что наш буфер реализует FPS = 25кадр./сек., продолжительность (необходимый размер) видео файла на выходе VideoDuration = 15сек., и того получаем, что необходим буфер на FPS * VideoDuration = 375 кадров.

К примеру при разрешении видео 1024 х 786 пикселей, и глубине цвета пикселя скажем 4 бита, получается размер одного кадра FrameSize = H * W * bit = 3219456 бит, а далее это еще необходимо умножить на количество хранимых кадров 375, в итоге размер такого буфера выходит равным (3219456 * 375 ) / 8 / 1024 / 1024 получается около 143 Мб, согласитесь держать такой объем, а темболее работать с ним, в памяти или файле весьма затруднительно.

А следовательно нужно еще реализовать алгоритмы сжатия кадров и соответственно разжатия при выгрузке из буфера в файл.

Пусть это будет не MediaRecorder в полном понимании, а класс реализующий только запись кадров в буфер с последующей их выгрузкой без звука.

В одной из личных переписок по текущему вопросу, с компетентным специалистом, он посоветовал следующее:

1) Либо работать на прямую с камерой, но тогда будет более аппаратно зависимое приложение. Для меня такой вариант не подходит. 2) Либо писать свой видео кодек. Но тут для меня вообще темный лес.

Что собственно скажите и посоветуете? У кого возникали подобные задачи?

Дело в том, что реализовать данный буфер, оказалось для меня весьма затруднительно, поэтому собственно и обращаюсь к Вам за помощью.

Спасибо. С уважением.
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
@Tsimur_S
https://github.com/google/grafika/blob/master/src/... может этот гугловский пример вам подойдет?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zhogar Автор вопроса
Я могбы использовать
public void onPreviewFrame(byte[] data, Camera camera) { ... }
, но по моему это бредовая идея...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы