makeRtpPacket function

Uint8List makeRtpPacket(
  1. RtpState state,
  2. Uint8List payload,
  3. int rtpTimestamp, {
  4. bool marker = false,
})

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;
}