คำอธิบาย
ใช้ chrome.tabCapture API เพื่อโต้ตอบกับสตรีมสื่อของแท็บ
สิทธิ์
tabCaptureภาพรวม
chrome.tabCapture API ช่วยให้คุณเข้าถึง MediaStream ที่มีวิดีโอและเสียงของแท็บปัจจุบันได้ โดยจะเรียกได้ก็ต่อเมื่อผู้ใช้เรียกใช้ส่วนขยาย เช่น โดยการคลิกปุ่มดำเนินการของส่วนขยาย ซึ่งคล้ายกับลักษณะการทำงานของสิทธิ์ activeTab
การเก็บรักษาเสียงของระบบ
เมื่อได้รับ MediaStream สำหรับแท็บแล้ว ระบบจะไม่เล่นเสียงในแท็บนั้นให้ผู้ใช้
อีกต่อไป ซึ่งคล้ายกับลักษณะการทำงานของฟังก์ชัน getDisplayMedia() เมื่อ
ตั้งค่าแฟล็ก suppressLocalAudioPlayback เป็น "จริง"
หากต้องการเล่นเสียงให้ผู้ใช้ต่อไป ให้ใช้โค้ดต่อไปนี้
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
ซึ่งจะสร้าง AudioContext ใหม่และเชื่อมต่อเสียงของ MediaStream ของแท็บกับปลายทางเริ่มต้น
รหัสสตรีม
การเรียก chrome.tabCapture.getMediaStreamId จะแสดงผลรหัสสตรีม หากต้องการเข้าถึง MediaStream จากรหัสในภายหลัง ให้ใช้โค้ดต่อไปนี้
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
ข้อจำกัดการใช้งาน
หลังจากเรียก getMediaStreamId() แล้ว จะมีข้อจำกัดเกี่ยวกับตำแหน่งที่ใช้
รหัสสตรีมที่แสดงผลได้ ดังนี้
- หากระบุ
consumerTabIdไว้ การเรียกgetUserMedia()ในเฟรมใดก็ได้ในแท็บที่ระบุซึ่งมีต้นทางที่ปลอดภัยเดียวกันจะใช้รหัสได้ - หากไม่ได้ระบุไว้ ตั้งแต่ Chrome 116 เป็นต้นไป รหัสจะใช้ได้ในเฟรมใดก็ได้ที่มีต้นทางที่ปลอดภัยเดียวกันในกระบวนการแสดงผลเดียวกันกับผู้เรียก ซึ่งหมายความว่ารหัสสตรีมที่ได้รับ ใน Service Worker จะใช้ในเอกสารนอกหน้าจอได้
ก่อน Chrome 116 เมื่อไม่ได้ระบุ consumerTabId รหัสสตรีมจะจำกัดไว้ที่ต้นทางที่ปลอดภัย กระบวนการแสดงผล และเฟรมการแสดงผลของผู้เรียก
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ chrome.tabCapture API ได้ที่
เสียงที่บันทึกไว้และการจับภาพหน้าจอ ซึ่งแสดงวิธีใช้ tabCapture และ API ที่เกี่ยวข้องเพื่อแก้ปัญหา Use Case ทั่วไปจำนวนหนึ่ง
ประเภท
CaptureInfo
พร็อพเพอร์ตี้
-
เต็มหน้าจอ
บูลีน
ระบุว่าองค์ประกอบในแท็บที่กำลังจับภาพอยู่ในโหมดเต็มหน้าจอหรือไม่
-
สถานะ
สถานะการจับภาพใหม่ของแท็บ
-
tabId
ตัวเลข
รหัสของแท็บที่มีการเปลี่ยนแปลงสถานะ
CaptureOptions
พร็อพเพอร์ตี้
-
เสียง
บูลีน ไม่บังคับ
-
audioConstraints
MediaStreamConstraint ไม่บังคับ
-
วิดีโอ
บูลีน ไม่บังคับ
-
videoConstraints
MediaStreamConstraint ไม่บังคับ
GetMediaStreamOptions
พร็อพเพอร์ตี้
-
consumerTabId
ตัวเลข ไม่บังคับ
รหัสแท็บที่ไม่บังคับของแท็บที่จะเรียก
getUserMedia()ในภายหลังเพื่อใช้สตรีม หากไม่ได้ระบุไว้ ส่วนขยายที่เรียกเท่านั้นที่จะใช้สตรีมที่ได้ เฟรมในแท็บที่ระบุซึ่งมีต้นทางที่ปลอดภัยตรงกับต้นทางของแท็บผู้ใช้เท่านั้นที่จะใช้สตรีมได้ ต้นทางของแท็บต้องเป็นต้นทางที่ปลอดภัย เช่น HTTPS -
targetTabId
ตัวเลข ไม่บังคับ
รหัสแท็บที่ไม่บังคับของแท็บที่จะจับภาพ หากไม่ได้ระบุไว้ ระบบจะเลือกแท็บที่ใช้งานอยู่ปัจจุบัน เฉพาะแท็บที่ส่วนขยายได้รับสิทธิ์
activeTabเท่านั้นที่จะใช้เป็นแท็บเป้าหมายได้
MediaStreamConstraint
พร็อพเพอร์ตี้
-
บังคับ
ออบเจ็กต์
-
ไม่บังคับ
ออบเจ็กต์ ไม่บังคับ
TabCaptureState
ค่าแจกแจง
"รอดำเนินการ"
"ใช้งานอยู่"
"หยุดแล้ว"
"ข้อผิดพลาด"
เมธอด
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
จับภาพพื้นที่ที่มองเห็นได้ของแท็บที่ใช้งานอยู่ปัจจุบัน การจับภาพจะเริ่มได้เฉพาะในแท็บที่ใช้งานอยู่ปัจจุบันหลังจากที่ เรียกใช้ ส่วนขยายแล้ว ซึ่งคล้ายกับวิธีที่ activeTab ทำงาน ระบบจะคงการจับภาพไว้เมื่อมีการนำทางในหน้าเว็บภายในแท็บ และจะหยุดเมื่อปิดแท็บหรือส่วนขยายปิดสตรีมสื่อ
พารามิเตอร์
-
ตัวเลือก
กำหนดค่าสตรีมสื่อที่แสดงผล
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้:(stream: LocalMediaStream) => void
-
สตรีม
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
): Promise<CaptureInfo[]>
แสดงผลรายการแท็บที่ขอการจับภาพหรือกำลังจับภาพอยู่ นั่นคือ สถานะ != หยุดแล้วและสถานะ != ข้อผิดพลาด ซึ่งช่วยให้ส่วนขยายแจ้งให้ผู้ใช้ทราบว่ามีการจับภาพแท็บอยู่แล้วซึ่งอาจทำให้การจับภาพแท็บใหม่ไม่สำเร็จ (หรือเพื่อป้องกันไม่ให้มีการส่งคำขอซ้ำสำหรับแท็บเดียวกัน)
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callbackมีลักษณะดังนี้:(result: CaptureInfo[]) => void
-
ผลลัพธ์
-
การคืนสินค้า
-
Promise<CaptureInfo[]>
Chrome 116 ขึ้นไปแสดงผล Promise ซึ่งจะแสดงผล CaptureInfo[] สำหรับแท็บที่จับภาพ
ระบบรองรับสัญญาสำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
): Promise<string>
สร้างรหัสสตรีมเพื่อจับภาพแท็บเป้าหมาย คล้ายกับเมธอด chrome.tabCapture.capture() แต่แสดงผลรหัสสตรีมสื่อแทนสตรีมสื่อไปยังแท็บผู้ใช้
พารามิเตอร์
-
ตัวเลือก
GetMediaStreamOptions ไม่บังคับ
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callbackมีลักษณะดังนี้:(streamId: string) => void
-
streamId
สตริง
-
การคืนสินค้า
-
Promise<string>
Chrome 116 ขึ้นไปแสดงผล Promise ซึ่งจะแสดงผลลัพธ์ หากสำเร็จ ลัพธ์จะเป็นสตริงทึบแสงที่ส่งไปยัง
getUserMedia()API เพื่อสร้างสตรีมสื่อที่สอดคล้องกับแท็บเป้าหมายได้streamIdที่สร้างขึ้นจะใช้ได้เพียงครั้งเดียวและจะหมดอายุหลังจากผ่านไป 2-3 วินาทีหากไม่ได้ใช้ระบบรองรับสัญญาสำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
กิจกรรม
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
กิจกรรมที่เริ่มทำงานเมื่อสถานะการจับภาพของแท็บมีการเปลี่ยนแปลง ซึ่งช่วยให้ผู้เขียนส่วนขยายติดตามสถานะการจับภาพของแท็บเพื่อให้องค์ประกอบ UI เช่น การทำงานของหน้าเว็บซิงค์กัน
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้:(info: CaptureInfo) => void
-
ข้อมูล
-