| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-04 19:08:17 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-04 19:08:17 UTC |
| parent | 2c46f5c1dd0167fd31b4c02c33a7be8b6748eb6b |
| borogove/calls/PeerConnection.cpp.hx | +20 | -8 |
diff --git a/borogove/calls/PeerConnection.cpp.hx b/borogove/calls/PeerConnection.cpp.hx index 920cec7..1fc46a5 100644 --- a/borogove/calls/PeerConnection.cpp.hx +++ b/borogove/calls/PeerConnection.cpp.hx @@ -412,18 +412,24 @@ class MediaStreamTrack { private function get_supportedAudioFormats() { final maybeMedia = media; - if (!maybeMedia.has_value()) return []; + if (!maybeMedia.has_value() || remoteMedia == null) return []; final m = maybeMedia.value(); final codecs = []; final payloadTypes = m.payloadTypes(); + final rPayloadTypes = remoteMedia.ref.payloadTypes(); + for (i in 0...payloadTypes.size()) { - final payloadType = payloadTypes.at(i); - if (remoteMedia == null || remoteMedia.ref.hasPayloadType(payloadType)) { - final rtp: RtpMap = cpp.Pointer.fromRaw(m.rtpMap(payloadType)).ref; - codecs.push(new AudioFormat(rtp.format, payloadTypes.at(i), rtp.clockRate, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); - if (rtp.format == "opus") { // We can encode opus from 8k or 16k too, it's just 48k internal - codecs.push(new AudioFormat(rtp.format, payloadTypes.at(i), 16000, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); - codecs.push(new AudioFormat(rtp.format, payloadTypes.at(i), 8000, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); + final lpayloadType = payloadTypes.at(i); + final lrtp: RtpMap = cpp.Pointer.fromRaw(m.rtpMap(lpayloadType)).ref; + for (j in 0...rPayloadTypes.size()) { + final payloadType = rPayloadTypes.at(i); + final rtp: RtpMap = cpp.Pointer.fromRaw(remoteMedia.ref.rtpMap(payloadType)).ref; + if (rtp.format == lrtp.format.toString() && rtp.clockRate == lrtp.clockRate) { + codecs.push(new AudioFormat(rtp.format, payloadType, rtp.clockRate, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); + if (rtp.format == "opus") { // We can encode opus from 8k or 16k too, it's just 48k internal + codecs.push(new AudioFormat(rtp.format, payloadType, 16000, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); + codecs.push(new AudioFormat(rtp.format, payloadType, 8000, rtp.encParams == "" ? 1 : Std.parseInt(rtp.encParams))); + } } } } @@ -791,6 +797,7 @@ class PeerConnection { var pc: cpp.Pointer<PC>; var waitingOnLocal: Null<Any->Void> = null; final tracks: Map<String, MediaStreamTrack> = []; + final remoteMedia: Map<String, cpp.Pointer<DescriptionMedia>> = []; final trackListeners = []; final localCandidateListeners = []; final stateChangeListeners = []; @@ -893,6 +900,10 @@ class PeerConnection { matchingTrack; } tracks[media.id] = media; + final rMedia = remoteMedia[media.id]; + if (rMedia != null) { + media.remoteMedia = rMedia; + } for (cb in trackListeners) { cb({ track: media, streams: [] }); } @@ -941,6 +952,7 @@ class PeerConnection { if (track != null) { track.remoteMedia = media; } + remoteMedia[mid] = media; } return Promise.resolve(null); }