mediasoup 3.9.13 → 3.9.16

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.
Files changed (79) hide show
  1. package/node/lib/ActiveSpeakerObserver.d.ts +1 -1
  2. package/node/lib/ActiveSpeakerObserver.d.ts.map +1 -1
  3. package/node/lib/AudioLevelObserver.d.ts +1 -1
  4. package/node/lib/AudioLevelObserver.d.ts.map +1 -1
  5. package/node/lib/Consumer.d.ts +4 -4
  6. package/node/lib/Consumer.d.ts.map +1 -1
  7. package/node/lib/Consumer.js +1 -1
  8. package/node/lib/DataConsumer.d.ts +4 -4
  9. package/node/lib/DataConsumer.d.ts.map +1 -1
  10. package/node/lib/DataConsumer.js +1 -1
  11. package/node/lib/DataProducer.d.ts +4 -4
  12. package/node/lib/DataProducer.d.ts.map +1 -1
  13. package/node/lib/DataProducer.js +1 -1
  14. package/node/lib/DirectTransport.d.ts +1 -1
  15. package/node/lib/DirectTransport.d.ts.map +1 -1
  16. package/node/lib/PipeTransport.d.ts +2 -2
  17. package/node/lib/PipeTransport.d.ts.map +1 -1
  18. package/node/lib/PipeTransport.js +1 -1
  19. package/node/lib/PlainTransport.d.ts +1 -1
  20. package/node/lib/PlainTransport.d.ts.map +1 -1
  21. package/node/lib/Producer.d.ts +4 -4
  22. package/node/lib/Producer.d.ts.map +1 -1
  23. package/node/lib/Producer.js +1 -1
  24. package/node/lib/Router.d.ts +4 -4
  25. package/node/lib/Router.d.ts.map +1 -1
  26. package/node/lib/Router.js +7 -7
  27. package/node/lib/RtpObserver.d.ts +3 -3
  28. package/node/lib/RtpObserver.d.ts.map +1 -1
  29. package/node/lib/RtpObserver.js +1 -1
  30. package/node/lib/Transport.d.ts +3 -3
  31. package/node/lib/Transport.d.ts.map +1 -1
  32. package/node/lib/Transport.js +5 -5
  33. package/node/lib/WebRtcTransport.d.ts +1 -1
  34. package/node/lib/WebRtcTransport.d.ts.map +1 -1
  35. package/node/lib/Worker.d.ts +3 -3
  36. package/node/lib/Worker.d.ts.map +1 -1
  37. package/node/lib/Worker.js +3 -3
  38. package/node/lib/index.d.ts +1 -1
  39. package/node/lib/index.d.ts.map +1 -1
  40. package/node/lib/index.js +2 -2
  41. package/node/lib/ortc.js +1 -0
  42. package/node/lib/supportedRtpCapabilities.d.ts.map +1 -1
  43. package/node/lib/supportedRtpCapabilities.js +15 -0
  44. package/package.json +6 -6
  45. package/worker/include/RTC/Codecs/H264_SVC.hpp +115 -0
  46. package/worker/include/RTC/Codecs/Tools.hpp +11 -0
  47. package/worker/include/RTC/Consumer.hpp +5 -4
  48. package/worker/include/RTC/DirectTransport.hpp +4 -0
  49. package/worker/include/RTC/NackGenerator.hpp +5 -2
  50. package/worker/include/RTC/PipeConsumer.hpp +1 -0
  51. package/worker/include/RTC/RTCP/CompoundPacket.hpp +2 -0
  52. package/worker/include/RTC/RtpDictionaries.hpp +1 -0
  53. package/worker/include/RTC/RtpStream.hpp +2 -0
  54. package/worker/include/RTC/RtpStreamRecv.hpp +7 -1
  55. package/worker/include/RTC/RtpStreamSend.hpp +7 -0
  56. package/worker/include/RTC/SimpleConsumer.hpp +1 -0
  57. package/worker/include/RTC/SimulcastConsumer.hpp +4 -0
  58. package/worker/include/RTC/SvcConsumer.hpp +1 -0
  59. package/worker/meson.build +4 -0
  60. package/worker/src/RTC/Codecs/H264_SVC.cpp +428 -0
  61. package/worker/src/RTC/DirectTransport.cpp +10 -1
  62. package/worker/src/RTC/NackGenerator.cpp +27 -9
  63. package/worker/src/RTC/PipeConsumer.cpp +20 -0
  64. package/worker/src/RTC/Producer.cpp +5 -1
  65. package/worker/src/RTC/RTCP/CompoundPacket.cpp +7 -0
  66. package/worker/src/RTC/RtpDictionaries/RtpCodecMimeType.cpp +2 -0
  67. package/worker/src/RTC/RtpStreamRecv.cpp +4 -3
  68. package/worker/src/RTC/RtpStreamSend.cpp +32 -0
  69. package/worker/src/RTC/SimpleConsumer.cpp +17 -0
  70. package/worker/src/RTC/SimulcastConsumer.cpp +45 -4
  71. package/worker/src/RTC/SvcConsumer.cpp +17 -0
  72. package/worker/src/RTC/Transport.cpp +14 -0
  73. package/worker/src/RTC/TransportCongestionControlClient.cpp +0 -3
  74. package/worker/test/include/helpers.hpp +119 -0
  75. package/worker/test/src/RTC/Codecs/TestH264.cpp +30 -0
  76. package/worker/test/src/RTC/Codecs/TestH264_SVC.cpp +181 -0
  77. package/worker/test/src/RTC/TestNackGenerator.cpp +3 -1
  78. package/worker/test/src/RTC/TestRtpPacketH264Svc.cpp +455 -0
  79. package/worker/test/src/RTC/TestRtpStreamRecv.cpp +4 -3
