//日志
E / EncoderWorker:dequeueOutputBuffer:31.257693ms E / EncoderWorker:编码器输出缓冲区:0.014308ms E / ServerService:字节:17703 config0,17703,1541926212476,0 E / EncoderWorker:sendEncodeData:0.870539ms E / EncoderWorker:dequeueOutputBuffer:33.595231ms E / EncoderWorker:encoderOutputBuffers:0.009ms E / ServerService:字节:16208 config0,16208,1541926246210,0 E / EncoderWorker:sendEncodeData:0.357308ms E / EncoderWorker:出队列输出缓冲区:33.247692ms E / EncoderWorker:encoderOutputBuffers:0.01ms E / ServerService:字节:9769 config0,9769,1541926262384,0 E / EncoderWorker:sendEncodeData:0.318231ms E / EncoderWorker:出队输出缓冲区:25.595385ms E / EncoderWorker:encoderOutputBuffers:0.013847ms E / ServerService:字节:8057 config0,8057,1541926312199,0 E / EncoderWorker:sendEncodeData:0.406769ms E / EncoderWorker:dequeueOutputBuffer:37.262077ms
E / EncoderWorker:encoderOutputBuffers:0.009077ms
//some MidiaCodec config
MediaFormat mMediaFormat = MediaFormat.createVideoFormat(Commonconfig.MIME_TYPE,Commonconfig.WIDTH,Commonconfig.HEIGHT);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE,(int) (Commonconfig.WIDTH *
Commonconfig.HEIGHT * 0.5));
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE,30);
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL,1);
Log.i(TAG,"Starting mEncoder");
mEncoder = MediaCodec.createByCodecName(Commonconfig.HAERD_CODE_EDCODE);
mEncoder.configure(mMediaFormat,null,MediaCodec.CONFIGURE_flaG_ENCODE);
//encode Thread
@Override
public void run() {
ByteBuffer[] encoderOutputBuffers = mEncoder.getOutputBuffers();
boolean encoderDone = false;
MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
while (!encoderDone) {
int encoderStatus;
long start;
try {
start = System.nanoTime();
encoderStatus = mEncoder.dequeueOutputBuffer(info,-1);
Log.e(TAG,"dequeueOutputBuffer:" + (System.nanoTime() - start) / 1e6 + "ms");
} catch (IllegalStateException e) {
e.printStackTrace();
break;
}
if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) {
// no output available yet
//Log.d(TAG,"no output from mEncoder available");
} else if (encoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
// not expected for an mEncoder
encoderOutputBuffers = mEncoder.getOutputBuffers();
Log.d(TAG,"mEncoder output buffers changed");
} else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// not expected for an mEncoder
Log.d(TAG,"The output format has changed,subsequent data will follow the new format");
} else if (encoderStatus < 0) {
break;
} else {
start = System.nanoTime();
ByteBuffer encodedData = encoderOutputBuffers[encoderStatus];
Log.e(TAG,"encoderOutputBuffers:" + (System.nanoTime() - start) / 1e6 + "ms");
if (encodedData == null) {
Log.d(TAG,"============It's NULL. BREAK!=============");
return;
}
String infoString = info.offset + "," + info.size + "," +
info.presentationTimeUs + "," + info.flags;
// mDataInterface.sendConfig("video",infoString);
byte[] b = new byte[info.size];
try {
if (info.size != 0) {
start = System.nanoTime();
encodedData.limit(info.offset + info.size);
encodedData.position(info.offset);
encodedData.get(b,info.offset,info.offset + info.size);
mDataInterface.sendEncodeData(b,infoString);
//Log.e(TAG,infoString + " " + b.length);
Log.e(TAG,"sendEncodeData:" + (System.nanoTime() - start) / 1e6 + "ms");
}
} catch (BufferUnderflowException e) {
e.printStackTrace();
}
encoderDone = (info.flags & MediaCodec.BUFFER_flaG_END_OF_STREAM) != 0;
try {
if (mEncoder != null) {
mEncoder.releaseOutputBuffer(encoderStatus,false);
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
Log.e(TAG,"out of enCode!");
}