Проверка того, что org.WebRT C VideoFrame или NV21Buffer содержат правильное (не поврежденное) изображение - PullRequest
0 голосов
/ 13 апреля 2020

Я вызываю следующий метод для потоковой передачи кадров с USB-камеры на org.WebRTC Video Capture Observer. Он работает нормально, за исключением некоторых поврежденных кадров (зеленых или искаженных серых кадров), которые появляются каждые пару секунд на видеоэкране удаленного узла. Я хочу убедиться, что nv21Buffer или videoFrame являются хорошими снимками, прежде чем отправлять их дальше наблюдателю.

    public void addFrame(ByteBuffer frame) {
        try {
            byte[] imageArray = new byte[frame.remaining()];
            frame.get(imageArray);
            NV21Buffer nv21Buffer = new NV21Buffer(imageArray, 640, 480, () -> JniCommon.nativeFreeByteBuffer(frame));
            VideoFrame videoFrame = new VideoFrame(nv21Buffer, 0, System.nanoTime());

            // before sending the videoFrame further, I need to validate if it is a good picture / frame
            capturerObs.onFrameCaptured(videoFrame);

        } catch (
                Exception e) {
            Log.d("addFrame", e.getMessage());
        }
    }

Существуют ли какие-либо встроенные инструменты / методы для проверки качества кадров перед отправив их дальше?

1 Ответ

0 голосов
/ 13 апреля 2020

Nv21 - необработанные пиксели. В памяти это просто массив байтов. Здесь нет контрольных сумм или другой структуры, которая может быть неправильной. Если это правильное количество байтов, это «хорошо»

Ваш единственный вариант - выполнить некоторую форму обработки изображения и сравнить ее с другими кадрами, или разработать эвристический алгоритм / алгоритм для их обнаружения. Но нет встроенного.

...