Chrome 如何使用WebRTC停止屏幕共享?

qnakjoqk  于 2023-04-09  发布在  Go
关注(0)|答案(4)|浏览(434)

我正在使用getUserMedia访问屏幕共享。当用户单击停止按钮时,我想停止屏幕共享。
根据MediaStream API,应该调用stop()函数来停止共享。但是当我这样做时,我发现Chrome栏https://xxx is sharing your screen <button>Stop sharing</button>仍然存在,尽管流已经停止。
有没有一个功能可以让Chrome条消失?

ddrv8njm

ddrv8njm1#

据我所知,MediaStream.stop方法已被弃用。如果你想停止MediaStream,你应该停止并关闭它的曲目。这样做的话,一旦所有绑定到共享屏幕的曲目都被停止,你提到的“Chrome栏”就会消失。这可以通过以下代码实现。“this.screenStream”是共享屏幕的MediaStream对象。

var tracks = this.screenStream.getTracks();
    for( var i = 0 ; i < tracks.length ; i++ ) tracks[i].stop();
liwlm1x9

liwlm1x92#

基于命令行标志的屏幕共享可以使用相同的MediaStream.stopMediaStreamTracks.stop方法停止,但是如果您使用的是desktopCapture APIdemo),则可以像这样使用cancelChooseDesktopMedia

function releaseCapturing() {
    // getting desktop-media-id from local-storage
    chrome.desktopCapture.cancelChooseDesktopMedia(parseInt(localStorage['desktop-media-request-id']));
}

function captureDesktop() {
    var desktop_id = chrome.desktopCapture.chooseDesktopMedia(
        ["screen", "window"], onAccessApproved);

    // storing desktop-media-id in the local-storage
    localStorage.setItem('desktop-media-request-id', desktop_id);
}
pkmbmrz7

pkmbmrz73#

你可以使用stream.onended

stream.onended = () => {
  console.info("ScreenShare has ended");
};

也可以监听结束事件

stream.getVideoTracks()[0].addEventListener('ended', () => {
  //perform your task here
});
hts6caw3

hts6caw34#

// get the media stream
const mediaStream = await navigator.mediaDevices.getDisplayMedia();

// get the media track
const mediaTrack = mediaStream.getTracks()[0];

// stop the media track to stop screen sharing
mediaTrack.stop();

在我的例子中,我调用了MediaStream.getTracks()[0].stop()

相关问题