การรองรับเบราว์เซอร์
ปัจจุบันแพลตฟอร์มเว็บมาพร้อมกับตัวแฮนเดิลจับภาพ ซึ่งเป็นกลไกที่ช่วยในการทำงานร่วมกันระหว่างการจับภาพและเว็บแอปที่บันทึกไว้ แฮนเดิลของแคปเจอร์ช่วยให้เว็บแอปจับภาพสามารถระบุเว็บแอปที่บันทึกไว้ได้อย่างมั่นใจและสรีระได้อย่างมั่นใจ (หากเว็บแอปที่บันทึกไว้ได้เลือกใช้)
ตัวอย่างบางส่วนที่แสดงให้เห็นถึงประโยชน์ที่จะได้รับ
ตัวอย่างที่ 1: หากเว็บแอปการประชุมทางวิดีโอบันทึกเว็บแอปสำหรับงานนำเสนอ เว็บแอปการประชุมทางวิดีโอจะแสดงตัวควบคุมเพื่อให้ผู้ใช้ไปยังส่วนต่างๆ ของสไลด์ได้ เนื่องจากระบบฝังตัวควบคุมไว้ในเว็บแอปการประชุมทางวิดีโอโดยตรง ผู้ใช้จึงไม่จําเป็นต้องสลับระหว่างแท็บการประชุมทางวิดีโอกับแท็บที่นำเสนออีกต่อไป เมื่อไม่ต้องรับภาระนี้แล้ว ผู้ใช้จึงมีสมาธิกับการนำเสนอมากขึ้น
ตัวอย่างที่ 2: "ห้องกระจก" จะปรากฏขึ้นเมื่อมีการแสดงพื้นผิวที่บันทึกกลับไปเป็นตำแหน่งที่จับภาพ โปรดทราบว่าหากผู้ใช้เลือกจับภาพแท็บที่ใช้วิดีโอคอลและเว็บแอปการประชุมทางวิดีโอแสดงผลตัวอย่างในเครื่อง ผลกระทบที่น่ากังวลนี้จะสังเกตเห็นได้ เมื่อใช้แฮนเดิลจับภาพ ระบบสามารถตรวจจับและบรรเทาการจับภาพด้วยตนเองได้ เช่น โดยเว็บแอปที่ระงับการแสดงตัวอย่างในเครื่อง
เกี่ยวกับแฮนเดิลการจับภาพ
แฮนเดิลการจับภาพประกอบด้วย 2 ส่วนที่ส่งเสริมกัน ได้แก่
- เว็บแอปที่บันทึกไว้สามารถเลือกเปิดเผยข้อมูลบางอย่างแก่ต้นทางบางแห่งได้ด้วย
navigator.mediaDevices.setCaptureHandleConfig()
- การจับภาพเว็บแอปจะอ่านข้อมูลดังกล่าวด้วย
getCaptureHandle()
บนออบเจ็กต์MediaStreamTrack
ได้
ด้านที่จับภาพ
เว็บแอปเปิดเผยข้อมูลที่จะทำการบันทึกเว็บแอปได้ ซึ่งทำได้โดยการเรียก navigator.mediaDevices.setCaptureHandleConfig()
ด้วยออบเจ็กต์ที่ไม่บังคับซึ่งประกอบด้วยสมาชิกต่อไปนี้
handle
: เป็นสตริงใดก็ได้ที่มีอักขระไม่เกิน 1,024 ตัวexposeOrigin
: หากเป็นtrue
ต้นทางของเว็บแอปที่บันทึกไว้อาจแสดงจากเว็บแอปpermittedOrigins
: ค่าที่ใช้ได้คือ (1) อาร์เรย์ว่าง (2) อาร์เรย์ที่มีรายการ"*"
เดียว หรือ (3) อาร์เรย์ของต้นทาง หากpermittedOrigins
ประกอบด้วยรายการเดียว"*"
ระบบจะสังเกตCaptureHandle
ได้โดยเว็บแอปทั้งหมดที่บันทึกไว้ มิเช่นนั้น จะสังเกตได้ว่าเป็นการบันทึกเว็บแอปที่มีต้นทางเป็นภาษาpermittedOrigins
เท่านั้น
ตัวอย่างต่อไปนี้แสดงวิธีเปิดเผย UUID ที่สร้างขึ้นแบบสุ่มเป็นแฮนเดิลและต้นทางไปยังเว็บแอปใดๆ ที่ใช้จับภาพ
const config = {
handle: crypto.randomUUID(),
exposeOrigin: true,
permittedOrigins: ['*'],
};
navigator.mediaDevices.setCaptureHandleConfig(config);
โปรดทราบว่าเว็บแอปที่บันทึกไว้จะไม่ทราบว่ามีการบันทึกอยู่หรือไม่ เว้นแต่เว็บแอปที่บันทึกจะใช้ข้อมูล CaptureHandle
เพื่อสร้างการสื่อสารกับเว็บแอปที่บันทึกไว้ (เช่น ใช้การรับส่งข้อความผ่านผู้ปฏิบัติงานหรือโครงสร้างพื้นฐานของระบบคลาวด์ที่แชร์กัน)
กำลังจับภาพด้านข้าง
เว็บแอปจับภาพจะมีวิดีโอ MediaStreamTrack
และอ่านข้อมูลแฮนเดิลการจับภาพได้โดยโทรหา getCaptureHandle()
ในMediaStreamTrack
เครื่องนั้น การเรียกนี้จะส่งคืน null
หากไม่มีแฮนเดิลการจับภาพให้ใช้งาน หรือหากเว็บแอปจับภาพไม่ได้รับอนุญาตให้อ่านแฮนเดิลดังกล่าว หากมีแฮนเดิลการจับภาพให้ใช้งาน และมีการเพิ่มเว็บแอปแคปเจอร์ลงใน permittedOrigins
การเรียกนี้จะแสดงออบเจ็กต์ที่มีสมาชิกต่อไปนี้
handle
: ค่าสตริงที่เว็บแอปที่บันทึกไว้ด้วยnavigator.mediaDevices.setCaptureHandleConfig()
origin
: ต้นทางของเว็บแอปที่บันทึกไว้หากตั้งค่าexposeOrigin
เป็นtrue
ไม่เช่นนั้นจะไม่มีการกำหนดไว้
ตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อมูลแฮนเดิลการจับภาพจากแทร็กวิดีโอ
// Prompt the user to capture their display (screen, window, tab).
const stream = await navigator.mediaDevices.getDisplayMedia();
// Check if the video track is exposing information.
const [videoTrack] = stream.getVideoTracks();
const captureHandle = videoTrack.getCaptureHandle();
if (captureHandle) {
// Use captureHandle.origin and captureHandle.handle...
}
ตรวจสอบการเปลี่ยนแปลงของ CaptureHandle
โดยการฟังเหตุการณ์ "capturehandlechange"
บนออบเจ็กต์ MediaStreamTrack
การเปลี่ยนแปลงจะเกิดขึ้นเมื่อ
- เว็บแอปที่บันทึกไว้โทรหา
navigator.mediaDevices.setCaptureHandleConfig()
- การไปยังส่วนต่างๆ แบบข้ามเอกสารจะเกิดขึ้นในเว็บแอปที่บันทึกไว้
videoTrack.addEventListener('capturehandlechange', event => {
captureHandle = event.target.getCaptureHandle();
// Consume new capture handle...
});
ความปลอดภัยและความเป็นส่วนตัว
ในทางทฤษฎี การทำงานร่วมกันระหว่างจับภาพและเว็บแอปที่จับภาพไว้สามารถทำได้ในปัจจุบันด้วยการฝัง "พิกเซลมหัศจรรย์" ในเว็บแอปที่บันทึกไว้หรือฝังคิวอาร์โค้ดในสตรีมวิดีโอ เป็นต้น แฮนเดิลของ Capture มีกลไกที่ใช้งานง่าย เชื่อถือได้ และปลอดภัยมากยิ่งขึ้น นอกจากนี้ยังช่วยให้เว็บแอปที่บันทึกไว้เลือกผู้ชมได้ ไม่ว่าจะเลือกต้นทางหรือทั้งเว็บ
โปรดทราบว่า navigator.mediaDevices.setCaptureHandleConfig()
ใช้ได้กับเฟรมหลักระดับบนสุดในบริบทการท่องเว็บที่ปลอดภัย (HTTPS เท่านั้น)
ตัวอย่าง
คุณลองใช้แฮนเดิลจับภาพได้โดยเรียกใช้ตัวอย่างใน Glitch เป็น อย่าลืมดูซอร์สโค้ด
เดโม
ดูการสาธิตบางส่วนได้ที่
การตรวจหาฟีเจอร์
หากต้องการตรวจสอบว่าระบบรองรับ getCaptureHandle()
หรือไม่ ให้ใช้
if ('getCaptureHandle' in MediaStreamTrack.prototype) {
// getCaptureHandle() is supported.
}
หากต้องการตรวจสอบว่าระบบรองรับ navigator.mediaDevices.setCaptureHandleConfig()
หรือไม่ ให้ใช้
if ('setCaptureHandleConfig' in navigator.mediaDevices) {
// navigator.mediaDevices.setCaptureHandleConfig() is supported.
}
ขั้นตอนถัดไป
ตัวอย่างสิ่งที่จะเกิดขึ้นในอนาคตอันใกล้ซึ่งจะช่วยปรับปรุงการแชร์หน้าจอบนเว็บมีดังนี้
- การจับภาพภูมิภาคจะทำให้สามารถครอบตัดแทร็กวิดีโอที่ได้จากการจับภาพที่แสดงของแท็บปัจจุบันได้
- โฟกัสแบบมีเงื่อนไขจะอนุญาตให้เว็บแอปจับภาพสามารถสั่งให้เบราว์เซอร์เปลี่ยนโฟกัสไปยังพื้นผิวจอแสดงผลที่บันทึกไว้หรือเพื่อหลีกเลี่ยงการเปลี่ยนแปลงโฟกัสดังกล่าว
ความคิดเห็น
ทีม Chrome และชุมชนมาตรฐานเว็บต้องการทราบประสบการณ์ของคุณในการใช้งานแฮนเดิลจับภาพ
บอกให้เราทราบเกี่ยวกับการออกแบบ
มีบางอย่างเกี่ยวกับแฮนเดิลการจับภาพที่ไม่ทำงานตามที่คาดไว้ไหม หรือขาดวิธีการหรือคุณสมบัติที่จำเป็นซึ่งจำเป็นต่อการนำไอเดียของคุณไปปฏิบัติ หากมีคำถามหรือความคิดเห็นเกี่ยวกับรูปแบบการรักษาความปลอดภัย
- ยื่นข้อมูลจำเพาะในที่เก็บของ GitHub หรือเพิ่มความเห็นเกี่ยวกับปัญหาที่มีอยู่
หากมีปัญหาในการติดตั้งใช้งาน
คุณพบข้อบกพร่องในการติดตั้งใช้งาน Chrome ไหม หรือการติดตั้งใช้งานแตกต่างจากข้อกําหนดหรือไม่
- รายงานข้อบกพร่องที่ https://new.crbug.com โปรดใส่รายละเอียดให้มากที่สุดเท่าที่ทำได้ และวิธีการง่ายๆ ในการทำให้เนื้อหาเกิดซ้ำ ภาพ Glitch เหมาะสำหรับการแชร์ซ้ำที่ง่ายและรวดเร็ว
แสดงการสนับสนุน
คุณวางแผนที่จะใช้แฮนเดิลจับภาพไหม การสนับสนุนสาธารณะของคุณช่วยให้ทีม Chrome จัดลำดับความสำคัญของฟีเจอร์และแสดงให้ผู้ให้บริการเบราว์เซอร์รายอื่นๆ ทราบว่าการสนับสนุนนั้นสำคัญเพียงใด
ส่งทวีตไปที่ @ChromiumDev และแจ้งให้เราทราบว่าคุณใช้งานที่ไหนและอย่างไร
ลิงก์ที่มีประโยชน์
กิตติกรรมประกาศ
ขอขอบคุณ Joe Medley ที่อ่านบทความนี้