@@ -52,7 +52,7 @@ export declare type WebRtcTransportOptions = {
52
52
  /**
53
53
  * Custom application data.
54
54
  */
55
- appData?: any;
55
+ appData?: Record<string, unknown>;
56
56
  };
57
57
  export declare type IceParameters = {
58
58
  usernameFragment: string;
@@ -1 +1 @@
1
- {"version":3,"file":"WebRtcTransport.d.ts","sourceRoot":"","sources":["../src/WebRtcTransport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebRtcTransport.d.ts","sourceRoot":"","sources":["../src/WebRtcTransport.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export declare type WorkerSettings = {
35
35
  /**
36
36
  * Custom application data.
37
37
  */
38
- appData?: any;
38
+ appData?: Record<string, unknown>;
39
39
  };
40
40
  export declare type WorkerUpdateableSettings = Pick<WorkerSettings, 'logLevel' | 'logTags'>;
41
41
  /**
@@ -141,11 +141,11 @@ export declare class Worker extends EnhancedEventEmitter<WorkerEvents> {
141
141
  /**
142
142
  * App custom data.
143
143
  */
144
- get appData(): any;
144
+ get appData(): Record<string, unknown>;
145
145
  /**
146
146
  * Invalid setter.
147
147
  */
148
- set appData(appData: any);
148
+ set appData(appData: Record<string, unknown>);
149
149
  /**
150
150
  * Observer.
151
151
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"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"}
@@ -81,7 +81,7 @@ class Worker extends EnhancedEventEmitter_1.EnhancedEventEmitter {
81
81
  // options
82
82
  {
83
83
  env: {
84
- MEDIASOUP_VERSION: '3.9.13',
84
+ MEDIASOUP_VERSION: '3.9.16',
85
85
  // Let the worker process inherit all environment variables, useful
86
86
  // if a custom and not in the path GCC is used so the user can set
87
87
  // LD_LIBRARY_PATH environment variable for runtime.
@@ -111,7 +111,7 @@ class Worker extends EnhancedEventEmitter_1.EnhancedEventEmitter {
111
111
  // @ts-ignore
112
112
  consumerSocket: this.#child.stdio[6]
113
113
  });
114
- this.#appData = appData;
114
+ this.#appData = appData || {};
115
115
  let spawnDone = false;
116
116
  // Listen for 'running' notification.
117
117
  this.#channel.once(String(this.#pid), (event) => {
@@ -270,7 +270,7 @@ class Worker extends EnhancedEventEmitter_1.EnhancedEventEmitter {
270
270
  /**
271
271
  * Create a Router.
272
272
  */
273
- async createRouter({ mediaCodecs, appData = {} } = {}) {
273
+ async createRouter({ mediaCodecs, appData } = {}) {
274
274
  logger.debug('createRouter()');
275
275
  if (appData && typeof appData !== 'object')
276
276
  throw new TypeError('if given, appData must be an object');
@@ -9,7 +9,7 @@ export { types };
9
9
  /**
10
10
  * Expose mediasoup version.
11
11
  */
12
- export declare const version = "3.9.13";
12
+ export declare const version = "3.9.16";
13
13
  /**
14
14
  * Expose parseScalabilityMode() function.
15
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAE/C;;GAEG;AACH,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,QAAA,MAAM,QAAQ;;;;;;EAA6B,CAAC;AAE5C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;GAEG;AACH,wBAAsB,YAAY,CACjC,EACC,QAAkB,EAClB,OAAO,EACP,UAAkB,EAClB,UAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,OAAY,EACZ,GAAE,cAAmB,GACpB,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,eAAe,CAG7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAE/C;;GAEG;AACH,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,QAAA,MAAM,QAAQ;;;;;;EAA6B,CAAC;AAE5C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;GAEG;AACH,wBAAsB,YAAY,CACjC,EACC,QAAkB,EAClB,OAAO,EACP,UAAkB,EAClB,UAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,OAAO,EACP,GAAE,cAAmB,GACpB,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,eAAe,CAG7D"}
package/node/lib/index.js CHANGED
@@ -11,7 +11,7 @@ exports.types = types;
11
11
  /**
12
12
  * Expose mediasoup version.
13
13
  */
14
- exports.version = '3.9.13';
14
+ exports.version = '3.9.16';
15
15
  /**
16
16
  * Expose parseScalabilityMode() function.
17
17
  */
@@ -23,7 +23,7 @@ exports.observer = observer;
23
23
  /**
24
24
  * Create a Worker.
25
25
  */
26
- async function createWorker({ logLevel = 'error', logTags, rtcMinPort = 10000, rtcMaxPort = 59999, dtlsCertificateFile, dtlsPrivateKeyFile, appData = {} } = {}) {
26
+ async function createWorker({ logLevel = 'error', logTags, rtcMinPort = 10000, rtcMaxPort = 59999, dtlsCertificateFile, dtlsPrivateKeyFile, appData } = {}) {
27
27
  logger.debug('createWorker()');
28
28
  if (appData && typeof appData !== 'object')
29
29
  throw new TypeError('if given, appData must be an object');
package/node/lib/ortc.js CHANGED
@@ -828,6 +828,7 @@ function matchCodecs(aCodec, bCodec, { strict = false, modify = false } = {}) {
828
828
  break;
829
829
  }
830
830
  case 'video/h264':
831
+ case 'video/h264-svc':
831
832
  {
832
833
  if (strict) {
833
834
  const aPacketizationMode = aCodec.parameters['packetization-mode'] || 0;
@@ -1 +1 @@
1
- {"version":3,"file":"supportedRtpCapabilities.d.ts","sourceRoot":"","sources":["../src/supportedRtpCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,QAAA,MAAM,wBAAwB,EAAE,eAgX/B,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"supportedRtpCapabilities.d.ts","sourceRoot":"","sources":["../src/supportedRtpCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,QAAA,MAAM,wBAAwB,EAAE,eA+X/B,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -217,6 +217,21 @@ const supportedRtpCapabilities = {
217
217
  { type: 'transport-cc' }
218
218
  ]
219
219
  },
220
+ {
221
+ kind: 'video',
222
+ mimeType: 'video/H264-SVC',
223
+ clockRate: 90000,
224
+ parameters: {
225
+ 'level-asymmetry-allowed': 1
226
+ },
227
+ rtcpFeedback: [
228
+ { type: 'nack' },
229
+ { type: 'nack', parameter: 'pli' },
230
+ { type: 'ccm', parameter: 'fir' },
231
+ { type: 'goog-remb' },
232
+ { type: 'transport-cc' }
233
+ ]
234
+ },
220
235
  {
221
236
  kind: 'video',
222
237
  mimeType: 'video/H265',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup",
3
- "version": "3.9.13",
3
+ "version": "3.9.16",
4
4
  "description": "Cutting Edge WebRTC Video Conferencing",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -77,16 +77,16 @@
77
77
  "devDependencies": {
78
78
  "@types/debug": "^4.1.7",
79
79
  "@types/uuid": "^8.3.4",
80
- "@typescript-eslint/eslint-plugin": "^5.23.0",
81
- "@typescript-eslint/parser": "^5.23.0",
82
- "eslint": "^8.15.0",
83
- "eslint-plugin-jest": "^26.1.5",
80
+ "@typescript-eslint/eslint-plugin": "^5.27.0",
81
+ "@typescript-eslint/parser": "^5.27.0",
82
+ "eslint": "^8.16.0",
83
+ "eslint-plugin-jest": "^26.4.6",
84
84
  "jest": "^27.5.1",
85
85
  "jest-tobetype": "^1.2.3",
86
86
  "open-cli": "^7.0.1",
87
87
  "pick-port": "^1.0.0",
88
88
  "sctp": "^1.0.0",
89
89
  "tsc-watch": "^5.0.3",
90
- "typescript": "^4.6.4"
90
+ "typescript": "^4.7.2"
91
91
  }
92
92
  }
@@ -0,0 +1,115 @@
1
+ #ifndef MS_RTC_CODECS_H264_SVC_HPP
2
+ #define MS_RTC_CODECS_H264_SVC_HPP
3
+
4
+ #include "common.hpp"
5
+ #include "RTC/Codecs/PayloadDescriptorHandler.hpp"
6
+ #include "RTC/RtpPacket.hpp"
7
+ #include "RTC/SeqManager.hpp"
8
+
9
+ namespace RTC
10
+ {
11
+ namespace Codecs
12
+ {
13
+ class H264_SVC
14
+ {
15
+ public:
16
+ struct PayloadDescriptor : public RTC::Codecs::PayloadDescriptor
17
+ {
18
+ ~PayloadDescriptor() = default;
19
+
20
+ void Dump() const override;
21
+
22
+ // Fields in frame-marking extension.
23
+ uint8_t s : 1; // Start of Frame.
24
+ uint8_t e : 1; // End of Frame.
25
+ uint8_t i : 1; // Independent Frame.
26
+ uint8_t d : 1; // Discardable Frame.
27
+ uint8_t b : 1; // Base Layer Sync.
28
+ uint8_t slIndex{ 0 }; // Temporal layer id.
29
+ uint8_t tlIndex{ 0 }; // Spatial layer id.
30
+ uint8_t tl0picidx{ 0 }; // TL0PICIDX
31
+
32
+ // Parsed values.
33
+ bool hasSlIndex{ false };
34
+ bool hasTlIndex{ false };
35
+ bool hasTl0picidx{ false };
36
+ bool isKeyFrame{ false };
37
+
38
+ // Extension fields.
39
+ uint8_t idr{ 0 };
40
+ uint8_t priorityId{ 0 };
41
+ uint8_t noIntLayerPredFlag{ true };
42
+ };
43
+
44
+ public:
45
+ static H264_SVC::PayloadDescriptor* Parse(
46
+ const uint8_t* data,
47
+ size_t len,
48
+ RTC::RtpPacket::FrameMarking* frameMarking = nullptr,
49
+ uint8_t frameMarkingLen = 0);
50
+ static std::unique_ptr<H264_SVC::PayloadDescriptor> ParseSingleNalu(
51
+ const uint8_t* data,
52
+ size_t len,
53
+ std::unique_ptr<H264_SVC::PayloadDescriptor> payloadDescriptor,
54
+ bool isStartBit); // useful in FU packet to indicate first packet. Set to true for other packets
55
+ static void ProcessRtpPacket(RTC::RtpPacket* packet);
56
+
57
+ public:
58
+ class EncodingContext : public RTC::Codecs::EncodingContext
59
+ {
60
+ public:
61
+ explicit EncodingContext(RTC::Codecs::EncodingContext::Params& params)
62
+ : RTC::Codecs::EncodingContext(params)
63
+ {
64
+ }
65
+ ~EncodingContext() = default;
66
+
67
+ /* Pure virtual methods inherited from RTC::Codecs::EncodingContext. */
68
+ public:
69
+ void SyncRequired() override
70
+ {
71
+ }
72
+
73
+ public:
74
+ RTC::SeqManager<uint16_t> pictureIdManager;
75
+ bool syncRequired{ false };
76
+ };
77
+
78
+ public:
79
+ class PayloadDescriptorHandler : public RTC::Codecs::PayloadDescriptorHandler
80
+ {
81
+ public:
82
+ explicit PayloadDescriptorHandler(PayloadDescriptor* payloadDescriptor);
83
+ ~PayloadDescriptorHandler() = default;
84
+
85
+ public:
86
+ void Dump() const override
87
+ {
88
+ this->payloadDescriptor->Dump();
89
+ }
90
+ bool Process(RTC::Codecs::EncodingContext* encodingContext, uint8_t* data, bool& marker) override;
91
+ void Restore(uint8_t* data) override;
92
+ uint8_t GetSpatialLayer() const override
93
+ {
94
+ // return 0u;
95
+ return this->payloadDescriptor->hasSlIndex ? this->payloadDescriptor->slIndex : 0u;
96
+ }
97
+ uint8_t GetTemporalLayer() const override
98
+ {
99
+ // return this->payloadDescriptor->tid;
100
+ return this->payloadDescriptor->hasTlIndex ? this->payloadDescriptor->tlIndex : 0u;
101
+ }
102
+ bool IsKeyFrame() const override
103
+ {
104
+ return this->payloadDescriptor->isKeyFrame;
105
+ }
106
+
107
+ private:
108
+ std::unique_ptr<PayloadDescriptor> payloadDescriptor;
109
+ };
110
+ };
111
+ } // namespace Codecs
112
+
113
+ } // namespace RTC
114
+
115
+ #endif
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include "common.hpp"
5
5
  #include "RTC/Codecs/H264.hpp"
6
+ #include "RTC/Codecs/H264_SVC.hpp"
6
7
  #include "RTC/Codecs/PayloadDescriptorHandler.hpp"
7
8
  #include "RTC/Codecs/VP8.hpp"
8
9
  #include "RTC/Codecs/VP9.hpp"
@@ -29,6 +30,7 @@ namespace RTC
29
30
  case RTC::RtpCodecMimeType::Subtype::VP8:
30
31
  case RTC::RtpCodecMimeType::Subtype::VP9:
31
32
  case RTC::RtpCodecMimeType::Subtype::H264:
33
+ case RTC::RtpCodecMimeType::Subtype::H264_SVC:
32
34
  return true;
33
35
  default:
34
36
  return false;
@@ -70,6 +72,12 @@ namespace RTC
70
72
 
71
73
  break;
72
74
  }
75
+ case RTC::RtpCodecMimeType::Subtype::H264_SVC:
76
+ {
77
+ RTC::Codecs::H264_SVC::ProcessRtpPacket(packet);
78
+
79
+ break;
80
+ }
73
81
 
74
82
  default:;
75
83
  }
@@ -125,6 +133,7 @@ namespace RTC
125
133
  switch (mimeType.subtype)
126
134
  {
127
135
  case RTC::RtpCodecMimeType::Subtype::VP9:
136
+ case RTC::RtpCodecMimeType::Subtype::H264_SVC:
128
137
  return true;
129
138
  default:
130
139
  return false;
@@ -165,6 +174,8 @@ namespace RTC
165
174
  return new RTC::Codecs::VP9::EncodingContext(params);
166
175
  case RTC::RtpCodecMimeType::Subtype::H264:
167
176
  return new RTC::Codecs::H264::EncodingContext(params);
177
+ case RTC::RtpCodecMimeType::Subtype::H264_SVC:
178
+ return new RTC::Codecs::H264_SVC::EncodingContext(params);
168
179
  default:
169
180
  return nullptr;
170
181
  }
@@ -149,10 +149,11 @@ namespace RTC
149
149
  virtual void NeedWorstRemoteFractionLost(uint32_t mappedSsrc, uint8_t& worstRemoteFractionLost) = 0;
150
150
  virtual void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket) = 0;
151
151
  virtual void ReceiveKeyFrameRequest(
152
- RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) = 0;
153
- virtual void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) = 0;
154
- virtual uint32_t GetTransmissionRate(uint64_t nowMs) = 0;
155
- virtual float GetRtt() const = 0;
152
+ RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) = 0;
153
+ virtual void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) = 0;
154
+ virtual void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report) = 0;
155
+ virtual uint32_t GetTransmissionRate(uint64_t nowMs) = 0;
156
+ virtual float GetRtt() const = 0;
156
157
 
157
158
  protected:
158
159
  void EmitTraceEventRtpAndKeyFrameTypes(RTC::RtpPacket* packet, bool isRtx = false) const;
@@ -34,6 +34,10 @@ namespace RTC
34
34
  void SendSctpData(const uint8_t* data, size_t len) override;
35
35
  void RecvStreamClosed(uint32_t ssrc) override;
36
36
  void SendStreamClosed(uint32_t ssrc) override;
37
+
38
+ private:
39
+ // Allocated by this.
40
+ uint8_t* buffer{ nullptr };
37
41
  };
38
42
  } // namespace RTC
39
43
 
@@ -30,10 +30,12 @@ namespace RTC
30
30
  struct NackInfo
31
31
  {
32
32
  NackInfo() = default;
33
- explicit NackInfo(uint16_t seq, uint16_t sendAtSeq) : seq(seq), sendAtSeq(sendAtSeq)
33
+ explicit NackInfo(uint64_t createdAtMs, uint16_t seq, uint16_t sendAtSeq)
34
+ : createdAtMs(createdAtMs), seq(seq), sendAtSeq(sendAtSeq)
34
35
  {
35
36
  }
36
37
 
38
+ uint64_t createdAtMs{ 0u };
37
39
  uint16_t seq{ 0u };
38
40
  uint16_t sendAtSeq{ 0u };
39
41
  uint64_t sentAtMs{ 0u };
@@ -47,7 +49,7 @@ namespace RTC
47
49
  };
48
50
 
49
51
  public:
50
- explicit NackGenerator(Listener* listener);
52
+ explicit NackGenerator(Listener* listener, unsigned int sendNackDelayMs);
51
53
  ~NackGenerator() override;
52
54
 
53
55
  bool ReceivePacket(RTC::RtpPacket* packet, bool isRecovered);
@@ -74,6 +76,7 @@ namespace RTC
74
76
  private:
75
77
  // Passed by argument.
76
78
  Listener* listener{ nullptr };
79
+ unsigned int sendNackDelayMs{ 0u };
77
80
  // Allocated by this.
78
81
  Timer* timer{ nullptr };
79
82
  // Others.
@@ -40,6 +40,7 @@ namespace RTC
40
40
  void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket) override;
