纹理视图无法使用mediacodec在api 21下进行解码

时间:2018-03-22 06:05:14

标签: android-layout android-studio android-mediacodec

以下代码适用于API 21及更高版本。但是,当我在21以下运行时,没有数据出现在TextureView上。

我对MediaCodec的配置:

MediaFormat format =    MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 1920, 1080);

        format.setByteBuffer("csd-0", ByteBuffer.allocate(100));

        format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 100000);
        try {

            m_codec = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);

            m_codec.configure(format, new Surface(m_surface.getSurfaceTexture()), null, 0);

            m_codec.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

解码部分:

int inputIndex = m_codec.dequeueInputBuffer(-1);

            if (inputIndex >= 0) {
                ByteBuffer buffer;
                MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    buffer = m_codec.getInputBuffer(inputIndex);
                    buffer.clear();
                }
                else {
                    buffer=m_codec.getInputBuffers()[inputIndex];
                    buffer.put(videoBuffer,0,info.size);
                }
                if (buffer != null) {
                    buffer.put(videoBuffer, info.offset,videoBuffer.length);
                    m_codec.queueInputBuffer(inputIndex, 0, videoBuffer.length, 0, 0);
                }

            }

            MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
            int outputIndex = m_codec.dequeueOutputBuffer(info, 0);

            if (outputIndex >= 0) {
                m_codec.releaseOutputBuffer(outputIndex, true);
            }

编辑:

我得到了解决方案,当我删除线下,现在它正在工作

format.setByteBuffer("csd-0", ByteBuffer.allocate(100));

0 个答案:

没有答案