Disable ICE Trickling
Its true that, there is NO JavaScript API "currently" available in RTCWeb drafts to disable ICE-trickling process however, there is a trick that can be used to merge all candidate pairs in the session-description, and then you merely need to share that "single" SDP only.
The trick is simple: Wait until "end-of-candidate" signal is fired.
Usually "onicecandidate
" event returns "NULL
" entry for "event.candidate
" object.
In "old-good" days, we were watching for "oniceconnectionstatechange
" event, and checking for "peer.iceGatheringState === 'complete'
" to return the SDP.
BTW, you can still listen for both "end-of-candidate" NULL value, as well as "peer.iceGatheringS tate === 'complete'
".
peer.oniceconnectionstatechange = function(event) { if (peer.iceGatheringState === 'complete') { send_sdp_to_remote_peer(); } }; peer.onicecandidate = function(event) { if (event.candidate === null) { return send_sdp_to_remote_peer(); } }; var isSdpSent = false; function send_sdp_to_remote_peer() { if (isSdpSent) return; isSdpSent = true; var sdp = peer.localDescription; socket.emit('remote-sdp', sdp); }
Use cases:
1. Force browser to download/save files like PDF/HTML/PHP/ASPX/JS/CSS/etc. on disk
2. Concatenate all transmitted blobs and save them as file on disk - it is useful in file sharing applications
Microsoft Edge? (msSaveBlob/msSaveOrOpenBlob)https://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx[1]
/** * @param {Blob} file - File or Blob object. This parameter is required. * @param {string} fileName - Optional file name e.g. "image.png" */functioninvokeSaveAsDialog(file, fileName){if(!file){throw'Blob object is required.'; }if(!file.type){ file.type ='video/webm'; }var fileExtension = file.type.split('/')[1]; if(fileName && fileName.indexOf('.')!==-1){var splitted = fileName.split('.'); fileName = splitted[0]; fileExtension = splitted[1]; }var fileFullName …
1. How to mute/unmute media streams?Remember, mute/unmute isn't implemented as a default/native features in either media capturing draft i.e. getUserMedia API also in WebRTC draft i.e. RTCPeerConnection API.
Also, there is no "onmuted" and "onunmuted" event defined or fired in the WebRTC native implementations.
Usually, as per chromium team's suggestions, media-tracks are enabled/disabled to mute/unmute the streams.
Remember, "MediaStreamTrack.enabled=false" NEVER sends silence audio or blank/black video; it doesn't stop packet transmission. Although when you set "MediaStreamTracks.enabled=false", packets are devoid of meaningful data. A solution for this approach is to hold/unhold tracks from SDP and renegotiate the connections. See next section for more information.
MediaStream object is j ust a synchronous conta…
References
- ^ https://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx (msdn.microsoft.com)