41
41
  void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) override;
42
42
  void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) override;
43
+ void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report) override;
43
44
  uint32_t GetTransmissionRate(uint64_t nowMs) override;
44
45
  float GetRtt() const override;
45
46
 
@@ -5,6 +5,7 @@
5
5
  #include "RTC/RTCP/ReceiverReport.hpp"
6
6
  #include "RTC/RTCP/Sdes.hpp"
7
7
  #include "RTC/RTCP/SenderReport.hpp"
8
+ #include "RTC/RTCP/XrDelaySinceLastRr.hpp"
8
9
  #include "RTC/RTCP/XrReceiverReferenceTime.hpp"
9
10
  #include <vector>
10
11
 
@@ -39,6 +40,7 @@ namespace RTC
39
40
  void AddReceiverReport(ReceiverReport* report);
40
41
  void AddSdesChunk(SdesChunk* chunk);
41
42
  void AddReceiverReferenceTime(ReceiverReferenceTime* report);
43
+ void AddDelaySinceLastRr(DelaySinceLastRr* report);
42
44
  bool HasSenderReport()
43
45
  {
44
46
  return this->senderReportPacket.Begin() != this->senderReportPacket.End();
@@ -60,6 +60,7 @@ namespace RTC
60
60
  VP8 = 200,
61
61
  VP9,
62
62
  H264,
63
+ H264_SVC,
63
64
  X_H264UC,
64
65
  H265,
65
66
  // Complementary codecs:
@@ -10,6 +10,8 @@
10
10
  #include "RTC/RTCP/ReceiverReport.hpp"
11
11
  #include "RTC/RTCP/Sdes.hpp"
12
12
  #include "RTC/RTCP/SenderReport.hpp"
13
+ #include "RTC/RTCP/XrDelaySinceLastRr.hpp"
14
+ #include "RTC/RTCP/XrReceiverReferenceTime.hpp"
13
15
  #include "RTC/RtpDictionaries.hpp"
14
16
  #include "RTC/RtxStream.hpp"
15
17
  #include <nlohmann/json.hpp>
@@ -42,7 +42,10 @@ namespace RTC
42
42
  };
