protected int encode(byte[] rawData, int offSet) { int temp = offSet; rawData[offSet++] = ((byte) ((this.ssrc & 0xFF000000) >> 24)); rawData[offSet++] = ((byte) ((this.ssrc & 0x00FF0000) >> 16)); rawData[offSet++] = ((byte) ((this.ssrc & 0x0000FF00) >> 8)); rawData[offSet++] = ((byte) ((this.ssrc & 0x000000FF))); for (RtcpSdesItem rtcpSdesItem : rtcpSdesItems) { if (rtcpSdesItem != null) { offSet = rtcpSdesItem.encode(rawData, offSet); } else { break; } } // This is End rawData[offSet++] = 0x00; int remainder = (offSet - temp) % 4; if (remainder != 0) { int pad = 4 - remainder; for (int i = 0; i < pad; i++) { rawData[offSet++] = 0x00; } } return offSet; }
public String getCname() { for (RtcpSdesItem item : this.rtcpSdesItems) { if (RtcpSdesItem.RTCP_SDES_CNAME == item.getType()) { return item.getText(); } } return ""; }
@Override public String toString() { StringBuilder builder = new StringBuilder("SDES CHUNK:\n"); builder.append("ssrc= ").append(this.ssrc).append(", "); builder.append("item count= ").append(this.itemCount); for (RtcpSdesItem item : this.rtcpSdesItems) { builder.append("\n").append(item.toString()); } return builder.toString(); }
protected int decode(byte[] rawData, int offSet) { this.ssrc |= rawData[offSet++] & 0xFF; this.ssrc <<= 8; this.ssrc |= rawData[offSet++] & 0xFF; this.ssrc <<= 8; this.ssrc |= rawData[offSet++] & 0xFF; this.ssrc <<= 8; this.ssrc |= rawData[offSet++] & 0xFF; while (true) { RtcpSdesItem sdesItem = new RtcpSdesItem(); offSet = sdesItem.decode(rawData, offSet); addRtcpSdesItem(sdesItem); if (RtcpSdesItem.RTCP_SDES_END == sdesItem.getType()) { break; } } return offSet; }