makeRtpPacket function
Builds an RTP packet (RFC 3550 ยง5.1). Returns the wire bytes ready for
RawDatagramSocket.send. Increments state.seq by one.
Implementation
Uint8List makeRtpPacket(
RtpState state,
Uint8List payload,
int rtpTimestamp, {
bool marker = false,
}) {
final seq = state.seq;
final buf = Uint8List(rtpHeaderSize + payload.length);
buf[0] = (rtpVersion << 6);
buf[1] = (marker ? 0x80 : 0) | (state.payloadType & 0x7F);
buf[2] = (seq >> 8) & 0xFF;
buf[3] = seq & 0xFF;
buf[4] = (rtpTimestamp >> 24) & 0xFF;
buf[5] = (rtpTimestamp >> 16) & 0xFF;
buf[6] = (rtpTimestamp >> 8) & 0xFF;
buf[7] = rtpTimestamp & 0xFF;
buf[8] = (state.ssrc >> 24) & 0xFF;
buf[9] = (state.ssrc >> 16) & 0xFF;
buf[10] = (state.ssrc >> 8) & 0xFF;
buf[11] = state.ssrc & 0xFF;
if (payload.isNotEmpty) {
buf.setRange(rtpHeaderSize, rtpHeaderSize + payload.length, payload);
}
state.seq = (state.seq + 1) & 0xFFFF;
return buf;
}