简体   繁体   English

H264编码器错误

[英]H264 encoder error

I am trying to use a H264 encoder for streaming video from an Android device. 我正在尝试使用H264编码器从Android设备流式传输视频。 For capturing the images I am using the back camera; 为了捕获图像,我使用后置摄像头; images are in NV21 format. 图像为NV21格式。 The codec is properly initialized, but when setting up the codec throws an error "configure failed with err 0xffffffea" with the following stack trace: http://pastebin.com/ZrpsB9cy 编解码器已正确初始化,但是在设置编解码器时会引发错误“配置失败,错误为0xffffffea”,并带有以下堆栈跟踪: http : //pastebin.com/ZrpsB9cy

I have tried Google's and Qualcomm's encoders, but both throw exceptions at the same point. 我曾尝试使用Google和Qualcomm的编码器,但两者都在同一时间抛出异常。 I am using Android SDK version 21. This is the code I have written: 我使用的是Android SDK版本21。这是我编写的代码:

private MediaCodec setupVideoCodec() {
    MediaCodec mediaCodec = null;

    try {
        mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.decoder.avc");
        MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc",
                VIDEO_WIDTH, VIDEO_HEIGHT);
        mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
                MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
        mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, VIDEO_BITRATE);
        mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, STREAMING_INTERVAL);

        mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
        mediaCodec.start();

        Log.d(TAG, String.valueOf("Buffers available: " + mediaCodec.getInputBuffers().length));
    } catch (MediaCodec.CodecException e) {
        Log.e(TAG, e.getLocalizedMessage());
        e.printStackTrace();
    } catch (IOException e) {
        Log.e(TAG, e.getLocalizedMessage());
        e.printStackTrace();
    }

    return mediaCodec;
}

private void encodeData(byte[] data, MediaCodec codec) {
        int inputBufferIndex = codec.dequeueInputBuffer(-1);

        if (inputBufferIndex >= 0) {
            ByteBuffer buffer = codec.getInputBuffer(inputBufferIndex);
            buffer.clear();
            buffer.put(data);
            codec.queueInputBuffer(inputBufferIndex, 0, data.length, 0, MediaCodec.BUFFER_FLAG_CODEC_CONFIG);
        }
    }

private final Camera.PreviewCallback mPreviewCbk = new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        Log.d(TAG, "onPreviewFrame()");

        if (mVideoCodec != null) {
            mExecutor.execute(new EncodeVideo(data, mVideoCodec));
        }

        camera.addCallbackBuffer(data);
    }
};

I have checked other posts, but I have not been able to solve it. 我检查了其他帖子,但无法解决。 Any hint or suggestion is appreciated. 任何提示或建议,表示赞赏。 Thanks in advance! 提前致谢!

you're trying to encode with a decoder 您正在尝试使用解码器进行编码

mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video. DECODER .avc"); mediaCodec = MediaCodec.createByCodecName( “OMX.qcom.video DECODER .avc。”);

try 尝试

mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video. encoder .avc"); mediaCodec = MediaCodec.createByCodecName( “ 编码器 OMX.qcom.video .avc。”);

instead 代替

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM