JB Media编解码器解码器问题

时间:2013-01-30 13:45:40

标签: android video media codec decoding

我正在使用JB的硬件媒体编解码器。我正在尝试对视频进行编码并对其进行解码并使用编解码器(视频/ avc格式)进行显示...

我使用两个按钮来“开始”和“停止”视频渲染。第一次,当我渲染视频时,它正确显示。当我第二次启动视频时,它没有显示并抛出以下错误:

“不在AVI模式下”

我复制粘贴开始和停止按钮的代码片段。

     public void Stop(){
    try {
        //stopping the decoder alone
        decoderMediaCodec.flush();
        decoderMediaCodec.stop();
        decoderMediaCodec.release();
         //Tried with various combination of flush(), stop() and release();
    } catch (Exception e) {
        e.printStackTrace();
    }

    public void Start(Surface view){
    try {
        decoderMediaCodec = MediaCodec.createDecoderByType(mime);//Initialize the decoder again
        MediaFormat format = MediaFormat.createVideoFormat(mime, mWidth, mHeight);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        format.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat);
        format.setInteger(MediaFormat.KEY_FRAME_RATE, framerate);
        decoderMediaCodec.configure(format, view, null, 0);
        decoderMediaCodec.start();


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

请帮助我完成视频渲染。

注意:解码器中收到的数据有效...使用超越比较工具检查数据

对于outputBufferIndex

,我得到-1
    int outputBufferIndex = decoderMediaCodec.dequeueOutputBuffer(bufferInfo, 0);

在日志中我得到

E /(271):

E /(271):不在avi模式

E /(271):

E /(271):不在avi模式

1 个答案:

答案 0 :(得分:0)

如果您在遇到问题时可以共享更多日志,那将是一件好事。根据您的问题说明,您是否可以确认第2次Surface来电的Start是否有效?

如果你可以重建android,可能在Mediacodec.cpp中启用日志跟踪会很有帮助,特别是Mediacodec::setNativeWindow方法。

P.S:对于解码器,为什么要设置I帧间隔,比特率和帧率?