android开发 h264传输,使用android低级别api解码H264流式传输

博主在Android开发中,使用MediaCodec低级别Api解码从IP CAMERA接收到的H264 raw stream,通过TCP/IP连接接收原始数据流。博主给出了解码代码,但在运行时某行代码总是收到“-1”,mInfo.size()为“0”,且不显示在给定表面上,寻求指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在android中使用MediaCodec低级别Api来解​​码从IP CAMERA接收到的h264 raw stream。 来自IP摄像头的原始数据流,通过TCP/IP连接进行接收。使用android低级别api解码H264流式传输

为了解码流,我的代码是:

@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”。它不显示给定表面上的任何东西。

我错过了哪一步。请指导我。 thanx

2013-04-02

Arun

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值