คำอธิบาย
ใช้ chrome.tabCapture
API เพื่อโต้ตอบกับสตรีมสื่อของแท็บ
สิทธิ์
tabCapture
แนวคิดและการใช้งาน
chrome.tabCapture API ช่วยให้คุณเข้าถึง MediaStream
ที่มีวิดีโอและ
เสียงของแท็บปัจจุบัน สามารถเรียกได้หลังจากผู้ใช้เรียกใช้ส่วนขยายเท่านั้น เช่น
คลิกปุ่มการทำงานของส่วนขยาย ซึ่งคล้ายกับลักษณะการทำงานของ
"activeTab"
เก็บเสียงของระบบ
เมื่อได้รับ MediaStream
สำหรับแท็บ ระบบจะไม่เปิดเสียงในแท็บนั้นอีกต่อไป
ให้แก่ผู้ใช้ ซึ่งคล้ายกับลักษณะการทำงานของฟังก์ชัน getDisplayMedia()
เมื่อ
ตั้งค่าสถานะ suppressLocalAudioPlayback
เป็น true
หากต้องการเล่นเสียงให้ผู้ใช้ต่อไป ให้ใช้คำสั่งเสียงต่อไปนี้
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
รหัสสตรีมจะถูกจำกัดไว้สำหรับทั้ง 2 เวอร์ชัน
ต้นทางการรักษาความปลอดภัย กระบวนการแสดงผล และเฟรมการแสดงผลของผู้โทร
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ chrome.tabCapture
API ได้ที่
การบันทึกเสียงและจับภาพหน้าจอ ซึ่งสาธิตวิธีใช้
tabCapture
และ API ที่เกี่ยวข้องเพื่อแก้ไข Use Case ทั่วไปจำนวนหนึ่ง
ประเภท
CaptureInfo
พร็อพเพอร์ตี้
-
เต็มหน้าจอ
boolean
องค์ประกอบในแท็บที่กำลังจับภาพอยู่ในโหมดเต็มหน้าจอหรือไม่
-
สถานะ
สถานะการจับภาพใหม่ของแท็บ
-
tabId
ตัวเลข
รหัสของแท็บที่เปลี่ยนสถานะ
CaptureOptions
พร็อพเพอร์ตี้
-
เสียง
บูลีน ไม่บังคับ
-
audioConstraints
MediaStreamConstraint ไม่บังคับ
-
วิดีโอ
บูลีน ไม่บังคับ
-
videoConstraints
MediaStreamConstraint ไม่บังคับ
GetMediaStreamOptions
พร็อพเพอร์ตี้
-
consumerTabId
หมายเลข ไม่บังคับ
รหัสแท็บที่ไม่บังคับของแท็บ ซึ่งจะเรียกใช้
getUserMedia()
เพื่อใช้สตรีมในภายหลัง หากไม่ได้ระบุ สตรีมผลลัพธ์จะใช้ได้โดยส่วนขยายการโทรเท่านั้น สตรีมสามารถใช้ได้โดยเฟรมในแท็บที่ระบุซึ่งมีต้นทางการรักษาความปลอดภัยตรงกับต้นทางของแท็บผู้บริโภคเท่านั้น ต้นทางของแท็บต้องเป็นต้นทางที่ปลอดภัย เช่น HTTPS -
targetTabId
หมายเลข ไม่บังคับ
รหัสแท็บที่ไม่บังคับของแท็บที่จะบันทึก หากไม่ได้ระบุไว้ ระบบจะเลือกแท็บที่ใช้งานอยู่ในปัจจุบัน เฉพาะแท็บที่ได้รับสิทธิ์ส่วนขยาย
activeTab
เท่านั้นที่จะใช้เป็นแท็บเป้าหมายได้
MediaStreamConstraint
พร็อพเพอร์ตี้
-
บังคับ
ออบเจ็กต์
-
ไม่บังคับ
ออบเจ็กต์ไม่บังคับ
TabCaptureState
ค่าแจกแจง
"pending"
"ใช้งานอยู่"
"หยุด"
"ข้อผิดพลาด"
เมธอด
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
)
จับภาพพื้นที่ที่มองเห็นได้ของแท็บที่กำลังใช้งาน สามารถเริ่มการจับภาพได้เฉพาะบนแท็บที่ใช้งานอยู่หลังจากเรียกใช้ส่วนขยายแล้ว ซึ่งคล้ายกับวิธีการทำงานของ activeTab การจับภาพจะคงอยู่ในการนำทางหน้าเว็บภายในแท็บ และจะหยุดเมื่อปิดแท็บหรือสตรีมสื่อถูกปิดโดยส่วนขยาย
พารามิเตอร์
-
ตัวเลือก
กำหนดค่าสตรีมสื่อที่แสดงผล
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(stream: LocalMediaStream) => void
-
สตรีม
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
)
แสดงผลรายการแท็บที่มีการขอจับภาพหรือกำลังถูกจับภาพ เช่น status != Stop และ status != error วิธีนี้ช่วยให้ส่วนขยายแจ้งผู้ใช้ว่ามีการจับภาพแท็บที่มีอยู่ซึ่งจะทำให้จับภาพแท็บใหม่ไม่สำเร็จ (หรือเพื่อป้องกันคำขอที่ซ้ำกันจากแท็บเดียวกัน)
พารามิเตอร์
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(result: CaptureInfo[]) => void
-
ผลลัพธ์
-
การคืนสินค้า
-
Promise<CaptureInfo[]>
Chrome 116 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
)
สร้างรหัสสตรีมเพื่อบันทึกแท็บเป้าหมาย คล้ายกับเมธอด chrome.tabCapture.capture() แต่จะส่งรหัสสตรีมสื่อไปที่แท็บผู้บริโภคแทนสตรีมสื่อ
พารามิเตอร์
-
ตัวเลือก
GetMediaStreamOptions ไม่บังคับ
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(streamId: string) => void
-
streamId
สตริง
-
การคืนสินค้า
-
คำมั่นสัญญา<สตริง>
Chrome 116 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
กิจกรรม
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
เหตุการณ์เริ่มทำงานเมื่อสถานะการจับภาพของแท็บมีการเปลี่ยนแปลง วิธีนี้ช่วยให้ผู้เขียนส่วนขยายสามารถติดตามสถานะการจับภาพของแท็บเพื่อให้องค์ประกอบ UI เช่น การทำงานของหน้าเว็บซิงค์กันอยู่เสมอ
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(info: CaptureInfo) => void
-
ข้อมูล
-