react-native-webrtc-nitro 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -45,10 +45,6 @@ void Encoder::_init (const Frame &frame)
45
45
  ctx->max_b_frames = 0;
46
46
  ctx->pix_fmt = AV_PIX_FMT_YUV420P;
47
47
  ctx->profile = FF_PROFILE_H264_CONSTRAINED_BASELINE;
48
- ctx->color_range = AVCOL_RANGE_MPEG;
49
- ctx->color_primaries = AVCOL_PRI_BT709;
50
- ctx->color_trc = AVCOL_TRC_BT709;
51
- ctx->colorspace = AVCOL_SPC_BT709;
52
48
  }
53
49
  else if (encoder->id == AV_CODEC_ID_H265)
54
50
  {
@@ -62,10 +58,6 @@ void Encoder::_init (const Frame &frame)
62
58
  ctx->max_b_frames = 0;
63
59
  ctx->pix_fmt = AV_PIX_FMT_YUV420P;
64
60
  ctx->profile = FF_PROFILE_HEVC_MAIN;
65
- ctx->color_range = AVCOL_RANGE_MPEG;
66
- ctx->color_primaries = AVCOL_PRI_BT709;
67
- ctx->color_trc = AVCOL_TRC_BT709;
68
- ctx->colorspace = AVCOL_SPC_BT709;
69
61
  }
70
62
  else if (encoder->id == AV_CODEC_ID_OPUS)
