From be8ce07787a0c875dcc2d08ba23ae0d848ce821d Mon Sep 17 00:00:00 2001 From: Haibo Chen <495810242@qq.com> Date: Tue, 25 Mar 2025 09:48:04 +0800 Subject: [PATCH 1/5] get codec by webrtc api: pc.getStats --- trunk/research/players/js/srs.sdk.js | 25 +++++++++++++++++++++++++ trunk/research/players/whep.html | 20 ++++++++++++++++++++ trunk/research/players/whip.html | 22 +++++++++++++++------- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/trunk/research/players/js/srs.sdk.js b/trunk/research/players/js/srs.sdk.js index e86e4681318..cb3038069bd 100644 --- a/trunk/research/players/js/srs.sdk.js +++ b/trunk/research/players/js/srs.sdk.js @@ -716,3 +716,28 @@ function SrsRtcFormatSenders(senders, kind) { return codecs.join(", "); } +function SrsRtcFormatStats(stats, kind) { + var codecs = []; + stats.forEach((report) => { + if (report.type === 'codec' && report.mimeType && report.mimeType.toLowerCase().startsWith(kind)) { + var s = ''; + + s += report.mimeType.split('/')[1] || report.mimeType; + + if (report.clockRate) { + s += ', ' + report.clockRate + 'HZ'; + } + + if (kind === 'audio' && report.channels) { + s += ', channels: ' + report.channels; + } + + if (report.payloadType) { + s += ', pt: ' + report.payloadType; + } + + codecs.push(s); + } + }); + return codecs.join(", "); +} \ No newline at end of file diff --git a/trunk/research/players/whep.html b/trunk/research/players/whep.html index a1939e86a9c..db97774b93c 100644 --- a/trunk/research/players/whep.html +++ b/trunk/research/players/whep.html @@ -71,6 +71,10 @@ SessionID: +

+ Audio:
+ Video: +

