Skip to content

Commit

Permalink
refactor: [DIOS-6937] Use safer async wrapper with weak_ptr object li…
Browse files Browse the repository at this point in the history
…fetimes (#49)
  • Loading branch information
bcostdolby authored Oct 1, 2024
1 parent 065a43b commit 6e336bc
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 58 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"uuid": "^3.3.2"
},
"peerDependencies": {
"medooze-media-server-src": "^2.4.2"
"medooze-media-server-src": "^3.0.0"
},
"devDependencies": {
"@types/node": "^20.8.6",
Expand Down
12 changes: 6 additions & 6 deletions src/IncomingStreamBridge.i
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ class IncomingStreamBridge :
private:
static constexpr size_t BaseVideoSSRC = 2;
public:

IncomingStreamBridge(v8::Local<v8::Object> object, int maxLateOffset = 200, int maxBufferingTime = 400) :
audio(new MediaFrameListenerBridge(loop, 1, false, true)),
audio(MediaFrameListenerBridge::Create(loop, 1, false, true)),
videos({
{0, std::make_shared<MediaFrameListenerBridge>(loop, BaseVideoSSRC, false, true)}
{0, MediaFrameListenerBridge::Create(loop, BaseVideoSSRC, false, true)}
}),
mutex(true),
maxLateOffset(maxLateOffset),
Expand All @@ -23,7 +24,7 @@ public:
loop.Start(-1);

//Create dispatch timer
dispatch = loop.CreateTimer([this](std::chrono::milliseconds now){
dispatch = loop.CreateTimerUnsafe([this](std::chrono::milliseconds now){

//Iterate over the enqueued packets
for(auto it = queue.begin(); it!=queue.end(); it = queue.erase(it))
Expand Down Expand Up @@ -55,7 +56,6 @@ public:
});

}

virtual ~IncomingStreamBridge()
{
Log("IncomingStreamBridge::~IncomingStreamBridge()\n");
Expand Down Expand Up @@ -134,7 +134,7 @@ public:
frame->SetTime(now);

//Run on thread
loop.Async([=](...) {
loop.AsyncUnsafe([=](...) {
//Check if it is the first time we see the video track
if (frame->GetType() == MediaFrame::Video && videos.find(frame->GetSSRC())==videos.end())
{
Expand All @@ -144,7 +144,7 @@ public:
//Log
Error("-IncomingStreamBridge::Enqueue() | New multivideotrack received [id:%d,ssrc:%d]\n", id, ssrc);
//Add it
videos[id] = std::make_shared<MediaFrameListenerBridge>(loop, ssrc, false, true);
videos[id] = MediaFrameListenerBridge::Create(loop, ssrc, false, true);

//Fire event on main node thread
RTMPServerModule::Async([=,cloned=persistent](){
Expand Down
3 changes: 1 addition & 2 deletions src/MediaFrameListenerBridge.i
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ struct MediaFrameListenerBridge :
public MediaFrameListener,
public MediaFrameProducer
{
MediaFrameListenerBridge(TimeService& timeService, int ssrc);

QWORD numFrames;
QWORD numPackets;
Expand Down Expand Up @@ -80,7 +79,7 @@ SHARED_PTR_BEGIN(MediaFrameListenerBridge)
{
MediaFrameListenerBridgeShared(TimeService& timeService, int ssrc)
{
return new std::shared_ptr<MediaFrameListenerBridge>(new MediaFrameListenerBridge(timeService, ssrc));
return new std::shared_ptr<MediaFrameListenerBridge>(MediaFrameListenerBridge::Create(timeService, ssrc));
}
SHARED_PTR_TO(RTPIncomingMediaStream)
SHARED_PTR_TO(RTPReceiver)
Expand Down
66 changes: 17 additions & 49 deletions src/rtmp-server_wrap.cxx

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6e336bc

Please sign in to comment.