From f51ce5c7e9345920c3e59fe8e293c0ea1faffeed Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Fri, 13 Jan 2023 07:58:00 -0800 Subject: [PATCH] webrtc: performance improvements --- external/werift | 2 +- plugins/webrtc/package-lock.json | 4 ++-- plugins/webrtc/package.json | 2 +- plugins/webrtc/src/ffmpeg-to-wrtc.ts | 21 +++++++++++++++------ plugins/webrtc/src/rtp-forwarders.ts | 12 ++++++------ 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/external/werift b/external/werift index 571c19a84..c80d48773 160000 --- a/external/werift +++ b/external/werift @@ -1 +1 @@ -Subproject commit 571c19a8473984c5350d430a6eb5be99b6249206 +Subproject commit c80d48773ccff60c5f105d292719f4c0c05073d0 diff --git a/plugins/webrtc/package-lock.json b/plugins/webrtc/package-lock.json index f58627f57..87c2716b4 100644 --- a/plugins/webrtc/package-lock.json +++ b/plugins/webrtc/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/webrtc", - "version": "0.1.19", + "version": "0.1.20", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/webrtc", - "version": "0.1.19", + "version": "0.1.20", "dependencies": { "@scrypted/common": "file:../../common", "@scrypted/sdk": "file:../../sdk", diff --git a/plugins/webrtc/package.json b/plugins/webrtc/package.json index 19c58307c..181728b6f 100644 --- a/plugins/webrtc/package.json +++ b/plugins/webrtc/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/webrtc", - "version": "0.1.19", + "version": "0.1.20", "scripts": { "scrypted-setup-project": "scrypted-setup-project", "prescrypted-setup-project": "scrypted-package-json", diff --git a/plugins/webrtc/src/ffmpeg-to-wrtc.ts b/plugins/webrtc/src/ffmpeg-to-wrtc.ts index 65da9c640..791bbe88a 100644 --- a/plugins/webrtc/src/ffmpeg-to-wrtc.ts +++ b/plugins/webrtc/src/ffmpeg-to-wrtc.ts @@ -177,7 +177,7 @@ export async function createTrackForwarder(options: { const audioRtpTrack: RtpTrack = { codecCopy: audioCodecCopy, - onRtp: buffer => audioTransceiver.sender.sendRtp(buffer), + onRtp: audioTransceiver.sender.sendRtp.bind(audioTransceiver.sender), encoderArguments: [ ...audioTranscodeArguments, ], @@ -210,6 +210,8 @@ export async function createTrackForwarder(options: { packetSize: videoPacketSize, onMSection: (videoSection) => spsPps = getSpsPps(videoSection), onRtp: (buffer) => { + let onRtp: (rtp: Buffer) => void; + if (needPacketization) { if (!h264Repacketizer) { // adjust packet size for the rtp packet header (12). @@ -217,14 +219,21 @@ export async function createTrackForwarder(options: { ...spsPps, }); } - const repacketized = h264Repacketizer.repacketize(RtpPacket.deSerialize(buffer)); - for (const packet of repacketized) { - videoTransceiver.sender.sendRtp(packet); - } + onRtp = buffer => { + const repacketized = h264Repacketizer.repacketize(RtpPacket.deSerialize(buffer)); + for (const packet of repacketized) { + videoTransceiver.sender.sendRtp(packet); + } + }; } else { - videoTransceiver.sender.sendRtp(buffer); + onRtp = buffer => { + videoTransceiver.sender.sendRtp(buffer); + }; } + + videoRtpTrack.onRtp = onRtp; + videoRtpTrack.onRtp(buffer); }, encoderArguments: [ ...videoTranscodeArguments, diff --git a/plugins/webrtc/src/rtp-forwarders.ts b/plugins/webrtc/src/rtp-forwarders.ts index 4ca003cb2..121e11978 100644 --- a/plugins/webrtc/src/rtp-forwarders.ts +++ b/plugins/webrtc/src/rtp-forwarders.ts @@ -46,14 +46,14 @@ export type RtpSockets = { }; function createPacketDelivery(track: RtpTrack) { - let firstPacket = true; - return (rtp: Buffer) => { - if (firstPacket) { - firstPacket = false; - track.firstPacket?.(rtp); - } + const original = track.onRtp; + track.onRtp = rtp => { + track.onRtp = original; + track.firstPacket?.(rtp); track.onRtp(rtp); } + + return (rtp: Buffer) => track.onRtp(rtp); } function attachTrackDgram(track: RtpTrack, server: dgram.Socket) {