Simulator: Drop @@ -97,6 +101,22 @@ // Optional callback, SDK will add track to stream. // sdk.ontrack = function (event) { console.log('Got track', event); sdk.stream.addTrack(event.track); }; + // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getStats + let statsTimer = setInterval(() => { + sdk.pc.getStats(null).then((stats) => { + let audioStatsOutput = SrsRtcFormatStats(stats, 'audio'); + let videoStatsOutput = SrsRtcFormatStats(stats, 'video'); + + document.querySelector("#acodecs").innerHTML = audioStatsOutput; + document.querySelector("#vcodecs").innerHTML = videoStatsOutput; + + if (audioStatsOutput && videoStatsOutput) { + clearInterval(statsTimer); + console.log('Stats detected, stopping stats timer'); + } + }); + }, 1000); + // For example: webrtc://r.ossrs.net/live/livestream var url = $("#txt_url").val(); sdk.play(url, { diff --git a/trunk/research/players/whip.html b/trunk/research/players/whip.html index 11e4ac99322..7a1fcc45769 100644 --- a/trunk/research/players/whip.html +++ b/trunk/research/players/whip.html @@ -108,13 +108,21 @@ // Optional callback, SDK will add track to stream. // sdk.ontrack = function (event) { console.log('Got track', event); sdk.stream.addTrack(event.track); }; - // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/WebRTC_codecs#getting_the_supported_codecs - sdk.pc.onicegatheringstatechange = function (event) { - if (sdk.pc.iceGatheringState === "complete") { - $('#acodecs').html(SrsRtcFormatSenders(sdk.pc.getSenders(), "audio")); - $('#vcodecs').html(SrsRtcFormatSenders(sdk.pc.getSenders(), "video")); - } - }; + // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getStats + let statsTimer = setInterval(() => { + sdk.pc.getStats(null).then((stats) => { + let audioStatsOutput = SrsRtcFormatStats(stats, 'audio'); + let videoStatsOutput = SrsRtcFormatStats(stats, 'video'); + + document.querySelector("#acodecs").innerHTML = audioStatsOutput; + document.querySelector("#vcodecs").innerHTML = videoStatsOutput; + + if (audioStatsOutput && videoStatsOutput) { + clearInterval(statsTimer); + console.log('Stats detected, stopping stats timer'); + } + }); + }, 1000); // For example: webrtc://r.ossrs.net/live/livestream var url = $("#txt_url").val(); From 73ce74461186b60ca794eabd1be317ad1f4838da Mon Sep 17 00:00:00 2001 From: Haibo Chen <495810242@qq.com> Date: Wed, 26 Mar 2025 17:28:34 +0800 Subject: [PATCH 2/5] Fix: Use optional chaining for mimeType --- trunk/research/players/js/srs.sdk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trunk/research/players/js/srs.sdk.js b/trunk/research/players/js/srs.sdk.js index cb3038069bd..3f206fb39ec 100644 --- a/trunk/research/players/js/srs.sdk.js +++ b/trunk/research/players/js/srs.sdk.js @@ -719,7 +719,7 @@ function SrsRtcFormatSenders(senders, kind) { function SrsRtcFormatStats(stats, kind) { var codecs = []; stats.forEach((report) => { - if (report.type === 'codec' && report.mimeType && report.mimeType.toLowerCase().startsWith(kind)) { + if (report.type === 'codec' && report.mimeType?.toLowerCase().startsWith(kind)) { var s = ''; s += report.mimeType.split('/')[1] || report.mimeType; From c3e7e9ddc8f546c4829b8435f24cce13620fd033 Mon Sep 17 00:00:00 2001 From: Haibo Chen <495810242@qq.com> Date: Wed, 2 Apr 2025 09:08:10 +0800 Subject: [PATCH 3/5] remove unused func: SrsRtcFormatSenders --- trunk/research/players/js/srs.sdk.js | 31 +--------------------------- 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/trunk/research/players/js/srs.sdk.js b/trunk/research/players/js/srs.sdk.js index 3f206fb39ec..7d49ddc7960 100644 --- a/trunk/research/players/js/srs.sdk.js +++ b/trunk/research/players/js/srs.sdk.js @@ -686,36 +686,7 @@ function SrsRtcWhipWhepAsync() { return self; } -// Format the codec of RTCRtpSender, kind(audio/video) is optional filter. -// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/WebRTC_codecs#getting_the_supported_codecs -function SrsRtcFormatSenders(senders, kind) { - var codecs = []; - senders.forEach(function (sender) { - var params = sender.getParameters(); - params && params.codecs && params.codecs.forEach(function(c) { - if (kind && sender.track.kind !== kind) { - return; - } - - if (c.mimeType.indexOf('/red') > 0 || c.mimeType.indexOf('/rtx') > 0 || c.mimeType.indexOf('/fec') > 0) { - return; - } - - var s = ''; - - s += c.mimeType.replace('audio/', '').replace('video/', ''); - s += ', ' + c.clockRate + 'HZ'; - if (sender.track.kind === "audio") { - s += ', channels: ' + c.channels; - } - s += ', pt: ' + c.payloadType; - - codecs.push(s); - }); - }); - return codecs.join(", "); -} - +// https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport function SrsRtcFormatStats(stats, kind) { var codecs = []; stats.forEach((report) => { From acb3d11cbb78a5e88f1b08be5b6acba45efeac9c Mon Sep 17 00:00:00 2001 From: Haibo Chen <495810242@qq.com> Date: Mon, 7 Apr 2025 09:28:59 +0800 Subject: [PATCH 4/5] fix timer bug --- trunk/research/players/whep.html | 7 ++++++- trunk/research/players/whip.html | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/trunk/research/players/whep.html b/trunk/research/players/whep.html index db97774b93c..b4a5b24da39 100644 --- a/trunk/research/players/whep.html +++ b/trunk/research/players/whep.html @@ -86,9 +86,14 @@