java 建立bit数组_用Java填充字节数组

对于我正在研究的项目的一部分,我正在实现一个RTP包,我必须用RTP头字段填充字节的头部数组.

//size of the RTP header:

static int HEADER_SIZE = 12; // bytes

//Fields that compose the RTP header

public int Version; // 2 bits

public int Padding; // 1 bit

public int Extension; // 1 bit

public int CC; // 4 bits

public int Marker; // 1 bit

public int PayloadType; // 7 bits

public int SequenceNumber; // 16 bits

public int TimeStamp; // 32 bits

public int Ssrc; // 32 bits

//Bitstream of the RTP header

public byte[] header = new byte[ HEADER_SIZE ];

这是我的方法:

/*

* bits 0-1: Version

* bit 2: Padding

* bit 3: Extension

* bits 4-7: CC

*/

header[0] = new Integer( (Version << 6)|(Padding << 5)|(Extension << 6)|CC ).byteValue();

/*

* bit 0: Marker

* bits 1-7: PayloadType

*/

header[1] = new Integer( (Marker << 7)|PayloadType ).byteValue();

/* SequenceNumber takes 2 bytes = 16 bits */

header[2] = new Integer( SequenceNumber >> 8 ).byteValue();

header[3] = new Integer( SequenceNumber ).byteValue();

/* TimeStamp takes 4 bytes = 32 bits */

for ( int i = 0; i < 4; i++ )

header[7-i] = new Integer( TimeStamp >> (8*i) ).byteValue();

/* Ssrc takes 4 bytes = 32 bits */

for ( int i = 0; i < 4; i++ )

header[11-i] = new Integer( Ssrc >> (8*i) ).byteValue();

任何其他,也许’更好’的方法来做到这一点?

解决方法:

ByteBuffer buf = ByteBuffer.wrap(header);

buf.setOrder(ByteOrder.BIG_ENDIAN);

buf.put((byte)((Version << 6)|(Padding << 5)|(Extension << 6)|CC));

buf.put((byte)((Marker << 7)|PayloadType));

buf.put((short)SequenceNumber);

buf.put(TimeStamp);

buf.put(Ssrc);

标签:java,bytearray,voip,rtp

来源: https://codeday.me/bug/20190610/1213523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值