43
43
 
44
44
  public:
45
- RtpStreamRecv(RTC::RtpStreamRecv::Listener* listener, RTC::RtpStream::Params& params);
45
+ RtpStreamRecv(
46
+ RTC::RtpStreamRecv::Listener* listener,
47
+ RTC::RtpStream::Params& params,
48
+ unsigned int sendNackDelayMs);
46
49
  ~RtpStreamRecv();
47
50
 
48
51
  void FillJsonStats(json& jsonObject) override;
@@ -87,6 +90,9 @@ namespace RTC
87
90
  void OnNackGeneratorKeyFrameRequired() override;
88
91
 
89
92
  private:
93
+ // Passed by argument.
94
+ unsigned int sendNackDelayMs{ 0u };
95
+ // Others.
90
96
  uint32_t expectedPrior{ 0u }; // Packets expected at last interval.
91
97
  uint32_t expectedPriorScore{ 0u }; // Packets expected at last interval for score calculation.
92
98
  uint32_t receivedPrior{ 0u }; // Packets received at last interval.
@@ -43,7 +43,9 @@ namespace RTC
43
43
  void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket);
44
44
  void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType);
45
45
  void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report);
46
+ void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report);
46
47
  RTC::RTCP::SenderReport* GetRtcpSenderReport(uint64_t nowMs);
