OpenCV VideoWriter fourCC Android

Я использую библиотеку OpenCV 3.1 для Android в своем проекте для обработки изображений и компиляции видеофайлов на основе нескольких отдельных OpenCv::Mat.

Моя проблема - найти правильный код FourCC. Использование "MJPG" прекрасно работает на Google Nexus 6P (Android 7.0), но не на Nexus 4 (5.1.1) или Galaxy A3 (6.0.1).

В коде images массив, содержащий данные изображения в виде байтовых массивов

VideoWriter videoWriter = new VideoWriter(filePath, VideoWriter.fourcc('M','J','P','G'), FPS, new Size(w,h));
videoWriter.open(filePath, VideoWriter.fourcc('M','J','P','G'), FPS, new Size(w,h));

for (int i = 0; i < images.size(); i++) {
     byte[] image = images.get(i);
     Mat rgbMat = new Mat(h,w,CvType.CV_8UC3);
     rgbMat.put(0,0,image);

     videoWriter.write(rgbMat);
     rgbMat.release();

}

videoWriter.release();

Как я уже сказал, я получаю действительный файл.a vi на Nexus 6P, но поврежденный файл на других телефонах. Я знаю, что остальная часть моего конвейера работает на всех телефонах, потому что я могу без проблем сохранять отдельные изображения (не используя OpenCV).

Мой вопрос: есть ли код FourCC, который должен работать на любом телефоне, независимо от производителя?

Я попытался безуспешно: "MPEG", "MP4V", "PIM1"

Спасибо за помощь!

0 ответов

Если вы используете mVideoWriter внутри переопределений onCameraFrame, он инициализируется каждый раз, поэтому используются некоторые условия, как указано ниже.

 if (mVideoWriter == null) {
            mVideoWriter = new VideoWriter();
            Log.d(TAG, "mVideoWriter good : " + mVideoWriter);
            mVideoWriter.open(file_path.toString() + "/" + System.currentTimeMillis() + ".avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 30.0, mRgba.size());
            Log.i(TAG, "onCameraFrame: recordFilePath");


        }
        if (!mVideoWriter.isOpened()) {
            Log.w(TAG, "onCameraFrame: open");
            mVideoWriter.open(path.toString() + "/" + System.currentTimeMillis() + ".avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 30.0, mRgba.size());

        }

Проблема в том, что VideoWriter в Android поддерживает только формат.avi. Вот пример решения.

if (videoWriter.isOpened() == false) {
    Log.w("wewe", "som tu OPEN");
    videoWriter.open("/sdcard/movies/video.avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 25.0D, colorMat.size());
} else {
    videoWriter.write(colorMat);
}
Другие вопросы по тегам