tabCapture 标签媒体流
用于捕获标签的媒体流
权限设置
"permissions": [
"tabCapture"
],
方法
capture() 捕获标签媒体流
捕获当前活动选项卡的可见区域的媒体流
type MediaStreamConstraint = {
mandatory: object;
optional?: object;
}
type CaptureOptions = {
audio?: boolean;
audioConstraints?: MediaStreamConstraint;
video?: boolean;
videoConstraints?: MediaStreamConstraint;
}
chrome.tabCapture.capture(
options: CaptureOptions,
callback: (stream: LocalMediaStream) => void,
)
getCapturedTabs() 获取捕获的标签
已请求捕获或正在捕获的选项卡列表
type TabCaptureState = 'pending' | 'active' | 'stopped' | 'error';
type CaptureInfo = {
fullscreen: boolean;
status: TabCaptureState;
tabId: number;
}
chrome.tabCapture.getCapturedTabs(
callback?: (result: CaptureInfo[]) => void,
)
getMediaStreamId() 获取媒体流ID
获取当前媒体流的ID
type GetMediaStreamOptions = {
// 选项卡 ID
consumerTabId?: number;
targetTabId?: number;
}
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: (streamId: string) => void,
)
// 获取到的媒体流ID,再通过 navigator.mediaDevices.getUserMedia({audio: {streamId: streamId}}) 获取媒体流
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
事件
onStatusChanged 状态变化事件
当捕获的标签的状态发生变化时触发
type CaptureInfo = {
fullscreen: boolean;
status: TabCaptureState;
tabId: number;
}
// background.js
chrome.tabCapture.onStatusChanged.addListener((info: CaptureInfo) => {
console.log('🍄 background: >>>>>>>>>>>>>>>>>> 状态变化事件', Date.now(), info);
});