48
+ RTC::RTCP::DelaySinceLastRr::SsrcInfo* GetRtcpXrDelaySinceLastRr(uint64_t nowMs);
47
49
  RTC::RTCP::SdesChunk* GetRtcpSdesChunk();
48
50
  void Pause() override;
49
51
  void Resume() override;
@@ -71,6 +73,11 @@ namespace RTC
71
73
  std::vector<StorageItem> storage;
72
74
  uint16_t rtxSeq{ 0u };
73
75
  RTC::RtpDataCounter transmissionCounter;
76
+ uint32_t lastRrTimestamp{ 0u }; // The middle 32 bits out of 64 in the NTP
77
+ // timestamp received in the most recent
78
+ // receiver reference timestamp.
79
+ uint64_t lastRrReceivedMs{ 0u }; // Wallclock time representing the most recent
80
+ // receiver reference timestamp arrival.
74
81
  };
75
82
  } // namespace RTC
76
83
 
@@ -50,6 +50,7 @@ namespace RTC
50
50
  void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket) override;
51
51
  void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) override;
52
52
  void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) override;
53
+ void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report) override;
53
54
  uint32_t GetTransmissionRate(uint64_t nowMs) override;
54
55
  float GetRtt() const override;
55
56
 
@@ -66,6 +66,7 @@ namespace RTC
66
66
  void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket) override;
