diff --git a/README.md b/README.md index 26b7db284..5f7c127cb 100755 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ The ports used by SRS: ## V4 changes +* v4.0, 2021-05-21, RTC: Refine sdk, migrate from onaddstream to ontrack. 4.0.120 * v4.0, 2021-05-21, Tools: Refine configure options. 4.0.119 * v4.0, 2021-05-20, Fix build fail when disable RTC by --rtc=off. 4.0.118 * v4.0, 2021-05-19, Fix [#2362][bug #2362]: Allow WebRTC to play before publishing, for GB28181 as such. 4.0.117 diff --git a/trunk/research/players/js/srs.sdk.js b/trunk/research/players/js/srs.sdk.js index 4b030542d..860735413 100644 --- a/trunk/research/players/js/srs.sdk.js +++ b/trunk/research/players/js/srs.sdk.js @@ -62,6 +62,9 @@ function SrsRtcPublisherAsync() { // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack stream.getTracks().forEach(function (track) { self.pc.addTrack(track); + + // Notify about local track when stream is ok. + self.ontrack && self.ontrack({track: track}); }); var offer = await self.pc.createOffer(); @@ -94,9 +97,6 @@ function SrsRtcPublisherAsync() { ); session.simulator = conf.schema + '//' + conf.urlObject.server + ':' + conf.port + '/rtc/v1/nack/'; - // Notify about local stream when success. - self.onaddstream && self.onaddstream({stream: stream}); - return session; }; @@ -107,7 +107,10 @@ function SrsRtcPublisherAsync() { }; // The callback when got local stream. - self.onaddstream = function (event) { + // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack + self.ontrack = function (event) { + // Add track to stream of SDK. + self.stream.addTrack(event.track); }; // Internal APIs. @@ -253,6 +256,11 @@ function SrsRtcPublisherAsync() { self.pc = new RTCPeerConnection(null); + // To keep api consistent between player and publisher. + // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack + // @see https://webrtc.org/getting-started/media-devices + self.stream = new MediaStream(); + return self; } @@ -324,8 +332,12 @@ function SrsRtcPlayerAsync() { self.pc = null; }; - // The callback when got remote stream. - self.onaddstream = function (event) {}; + // The callback when got remote track. + // Note that the onaddstream is deprecated, @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/onaddstream + self.ontrack = function (event) { + // https://webrtc.org/getting-started/remote-streams + self.stream.addTrack(event.track); + }; // Internal APIs. self.__internal = { @@ -469,9 +481,14 @@ function SrsRtcPlayerAsync() { }; self.pc = new RTCPeerConnection(null); - self.pc.onaddstream = function (event) { - if (self.onaddstream) { - self.onaddstream(event); + + // Create a stream to add track to the stream, @see https://webrtc.org/getting-started/remote-streams + self.stream = new MediaStream(); + + // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/ontrack + self.pc.ontrack = function(event) { + if (self.ontrack) { + self.ontrack(event); } }; diff --git a/trunk/research/players/rtc_player.html b/trunk/research/players/rtc_player.html index bd3d668c9..0a4c3a3a5 100644 --- a/trunk/research/players/rtc_player.html +++ b/trunk/research/players/rtc_player.html @@ -73,15 +73,14 @@ if (sdk) { sdk.close(); } - sdk = new SrsRtcPlayerAsync(); - sdk.onaddstream = function (event) { - console.log('Start play, event: ', event); - $('#rtc_media_player').prop('srcObject', event.stream); - }; - // For example: - // webrtc://r.ossrs.net/live/livestream + // https://webrtc.org/getting-started/remote-streams + $('#rtc_media_player').prop('srcObject', sdk.stream); + // Optional callback, SDK will add track to stream. + // sdk.ontrack = function (event) { console.log('Got track', event); sdk.stream.addTrack(event.track); }; + + // For example: webrtc://r.ossrs.net/live/livestream var url = $("#txt_url").val(); sdk.play(url).then(function(session){ $('#sessionid').html(session.sessionid); diff --git a/trunk/research/players/rtc_publisher.html b/trunk/research/players/rtc_publisher.html index 3aa9d0e66..1159d0e8f 100644 --- a/trunk/research/players/rtc_publisher.html +++ b/trunk/research/players/rtc_publisher.html @@ -78,12 +78,13 @@ if (sdk) { sdk.close(); } - sdk = new SrsRtcPublisherAsync(); - sdk.onaddstream = function (event) { - console.log('Start publish, event: ', event); - $('#rtc_media_player').prop('srcObject', event.stream); - }; + + // User should set the stream when publish is done, @see https://webrtc.org/getting-started/media-devices + // However SRS SDK provides a consist API like https://webrtc.org/getting-started/remote-streams + $('#rtc_media_player').prop('srcObject', sdk.stream); + // 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) { @@ -93,8 +94,7 @@ } }; - // For example: - // webrtc://r.ossrs.net/live/livestream + // For example: webrtc://r.ossrs.net/live/livestream var url = $("#txt_url").val(); sdk.publish(url).then(function(session){ $('#sessionid').html(session.sessionid); diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 0e40b98ec..f4e0917d0 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -26,6 +26,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 119 +#define VERSION_REVISION 120 #endif