0

我调用以下方法将帧从 USB 摄像机流式传输到org.WebRTC的 Video Capture Observer。它工作正常,除了在远程对等方的视频显示中每隔几秒钟出现一些损坏的帧(绿色或扭曲的灰色帧)。我想在将它们进一步发送给观察者之前验证它们是否是好图片nv21BuffervideoFrame

    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());
        }
    }

在进一步发送帧之前,是否有任何内置工具/方法来验证帧的好坏?

4

1 回答 1

1

Nv21 是原始像素。在内存中,它只是一个字节数组。没有校验和或其他可能错误的结构。如果它是正确的字节数,那就是“好”</p>

您唯一的选择是进行某种形式的图像处理并将其与其他帧进行比较,或者开发一种启发式/算法来检测这些。但是没有内置的。

于 2020-04-13T14:59:36.390 回答