67
67
  void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) override;
68
68
  void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) override;
69
+ void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report) override;
69
70
  uint32_t GetTransmissionRate(uint64_t nowMs) override;
70
71
  float GetRtt() const override;
71
72
 
@@ -101,6 +102,7 @@ namespace RTC
101
102
  std::vector<RTC::RtpStreamSend*> rtpStreams;
102
103
  std::vector<RTC::RtpStream*> producerRtpStreams; // Indexed by spatial layer.
103
104
  bool syncRequired{ false };
105
+ int16_t spatialLayerToSync{ -1 };
104
106
  bool lastSentPacketHasMarker{ false };
105
107
  RTC::SeqManager<uint16_t> rtpSeqManager;
106
108
  int16_t preferredSpatialLayer{ -1 };
@@ -111,6 +113,8 @@ namespace RTC
111
113
  int16_t targetTemporalLayer{ -1 };
112
114
  int16_t currentSpatialLayer{ -1 };
113
115
  int16_t tsReferenceSpatialLayer{ -1 }; // Used for RTP TS sync.
116
+ uint16_t snReferenceSpatialLayer{ 0 };
117
+ bool checkingForOldPacketsInSpatialLayer{ false };
114
118
  std::unique_ptr<RTC::Codecs::EncodingContext> encodingContext;
