|
2 | 2 | import 'dart:async';
|
3 | 3 |
|
4 | 4 | // Package imports:
|
| 5 | +import 'package:collection/collection.dart'; |
5 | 6 | import 'package:flutter_webrtc/flutter_webrtc.dart';
|
6 | 7 | import 'package:sdp_transform/sdp_transform.dart' as sdp_transform;
|
7 | 8 |
|
@@ -95,6 +96,9 @@ class RTCSession extends EventManager implements Owner {
|
95 | 96 | // The RTCPeerConnection instance (public attribute).
|
96 | 97 | RTCPeerConnection? _connection;
|
97 | 98 |
|
| 99 | + // RTPSender List |
| 100 | + final List<RTCRtpSender> _senders = <RTCRtpSender>[]; |
| 101 | + |
98 | 102 | // Incoming/Outgoing request being currently processed.
|
99 | 103 | dynamic _request;
|
100 | 104 |
|
@@ -168,8 +172,10 @@ class RTCSession extends EventManager implements Owner {
|
168 | 172 | @override
|
169 | 173 | int get TerminatedCode => RtcSessionState.terminated.index;
|
170 | 174 |
|
171 |
| - RTCDTMFSender get dtmfSender => |
172 |
| - _connection!.createDtmfSender(_localMediaStream!.getAudioTracks()[0]); |
| 175 | + RTCDTMFSender? get dtmfSender => _senders |
| 176 | + .firstWhereOrNull((RTCRtpSender item) => |
| 177 | + item.track != null && item.track!.kind == 'audio') |
| 178 | + ?.dtmfSender; |
173 | 179 |
|
174 | 180 | String? get contact => _contact;
|
175 | 181 |
|
@@ -628,8 +634,9 @@ class RTCSession extends EventManager implements Owner {
|
628 | 634 | if (stream != null) {
|
629 | 635 | switch (sdpSemantics) {
|
630 | 636 | case 'unified-plan':
|
631 |
| - stream.getTracks().forEach((MediaStreamTrack track) { |
632 |
| - _connection!.addTrack(track, stream!); |
| 637 | + stream.getTracks().forEach((MediaStreamTrack track) async { |
| 638 | + RTCRtpSender sender = await _connection!.addTrack(track, stream!); |
| 639 | + _senders.add(sender); |
633 | 640 | });
|
634 | 641 | break;
|
635 | 642 | case 'plan-b':
|
@@ -2395,8 +2402,9 @@ class RTCSession extends EventManager implements Owner {
|
2395 | 2402 | if (stream != null) {
|
2396 | 2403 | switch (sdpSemantics) {
|
2397 | 2404 | case 'unified-plan':
|
2398 |
| - stream.getTracks().forEach((MediaStreamTrack track) { |
2399 |
| - _connection!.addTrack(track, stream!); |
| 2405 | + stream.getTracks().forEach((MediaStreamTrack track) async { |
| 2406 | + RTCRtpSender sender = await _connection!.addTrack(track, stream!); |
| 2407 | + _senders.add(sender); |
2400 | 2408 | });
|
2401 | 2409 | break;
|
2402 | 2410 | case 'plan-b':
|
|
0 commit comments