[英]Decoding H264 streaming using android low level api
我在android中使用MediaCodec低級Api來解碼從IP CAMERA收到的h264原始流。 來自IP攝像機的原始流,在TCP / IP連接上接收。
要解碼流,我的代碼是:
@Override
protected void onCreate(Bundle savedInstanceState) {
MediaCodec mCodecc;
MediaFormat mFormat;
BufferInfo mInfo;
ByteBuffer[] inputBuffers ;
ByteBuffer[] outputBuffers ;
}
protected void Init_Codec()
{
mCodecc = MediaCodec.createDecoderByType("video/avc");
mFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mInfo = new BufferInfo();
mFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mCodecc.configure(mFormat, holder.getSurface(), null,0);
}
protected void Start_Codec()
{
mCodecc.start();
inputBuffers = mCodecc.getInputBuffers();
outputBuffers = mCodecc.getOutputBuffers();
}
private void OnRawStreamReceived(final ByteBuffer buffer)
{
mHandler.postAtFrontOfQueue(new Runnable() {
@Override
public void run()
{
int inIndex = mCodecc.dequeueInputBuffer(10000);
if(inIndex>=0)
{
inputBuffers[inIndex] = buffer;
mCodecc.queueInputBuffer(inIndex, 0,buffer.limit(),System.currentTimeMillis(), 0);
}
int outIndex = mCodecc.dequeueOutputBuffer(mInfo, 10000);
switch (outIndex) {
case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED:
Log.d("DecodeActivity", "INFO_OUTPUT_BUFFERS_CHANGED");
outputBuffers = mCodecc.getOutputBuffers();
break;
case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
Log.d("DecodeActivity", "New format " + mCodecc.getOutputFormat());
break;
case MediaCodec.INFO_TRY_AGAIN_LATER:
Log.d("DecodeActivity", "dequeueOutputBuffer timed out! --- size : " + mInfo.size );
break;
default:
ByteBuffer buffer = outputBuffers[outIndex];
mCodecc.releaseOutputBuffer(outIndex, true);
break;
}
}
int outIndex = mCodecc.dequeueOutputBuffer(mInfo, 10000);
但是在這行代碼中,我總是收到“-1”。 和mInfo.size()也是我得到“0”。 它沒有在給定的表面上顯示任何東西。
我缺少哪一步。 請指導我。 感謝名單
我假設你正在傳遞個人“訪問單元”,即每個緩沖區一幀視頻。
您似乎缺少的是編解碼器設置塊,它應該在提交的第一個緩沖區中(也可以通過format.setByteBuffer("csd-0", ...)
隱藏到MediaFormat
)。 假設數據來自您的特定編碼器,您所要做的就是使用BUFFER_FLAG_CODEC_CONFIG標志對第一個緩沖區進行排隊 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.