mediasoup 3.9.2 → 3.9.3

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.
@@ -2598,23 +2598,27 @@ namespace RTC
2598
2598
  sentInfo.size = packet->GetSize();
2599
2599
  sentInfo.sendingAtMs = DepLibUV::GetTimeMs();
2600
2600
 
2601
- auto* cb = new onSendCallback([tccClient, &packetInfo, senderBwe, &sentInfo](bool sent) {
2602
- if (sent)
2603
- {
2604
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2601
+ auto* cb = new onSendCallback(
2602
+ [tccClient, &packetInfo, senderBwe, &sentInfo](bool sent)
2603
+ {
2604
+ if (sent)
2605
+ {
2606
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2605
2607
 
2606
- sentInfo.sentAtMs = DepLibUV::GetTimeMs();
2608
+ sentInfo.sentAtMs = DepLibUV::GetTimeMs();
2607
2609
 
2608
- senderBwe->RtpPacketSent(sentInfo);
2609
- }
2610
- });
2610
+ senderBwe->RtpPacketSent(sentInfo);
2611
+ }
2612
+ });
2611
2613
 
2612
2614
  SendRtpPacket(consumer, packet, cb);
2613
2615
  #else
2614
- const auto* cb = new onSendCallback([tccClient, &packetInfo](bool sent) {
2615
- if (sent)
2616
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2617
- });
2616
+ const auto* cb = new onSendCallback(
2617
+ [tccClient, &packetInfo](bool sent)
2618
+ {
2619
+ if (sent)
2620
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2621
+ });
2618
2622
 
2619
2623
  SendRtpPacket(consumer, packet, cb);
2620
2624
  #endif
@@ -2666,23 +2670,27 @@ namespace RTC
2666
2670
  sentInfo.size = packet->GetSize();
2667
2671
  sentInfo.sendingAtMs = DepLibUV::GetTimeMs();
2668
2672
 
2669
- auto* cb = new onSendCallback([tccClient, &packetInfo, senderBwe, &sentInfo](bool sent) {
2670
- if (sent)
2671
- {
2672
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2673
+ auto* cb = new onSendCallback(
2674
+ [tccClient, &packetInfo, senderBwe, &sentInfo](bool sent)
2675
+ {
2676
+ if (sent)
2677
+ {
2678
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2673
2679
 
2674
- sentInfo.sentAtMs = DepLibUV::GetTimeMs();
2680
+ sentInfo.sentAtMs = DepLibUV::GetTimeMs();
2675
2681
 
2676
- senderBwe->RtpPacketSent(sentInfo);
2677
- }
2678
- });
2682
+ senderBwe->RtpPacketSent(sentInfo);
2683
+ }
2684
+ });
2679
2685
 
2680
2686
  SendRtpPacket(consumer, packet, cb);
2681
2687
  #else
2682
- const auto* cb = new onSendCallback([tccClient, &packetInfo](bool sent) {
2683
- if (sent)
2684
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2685
- });
2688
+ const auto* cb = new onSendCallback(
2689
+ [tccClient, &packetInfo](bool sent)
2690
+ {
2691
+ if (sent)
2692
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
2693
+ });
2686
2694
 
2687
2695
  SendRtpPacket(consumer, packet, cb);
2688
2696
  #endif
@@ -3001,23 +3009,27 @@ namespace RTC
3001
3009
  sentInfo.isProbation = true;
3002
3010
  sentInfo.sendingAtMs = DepLibUV::GetTimeMs();
3003
3011
 
3004
- auto* cb = new onSendCallback([tccClient, &packetInfo, senderBwe, &sentInfo](bool sent) {
3005
- if (sent)
3006
- {
3007
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
3012
+ auto* cb = new onSendCallback(
3013
+ [tccClient, &packetInfo, senderBwe, &sentInfo](bool sent)
3014
+ {
3015
+ if (sent)
3016
+ {
3017
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
3008
3018
 
3009
- sentInfo.sentAtMs = DepLibUV::GetTimeMs();
3019
+ sentInfo.sentAtMs = DepLibUV::GetTimeMs();
3010
3020
 
3011
- senderBwe->RtpPacketSent(sentInfo);
3012
- }
3013
- });
3021
+ senderBwe->RtpPacketSent(sentInfo);
3022
+ }
3023
+ });
3014
3024
 
3015
3025
  SendRtpPacket(nullptr, packet, cb);
3016
3026
  #else
