Skip to content

Commit 7327009

Browse files
committed
fix: fix sdp negotiation issue.
1 parent 7691e2a commit 7327009

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

lib/src/whip.dart

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class WHIP {
2727
final String url;
2828
String? resourceURL;
2929
Map<String, String>? headers = {};
30-
String videoCodec = 'vp8';
30+
String? videoCodec;
3131
WHIP({required this.url, this.headers});
3232

3333
Future<void> initlize(
@@ -40,7 +40,11 @@ class WHIP {
4040
this.videoCodec = videoCodec.toLowerCase();
4141
}
4242
this.mode = mode;
43-
pc = await createPeerConnection({'sdpSemantics': 'unified-plan'});
43+
pc = await createPeerConnection({
44+
'sdpSemantics': 'unified-plan',
45+
'bundlePolicy': 'max-bundle',
46+
'rtcpMuxPolicy': 'require',
47+
});
4448
pc?.onIceCandidate = onicecandidate;
4549
pc?.onIceConnectionState = (state) {
4650
print('state: ${state.toString()}');
@@ -49,12 +53,24 @@ class WHIP {
4953
switch (mode) {
5054
case WhipMode.kSend:
5155
stream?.getTracks().forEach((track) async {
52-
await pc!.addTrack(track, stream);
56+
await pc!.addTransceiver(
57+
track: track,
58+
kind: track.kind == 'audio'
59+
? RTCRtpMediaType.RTCRtpMediaTypeAudio
60+
: RTCRtpMediaType.RTCRtpMediaTypeVideo,
61+
init: RTCRtpTransceiverInit(
62+
direction: TransceiverDirection.SendOnly, streams: [stream]));
5363
});
5464
break;
5565
case WhipMode.kReceive:
56-
await pc!.addTransceiver(kind: RTCRtpMediaType.RTCRtpMediaTypeAudio);
57-
await pc!.addTransceiver(kind: RTCRtpMediaType.RTCRtpMediaTypeVideo);
66+
await pc!.addTransceiver(
67+
kind: RTCRtpMediaType.RTCRtpMediaTypeAudio,
68+
init: RTCRtpTransceiverInit(
69+
direction: TransceiverDirection.RecvOnly));
70+
await pc!.addTransceiver(
71+
kind: RTCRtpMediaType.RTCRtpMediaTypeVideo,
72+
init: RTCRtpTransceiverInit(
73+
direction: TransceiverDirection.RecvOnly));
5874
break;
5975
}
6076
log.debug('Initlize whip connection: mode = $mode, stream = ${stream?.id}');
@@ -64,8 +80,12 @@ class WHIP {
6480
Future<void> connect() async {
6581
try {
6682
setState(WhipState.kConnecting);
67-
var desc = await pc!.createOffer();
68-
setPreferredCodec(desc, videoCodec: videoCodec);
83+
var desc = await pc!.createOffer({});
84+
85+
if (mode == WhipMode.kSend && videoCodec != null) {
86+
setPreferredCodec(desc, videoCodec: videoCodec!);
87+
}
88+
6989
await pc!.setLocalDescription(desc);
7090

7191
var offer = await pc!.getLocalDescription();

0 commit comments

Comments
 (0)