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 @@