3017
- const auto* cb = new onSendCallback([tccClient, &packetInfo](bool sent) {
3018
- if (sent)
3019
- tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
3020
- });
3027
+ const auto* cb = new onSendCallback(
3028
+ [tccClient, &packetInfo](bool sent)
3029
+ {
3030
+ if (sent)
3031
+ tccClient->PacketSent(packetInfo, DepLibUV::GetTimeMsInt64());
3032
+ });
3021
3033
 
3022
3034
  SendRtpPacket(nullptr, packet, cb);
3023
3035
  #endif
@@ -37,7 +37,7 @@ Worker::Worker(::Channel::ChannelSocket* channel, PayloadChannel::PayloadChannel
37
37
  DepUsrSCTP::CreateChecker();
38
38
 
39
39
  // Tell the Node process that we are running.
40
- Channel::ChannelNotifier::Emit(std::to_string(Logger::pid), "running");
40
+ Channel::ChannelNotifier::Emit(Logger::pid, "running");
41
41
 
42
42
  MS_DEBUG_DEV("starting libuv loop");
43
43
  DepLibUV::RunLoop();
@@ -28,14 +28,22 @@
28
28
 
29
29
  void IgnoreSignals();
30
30
 
31
- extern "C" int run_worker(
31
+ extern "C" int mediasoup_worker_run(
32
32
  int argc,
33
33
  char* argv[],
34
34
  const char* version,
35
35
  int consumerChannelFd,
36
36
  int producerChannelFd,
37
37
  int payloadConsumeChannelFd,
38
- int payloadProduceChannelFd)
38
+ int payloadProduceChannelFd,
39
+ ChannelReadFn channelReadFn,
40
+ ChannelReadCtx channelReadCtx,
41
+ ChannelWriteFn channelWriteFn,
42
+ ChannelWriteCtx channelWriteCtx,
43
+ PayloadChannelReadFn payloadChannelReadFn,
44
+ PayloadChannelReadCtx payloadChannelReadCtx,
45
+ PayloadChannelWriteFn payloadChannelWriteFn,
46
+ PayloadChannelWriteCtx payloadChannelWriteCtx)
39
47
  {
40
48
  // Initialize libuv stuff (we need it for the Channel).
41
49
  DepLibUV::ClassInit();
@@ -52,7 +60,15 @@ extern "C" int run_worker(
52
60
 
53
61
  try
54
62
  {
55
- channel.reset(new Channel::ChannelSocket(consumerChannelFd, producerChannelFd));
63
+ if (channelReadFn)
64
+ {
65
+ channel.reset(
66
+ new Channel::ChannelSocket(channelReadFn, channelReadCtx, channelWriteFn, channelWriteCtx));
67
+ }
68
+ else
69
+ {
70
+ channel.reset(new Channel::ChannelSocket(consumerChannelFd, producerChannelFd));
71
+ }
56
72
  }
57
73
  catch (const MediaSoupError& error)
58
74
  {
@@ -66,8 +82,16 @@ extern "C" int run_worker(
66
82
 
67
83
  try
68
84
  {
69
- payloadChannel.reset(
70
- new PayloadChannel::PayloadChannelSocket(payloadConsumeChannelFd, payloadProduceChannelFd));
85
+ if (payloadChannelReadFn)
86
+ {
87
+ payloadChannel.reset(new PayloadChannel::PayloadChannelSocket(
88
+ payloadChannelReadFn, payloadChannelReadCtx, payloadChannelWriteFn, payloadChannelWriteCtx));
89
+ }
90
+ else
91
+ {
92
+ payloadChannel.reset(
93
+ new PayloadChannel::PayloadChannelSocket(payloadConsumeChannelFd, payloadProduceChannelFd));
94
+ }
71
95
  }
72
96
  catch (const MediaSoupError& error)
73
97
  {
package/worker/src/lib.rs CHANGED
@@ -1,8 +1,78 @@
1
- use std::os::raw::{c_char, c_int};
1
+ use std::os::raw::{c_char, c_int, c_void};
2
+
3
+ #[repr(transparent)]
4
+ #[derive(Copy, Clone)]
5
+ pub struct UvAsyncT(pub *const c_void);
6
+
7
+ unsafe impl Send for UvAsyncT {}
8
+
9
+ #[repr(transparent)]
10
+ pub struct ChannelReadCtx(pub *const c_void);
11
+ pub type ChannelReadFreeFn = Option<
12
+ unsafe extern "C" fn(
13
+ /* message: */ *mut u8,
14
+ /* message_len: */ u32,
15
+ /* message_ctx: */ usize,
16
+ ),
17
+ >;
18
+ pub type ChannelReadFn = unsafe extern "C" fn(
19
+ /* message: */ *mut *mut u8,
20
+ /* message_len: */ *mut u32,
21
+ /* message_ctx: */ *mut usize,
22
+ // This is `uv_async_t` handle that can be called later with `uv_async_send()` when there is
23
+ // more data to read
24
+ /* handle */
25
+ UvAsyncT,
26
+ /* ctx: */ ChannelReadCtx,
27
+ ) -> ChannelReadFreeFn;
28
+
29
+ #[repr(transparent)]
30
+ pub struct ChannelWriteCtx(pub *const c_void);
31
+ pub type ChannelWriteFn = unsafe extern "C" fn(
32
+ /* message: */ *const u8,
33
+ /* message_len: */ u32,
34
+ /* ctx: */ ChannelWriteCtx,
35
+ );
36
+
37
+ #[repr(transparent)]
38
+ pub struct PayloadChannelReadCtx(pub *const c_void);
39
+ pub type PayloadChannelReadFreeFn = Option<
40
+ unsafe extern "C" fn(
41
+ /* message: */ *mut u8,
42
+ /* message_len: */ u32,
43
+ /* message_ctx: */ usize,
44
+ ),
45
+ >;
46
+ pub type PayloadChannelReadFn = unsafe extern "C" fn(
47
+ /* message: */ *mut *mut u8,
48
+ /* message_len: */ *mut u32,
49
+ /* message_ctx: */ *mut usize,
50
+ /* payload: */ *mut *mut u8,
51
+ /* payload_len: */ *mut u32,
52
+ /* payload_capacity: */ *mut usize,
53
+ // This is `uv_async_t` handle that can be called later with `uv_async_send()` when there is
54
+ // more data to read
55
+ /* handle */
56
+ UvAsyncT,
57
+ /* ctx: */ PayloadChannelReadCtx,
58
+ ) -> PayloadChannelReadFreeFn;
59
+
60
+ #[repr(transparent)]
61
+ pub struct PayloadChannelWriteCtx(pub *const c_void);
62
+ pub type PayloadChannelWriteFn = unsafe extern "C" fn(
63
+ /* message: */ *const u8,
64
+ /* message_len: */ u32,
65
+ /* payload: */ *const u8,
66
+ /* payload_len: */ u32,
67
+ /* ctx: */ PayloadChannelWriteCtx,
68
+ );
2
69
 
3
70
  #[link(name = "mediasoup-worker", kind = "static")]
4
71
  extern "C" {
5
- pub fn run_worker(
72
+ /// Returns `0` on success, or an error code `< 0` on failure
73
+ pub fn uv_async_send(handle: UvAsyncT) -> c_int;
74
+
75
+ pub fn mediasoup_worker_run(
6
76
  argc: c_int,
7
77
  argv: *const *const c_char,
8
78
  version: *const c_char,
@@ -10,5 +80,13 @@ extern "C" {
10
80
  producer_channel_fd: c_int,
11
81
  payload_consumer_channel_fd: c_int,
12
82
  payload_producer_channel_fd: c_int,
83
+ channel_read_fn: ChannelReadFn,
84
+ channel_read_ctx: ChannelReadCtx,
85
+ channel_write_fn: ChannelWriteFn,
86
+ channel_write_ctx: ChannelWriteCtx,
87
+ payload_channel_read_fn: PayloadChannelReadFn,
88
+ payload_channel_read_ctx: PayloadChannelReadCtx,
89
+ payload_channel_write_fn: PayloadChannelWriteFn,
90
+ payload_channel_write_ctx: PayloadChannelWriteCtx,
13
91
  ) -> c_int;
14
92
  }
@@ -23,14 +23,22 @@ int main(int argc, char* argv[])
23
23
 
24
24
  std::string version = std::getenv("MEDIASOUP_VERSION");
25
25
 
26
- auto statusCode = run_worker(
26
+ auto statusCode = mediasoup_worker_run(
27
27
  argc,
28
28
  argv,
29
29
  version.c_str(),
30
30
  ConsumerChannelFd,
31
31
  ProducerChannelFd,
32
32
  PayloadConsumerChannelFd,
33
- PayloadProducerChannelFd);
33
+ PayloadProducerChannelFd,
34
+ nullptr,
35
+ nullptr,
36
+ nullptr,
37
+ nullptr,
38
+ nullptr,
39
+ nullptr,
40
+ nullptr,
41
+ nullptr);
34
42
 
35
43
  switch (statusCode)
36
44
  {