我正在使用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模式
答案 0 :(得分:0)
如果您在遇到问题时可以共享更多日志,那将是一件好事。根据您的问题说明,您是否可以确认第2次Surface
来电的Start
是否有效?
如果你可以重建android,可能在Mediacodec.cpp
中启用日志跟踪会很有帮助,特别是Mediacodec::setNativeWindow
方法。
P.S:对于解码器,为什么要设置I帧间隔,比特率和帧率?