115
119
  uint32_t tsOffset{ 0u }; // RTP Timestamp offset.
116
120
  bool keyFrameForTsOffsetRequested{ false };
@@ -61,6 +61,7 @@ namespace RTC
61
61
  void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket) override;
62
62
  void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc) override;
63
63
  void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report) override;
64
+ void ReceiveRtcpXrReceiverReferenceTime(RTC::RTCP::ReceiverReferenceTime* report) override;
64
65
  uint32_t GetTransmissionRate(uint64_t nowMs) override;
65
66
  float GetRtt() const override;
66
67
 
@@ -99,6 +99,7 @@ common_sources = [
99
99
  'src/RTC/UdpSocket.cpp',
100
100
  'src/RTC/WebRtcTransport.cpp',
101
101
  'src/RTC/Codecs/H264.cpp',
102
+ 'src/RTC/Codecs/H264_SVC.cpp',
102
103
  'src/RTC/Codecs/VP8.cpp',
103
104
  'src/RTC/Codecs/VP9.cpp',
104
105
  'src/RTC/RtpDictionaries/Media.cpp',
@@ -269,12 +270,15 @@ mediasoup_worker_test = executable(
269
270
  'test/src/RTC/TestNackGenerator.cpp',
270
271
  'test/src/RTC/TestRateCalculator.cpp',
271
272
  'test/src/RTC/TestRtpPacket.cpp',
273
+ 'test/src/RTC/TestRtpPacketH264Svc.cpp',
272
274
  'test/src/RTC/TestRtpStreamSend.cpp',
273
275
  'test/src/RTC/TestRtpStreamRecv.cpp',
274
276
  'test/src/RTC/TestSeqManager.cpp',
275
277
  'test/src/RTC/TestTrendCalculator.cpp',
276
278
  'test/src/RTC/TestRtpEncodingParameters.cpp',
277
279
  'test/src/RTC/Codecs/TestVP8.cpp',
280
+ 'test/src/RTC/Codecs/TestH264.cpp',
281
+ 'test/src/RTC/Codecs/TestH264_SVC.cpp',
278
282
  'test/src/RTC/RTCP/TestFeedbackPsAfb.cpp',
279
283
  'test/src/RTC/RTCP/TestFeedbackPsFir.cpp',
280
284
  'test/src/RTC/RTCP/TestFeedbackPsLei.cpp',