writeRtp method

void writeRtp(
  1. dynamic rtp, [
  2. RtpExtensions? extensions
])

Write RTP data to the track (for local tracks)

Can accept either raw bytes or an RtpPacket.

Implementation

void writeRtp(dynamic rtp, [RtpExtensions? extensions]) {
  if (remote) {
    throw StateError('Cannot write to remote track');
  }
  if (stopped) {
    return;
  }

  final RtpPacket packet;
  if (rtp is Uint8List) {
    packet = RtpPacket.parse(rtp);
  } else if (rtp is RtpPacket) {
    packet = rtp;
  } else {
    throw ArgumentError('Expected Uint8List or RtpPacket');
  }

  // Create new packet with overridden payload type if codec is set
  final outputPacket = codec != null
      ? RtpPacket(
          version: packet.version,
          padding: packet.padding,
          extension: packet.extension,
          marker: packet.marker,
          payloadType: codec!.payloadType,
          sequenceNumber: packet.sequenceNumber,
          timestamp: packet.timestamp,
          ssrc: packet.ssrc,
          csrcs: packet.csrcs,
          extensionHeader: packet.extensionHeader,
          payload: packet.payload,
        )
      : packet;

  _rtpController.add((outputPacket, extensions));
}