71
63
  {
@@ -7,9 +7,9 @@ auto HybridMediaStream::getTracks ()
7
7
  {
8
8
  std::vector<std::shared_ptr<HybridMediaStreamTrackSpec>>
9
9
  hybridMediaStreamTrackSpecs;
10
- hybridMediaStreamTrackSpecs.reserve (mediaStreamTrackMap.size ());
10
+ hybridMediaStreamTrackSpecs.reserve (mediaStreamTracks.size ());
11
11
 
12
- for (const auto &[_, track] : mediaStreamTrackMap)
12
+ for (const auto &track : mediaStreamTracks)
13
13
  {
14
14
  hybridMediaStreamTrackSpecs.push_back (track);
15
15
  }
@@ -21,9 +21,9 @@ auto HybridMediaStream::getAudioTracks ()
21
21
  {
22
22
  std::vector<std::shared_ptr<HybridMediaStreamTrackSpec>>
23
23
  hybridMediaStreamTrackSpecs;
24
- hybridMediaStreamTrackSpecs.reserve (mediaStreamTrackMap.size ());
24
+ hybridMediaStreamTrackSpecs.reserve (mediaStreamTracks.size ());
25
25
 
26
- for (const auto &[_, track] : mediaStreamTrackMap)
26
+ for (const auto &track : mediaStreamTracks)
27
27
  {
28
28
  if (track->getKind () == "audio")
29
29
  {
@@ -38,9 +38,9 @@ auto HybridMediaStream::getVideoTracks ()
38
38
  {
39
39
  std::vector<std::shared_ptr<HybridMediaStreamTrackSpec>>
40
40
  hybridMediaStreamTrackSpecs;
41
- hybridMediaStreamTrackSpecs.reserve (mediaStreamTrackMap.size ());
41
+ hybridMediaStreamTrackSpecs.reserve (mediaStreamTracks.size ());
42
42
 
43
- for (const auto &[_, track] : mediaStreamTrackMap)
43
+ for (const auto &track : mediaStreamTracks)
44
44
  {
45
45
  if (track->getKind () == "video")
46
46
  {
@@ -53,11 +53,19 @@ auto HybridMediaStream::getVideoTracks ()
53
53
  void HybridMediaStream::addTrack (
54
54
  const std::shared_ptr<HybridMediaStreamTrackSpec> &track)
55
55
  {
56
- mediaStreamTrackMap[track->getId ()] = track;
56
+ if (std::find (mediaStreamTracks.begin (), mediaStreamTracks.end (), track)
57
+ != mediaStreamTracks.end ())
58
+ {
59
+ return;
60
+ }
61
+
62
+ mediaStreamTracks.push_back (track);
57
63
  };
58
64
 
59
65
  void HybridMediaStream::removeTrack (
60
66
  const std::shared_ptr<HybridMediaStreamTrackSpec> &track)
61
67
  {
62
- mediaStreamTrackMap.erase (track->getId ());
68
+ mediaStreamTracks.erase (std::remove (mediaStreamTracks.begin (),
69
+ mediaStreamTracks.end (), track),
70
+ mediaStreamTracks.end ());
63
71
  };
@@ -8,9 +8,8 @@ namespace margelo::nitro::webrtc
8
8
  {
9
9
  private:
10
10
  const std::string id;
11
- std::unordered_map<std::string,
12
- std::shared_ptr<HybridMediaStreamTrackSpec>>
13
- mediaStreamTrackMap;
11
+ std::vector<std::shared_ptr<HybridMediaStreamTrackSpec>>
12
+ mediaStreamTracks;
14
13
 
15
14
  public:
16
15
  HybridMediaStream ()
@@ -334,7 +334,8 @@ void HybridRTCPeerConnection::setConfiguration (
334
334
  {
335
335
  if (this->iceCandidateHandler)
336
336
  {
337
- RTCIceCandidate candidateObj{ candidate.candidate () };
337
+ RTCIceCandidate candidateObj{ candidate.candidate (),
338
+ candidate.mid () };
338
339
  RTCPeerConnectionIceEvent event{ candidateObj };
339
340
  this->iceCandidateHandler.value () (event);
340
341
  }
@@ -104,7 +104,6 @@ void HybridRTCRtpTransceiver::senderOnOpen ()
104
104
  return;
105
105
  }
106
106
 
107
- const size_t mtu = 1200;
108
107
  auto ssrcs = track->description ().getSSRCs ();
109
108
  if (ssrcs.size () != 1)
110
109
  {
@@ -116,31 +115,72 @@ void HybridRTCRtpTransceiver::senderOnOpen ()
116
115
  auto separator = rtc::NalUnit::Separator::StartSequence;
117
116
  if (rtpMap->format == "H265")
118
117
  {
118
+ // create RTP configuration
119
119
  auto rtpConfig = std::make_shared<rtc::RtpPacketizationConfig> (
120
120
  ssrc, track->mid (), rtpMap->payloadType,
121
121
  rtc::H265RtpPacketizer::ClockRate);
122
- auto packetizer = std::make_shared<rtc::H265RtpPacketizer> (
123
- separator, rtpConfig, mtu);
124
- track->chainMediaHandler (packetizer);
122
+ // create packetizer
123
+ auto packetizer
124
+ = std::make_shared<rtc::H265RtpPacketizer> (separator, rtpConfig);
125
+
126
+ // add RTCP SR handler
127
+ auto srReporter = make_shared<rtc::RtcpSrReporter> (rtpConfig);
128
+ packetizer->addToChain (srReporter);
129
+
130
+ // add RTCP NACK handler
131
+ auto nackResponder = make_shared<rtc::RtcpNackResponder> ();
132
+ packetizer->addToChain (nackResponder);
133
+
134
+ // set handler
135
+ track->setMediaHandler (packetizer);
136
+
125
137
  avCodecId = AV_CODEC_ID_H265;
126
138
  }
127
139
  else if (rtpMap->format == "H264")
128
140
  {
141
+ // create RTP configuration
129
142
  auto rtpConfig = std::make_shared<rtc::RtpPacketizationConfig> (
130
143
  ssrc, track->mid (), rtpMap->payloadType,
131
144
  rtc::H264RtpPacketizer::ClockRate);
132
- auto packetizer = std::make_shared<rtc::H264RtpPacketizer> (
133
- separator, rtpConfig, mtu);
134
- track->chainMediaHandler (packetizer);
145
+
146
+ // create packetizer
147
+ auto packetizer
148
+ = std::make_shared<rtc::H264RtpPacketizer> (separator, rtpConfig);
149
+
150
+ // add RTCP SR handler
151
+ auto srReporter = make_shared<rtc::RtcpSrReporter> (rtpConfig);
152
+ packetizer->addToChain (srReporter);
153
+
154
+ // add RTCP NACK handler
155
+ auto nackResponder = make_shared<rtc::RtcpNackResponder> ();
156
+ packetizer->addToChain (nackResponder);
157
+
158
+ // set handler
159
+ track->setMediaHandler (packetizer);
160
+
135
161
  avCodecId = AV_CODEC_ID_H264;
136
162
  }
137
163
  else if (rtpMap->format == "opus")
138
164
  {
165
+ // create RTP configuration
139
166
  auto rtpConfig = std::make_shared<rtc::RtpPacketizationConfig> (
140
167
  ssrc, track->mid (), rtpMap->payloadType,
141
168
  rtc::OpusRtpPacketizer::DefaultClockRate);
169
+
170
+ // create packetizer
142
171
  auto packetizer = std::make_shared<rtc::OpusRtpPacketizer> (rtpConfig);
143
- track->chainMediaHandler (packetizer);
172
+
173
+ // add RTCP SR handler
174
+ auto srReporter = make_shared<rtc::RtcpSrReporter> (rtpConfig);
175
+ packetizer->addToChain (srReporter);
176
+
177
+ // add RTCP NACK handler
178
+ auto nackResponder = make_shared<rtc::RtcpNackResponder> ();
179
+ packetizer->addToChain (nackResponder);
180
+
181
+ // set handler
182
+ track->setMediaHandler (packetizer);
183
+
144
184
  avCodecId = AV_CODEC_ID_OPUS;
145
185
  }
146
186
  else
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeNitroModules","require","RTCPeerConnectionConstructor","getHybridObjectConstructor","RTCPeerConnectionExport","exports","RTCPeerConnection","Proxy","construct","target","args","config","instance","setConfiguration"],"sourceRoot":"../../../src","sources":["specs/RTCPeerConnection.nitro.ts"],"mappings":";;;;;;AACA,IAAAA,wBAAA,GAAAC,OAAA;AA4FA,MAAMC,4BAA4B,GAChC,IAAAC,mDAA0B,EAAoB,mBAAmB,CAAC;AACpE,MAAMC,uBAAuB,GAAAC,OAAA,CAAAC,iBAAA,GAAG,IAAIC,KAAK,CAACL,4BAA4B,EAAE;EACtEM,SAASA,CAACC,MAAM,EAAEC,IAAI,EAAE;IACtB,MAAMC,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAiC;IACtD,MAAME,QAAQ,GAAG,IAAIH,MAAM,CAAC,CAAC;IAC7BG,QAAQ,CAACC,gBAAgB,CAACF,MAAM,CAAC;IACjC,OAAOC,QAAQ;EACjB;AACF,CAAC,CAA2D","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeNitroModules","require","RTCPeerConnectionConstructor","getHybridObjectConstructor","RTCPeerConnectionExport","exports","RTCPeerConnection","Proxy","construct","target","args","config","instance","setConfiguration"],"sourceRoot":"../../../src","sources":["specs/RTCPeerConnection.nitro.ts"],"mappings":";;;;;;AACA,IAAAA,wBAAA,GAAAC,OAAA;AA6FA,MAAMC,4BAA4B,GAChC,IAAAC,mDAA0B,EAAoB,mBAAmB,CAAC;AACpE,MAAMC,uBAAuB,GAAAC,OAAA,CAAAC,iBAAA,GAAG,IAAIC,KAAK,CAACL,4BAA4B,EAAE;EACtEM,SAASA,CAACC,MAAM,EAAEC,IAAI,EAAE;IACtB,MAAMC,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAiC;IACtD,MAAME,QAAQ,GAAG,IAAIH,MAAM,CAAC,CAAC;IAC7BG,QAAQ,CAACC,gBAAgB,CAACF,MAAM,CAAC;IACjC,OAAOC,QAAQ;EACjB;AACF,CAAC,CAA2D","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["getHybridObjectConstructor","RTCPeerConnectionConstructor","RTCPeerConnectionExport","Proxy","construct","target","args","config","instance","setConfiguration","RTCPeerConnection"],"sourceRoot":"../../../src","sources":["specs/RTCPeerConnection.nitro.ts"],"mappings":";;AACA,SAASA,0BAA0B,QAAQ,4BAA4B;AA4FvE,MAAMC,4BAA4B,GAChCD,0BAA0B,CAAoB,mBAAmB,CAAC;AACpE,MAAME,uBAAuB,GAAG,IAAIC,KAAK,CAACF,4BAA4B,EAAE;EACtEG,SAASA,CAACC,MAAM,EAAEC,IAAI,EAAE;IACtB,MAAMC,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAiC;IACtD,MAAME,QAAQ,GAAG,IAAIH,MAAM,CAAC,CAAC;IAC7BG,QAAQ,CAACC,gBAAgB,CAACF,MAAM,CAAC;IACjC,OAAOC,QAAQ;EACjB;AACF,CAAC,CAA2D;AAE5D,SAASN,uBAAuB,IAAIQ,iBAAiB","ignoreList":[]}
1
+ {"version":3,"names":["getHybridObjectConstructor","RTCPeerConnectionConstructor","RTCPeerConnectionExport","Proxy","construct","target","args","config","instance","setConfiguration","RTCPeerConnection"],"sourceRoot":"../../../src","sources":["specs/RTCPeerConnection.nitro.ts"],"mappings":";;AACA,SAASA,0BAA0B,QAAQ,4BAA4B;AA6FvE,MAAMC,4BAA4B,GAChCD,0BAA0B,CAAoB,mBAAmB,CAAC;AACpE,MAAME,uBAAuB,GAAG,IAAIC,KAAK,CAACF,4BAA4B,EAAE;EACtEG,SAASA,CAACC,MAAM,EAAEC,IAAI,EAAE;IACtB,MAAMC,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAiC;IACtD,MAAME,QAAQ,GAAG,IAAIH,MAAM,CAAC,CAAC;IAC7BG,QAAQ,CAACC,gBAAgB,CAACF,MAAM,CAAC;IACjC,OAAOC,QAAQ;EACjB;AACF,CAAC,CAA2D;AAE5D,SAASN,uBAAuB,IAAIQ,iBAAiB","ignoreList":[]}
@@ -23,6 +23,7 @@ export interface RTCRtpTransceiverInit {
23
23
  }
24
24
  export interface RTCIceCandidate {
25
25
  readonly candidate: string;
26
+ readonly sdpMid: string | null;
26
27
  }
27
28
  export interface RTCIceCandidateInit {
28
29
  candidate?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"RTCPeerConnection.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/RTCPeerConnection.nitro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RTCPeerConnection.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/RTCPeerConnection.nitro.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,9 @@
26
26
 
27
27
 
28
28
  #include <string>
29
+ #include <NitroModules/Null.hpp>
30
+ #include <variant>
31
+ #include <optional>
29
32
 
30
33
  namespace margelo::nitro::webrtc {
31
34
 
@@ -35,10 +38,11 @@ namespace margelo::nitro::webrtc {
35
38
  struct RTCIceCandidate {
36
39
  public:
37
40
  std::string candidate SWIFT_PRIVATE;
41
+ std::optional<std::variant<nitro::NullType, std::string>> sdpMid SWIFT_PRIVATE;
38
42
 
39
43
  public:
40
44
  RTCIceCandidate() = default;
41
- explicit RTCIceCandidate(std::string candidate): candidate(candidate) {}
45
+ explicit RTCIceCandidate(std::string candidate, std::optional<std::variant<nitro::NullType, std::string>> sdpMid): candidate(candidate), sdpMid(sdpMid) {}
42
46
  };
43
47
 
44
48
  } // namespace margelo::nitro::webrtc
@@ -51,12 +55,14 @@ namespace margelo::nitro {
51
55
  static inline margelo::nitro::webrtc::RTCIceCandidate fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
52
56
  jsi::Object obj = arg.asObject(runtime);
53
57
  return margelo::nitro::webrtc::RTCIceCandidate(
54
- JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "candidate"))
58
+ JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "candidate")),
59
+ JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, "sdpMid"))
55
60
  );
56
61
  }
57
62
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::webrtc::RTCIceCandidate& arg) {
58
63
  jsi::Object obj(runtime);
59
64
  obj.setProperty(runtime, "candidate", JSIConverter<std::string>::toJSI(runtime, arg.candidate));
65
+ obj.setProperty(runtime, "sdpMid", JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::toJSI(runtime, arg.sdpMid));
60
66
  return obj;
61
67
  }
62
68
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -68,6 +74,7 @@ namespace margelo::nitro {
68
74
  return false;
69
75
  }
70
76
  if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "candidate"))) return false;
77
+ if (!JSIConverter<std::optional<std::variant<nitro::NullType, std::string>>>::canConvert(runtime, obj.getProperty(runtime, "sdpMid"))) return false;
71
78
  return true;
72
79
  }
73
80
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-webrtc-nitro",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "description": "Nitro WebRTC module for React Native",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
@@ -36,6 +36,7 @@ export interface RTCRtpTransceiverInit {
36
36
 
37
37
  export interface RTCIceCandidate {
38
38
  readonly candidate: string
39
+ readonly sdpMid: string | null
39
40
  }
40
41
 
41
42
  export interface RTCIceCandidateInit {