buildAvOffer function
String
buildAvOffer({
- required String username,
- required String localHost,
- required int audioPort,
- int? videoPort,
- G711Variant audioPreferred = G711Variant.pcmu,
- G711Variant? audioSecond = G711Variant.pcma,
- int? audioRtcpPort,
- int? telephoneEventPt = 101,
- String telephoneEventRange = '0-15',
- int videoPayloadType = 96,
- SdpVideoCodec videoCodec = SdpVideoCodec.vp8,
- int? videoRtcpPort,
- SdpDirection direction = SdpDirection.sendrecv,
- int? sessionId,
- int? sessionVersion,
Build an audio+video SDP offer/answer. Audio uses the same defaults as buildG711Offer; video advertises VP8 on PT 96 by default.
Implementation
String buildAvOffer({
required String username,
required String localHost,
required int audioPort,
int? videoPort,
G711Variant audioPreferred = G711Variant.pcmu,
G711Variant? audioSecond = G711Variant.pcma,
int? audioRtcpPort,
int? telephoneEventPt = 101,
String telephoneEventRange = '0-15',
int videoPayloadType = 96,
SdpVideoCodec videoCodec = SdpVideoCodec.vp8,
int? videoRtcpPort,
SdpDirection direction = SdpDirection.sendrecv,
int? sessionId,
int? sessionVersion,
}) {
final sid = sessionId ?? DateTime.now().millisecondsSinceEpoch ~/ 1000;
final ver = sessionVersion ?? sid;
final audioPts = <G711Variant>[
audioPreferred,
if (audioSecond != null && audioSecond != audioPreferred) audioSecond,
];
final audioPtNumbers = audioPts.map((v) => v.payloadType).toList();
if (telephoneEventPt != null) audioPtNumbers.add(telephoneEventPt);
final lines = <String>[
'v=0',
'o=$username $sid $ver IN IP4 $localHost',
's=flutter_sip_ua',
'c=IN IP4 $localHost',
't=0 0',
'm=audio $audioPort RTP/AVP ${audioPtNumbers.join(' ')}',
for (final v in audioPts) 'a=rtpmap:${v.payloadType} ${v.rtpmap}/8000',
if (telephoneEventPt != null) ...[
'a=rtpmap:$telephoneEventPt telephone-event/8000',
'a=fmtp:$telephoneEventPt $telephoneEventRange',
],
if (audioRtcpPort != null) 'a=rtcp:$audioRtcpPort',
'a=ptime:20',
'a=${_directionToken(direction)}',
if (videoPort != null) ...[
'm=video $videoPort RTP/AVP $videoPayloadType',
'a=rtpmap:$videoPayloadType ${videoCodec.rtpmap}/${videoCodec.clockRate}',
if (videoRtcpPort != null) 'a=rtcp:$videoRtcpPort',
'a=${_directionToken(direction)}',
],
];
return '${lines.join('\r\n')}\r\n';
}