Mô tả
Dùng API chrome.tabCapture
để tương tác với luồng nội dung nghe nhìn của thẻ.
Quyền
tabCapture
Khái niệm và cách sử dụng
API chrome.tabCapture cho phép bạn truy cập vào một MediaStream
chứa video và âm thanh của thẻ hiện tại. Bạn chỉ có thể gọi phương thức này sau khi người dùng gọi một tiện ích, chẳng hạn như bằng cách nhấp vào nút thao tác của tiện ích. Điều này tương tự như hành vi của quyền "activeTab"
.
Giữ lại âm thanh hệ thống
Khi một MediaStream
được lấy cho một thẻ, âm thanh trong thẻ đó sẽ không còn phát cho người dùng nữa. Điều này tương tự như hành vi của hàm getDisplayMedia()
khi cờ suppressLocalAudioPlayback
được đặt thành true.
Để tiếp tục phát âm thanh cho người dùng, hãy sử dụng nội dung sau:
const output = new AudioContext(); const source = output.createMediaStreamSource(stream); source.connect(output.destination);
Thao tác này sẽ tạo một AudioContext
mới và kết nối âm thanh của MediaStream
trong thẻ với đích đến mặc định.
Mã luồng
Việc gọi chrome.tabCapture.getMediaStreamId()
sẽ trả về một mã nhận dạng luồng. Để truy cập vào MediaStream
sau này từ mã nhận dạng, hãy sử dụng mã sau:
navigator.mediaDevices.getUserMedia({ audio: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, video: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, });
Giới hạn mức sử dụng
Sau khi gọi getMediaStreamId()
, bạn sẽ bị hạn chế về nơi có thể sử dụng mã nhận dạng luồng được trả về:
- Nếu
consumerTabId
được chỉ định, thì lệnh gọigetUserMedia()
có thể dùng mã nhận dạng này trong bất kỳ khung nào trong thẻ đã cho có cùng nguồn gốc bảo mật. - Nếu không được chỉ định, bắt đầu từ Chrome 116, mã nhận dạng có thể được dùng trong mọi khung có cùng nguồn gốc bảo mật trong cùng một quy trình kết xuất với phương thức gọi. Điều này có nghĩa là bạn có thể sử dụng mã nhận dạng luồng nhận được trong một worker dịch vụ trong tài liệu ngoài màn hình.
Trước Chrome 116, khi không chỉ định consumerTabId
, mã nhận dạng luồng bị hạn chế đối với cả nguồn gốc bảo mật, quy trình kết xuất và khung kết xuất của phương thức gọi.
Tìm hiểu thêm
Để tìm hiểu thêm về cách sử dụng API chrome.tabCapture
, hãy xem phần Ghi âm và chụp ảnh màn hình. Điều này minh hoạ cách sử dụng tabCapture
và các API liên quan để giải quyết một số trường hợp sử dụng phổ biến.
Loại
CaptureInfo
Thuộc tính
- toàn màn hình
boolean
Liệu một phần tử trong thẻ đang được ghi lại có ở chế độ toàn màn hình hay không.
- trạng thái
Trạng thái ghi hình mới của thẻ.
- tabId
số
Mã nhận dạng của thẻ có trạng thái đã thay đổi.
CaptureOptions
Thuộc tính
- âm thanh
boolean không bắt buộc
- audioConstraints
MediaStreamConstraint không bắt buộc
- video
boolean không bắt buộc
- videoConstraints
MediaStreamConstraint không bắt buộc
GetMediaStreamOptions
Thuộc tính
- consumerTabId
number không bắt buộc
Mã nhận dạng thẻ không bắt buộc của thẻ sẽ gọi
getUserMedia()
sau này để sử dụng luồng. Nếu không được chỉ định, chỉ có tiện ích gọi mới có thể sử dụng luồng kết quả. Chỉ những khung hình trong thẻ đã cho có nguồn gốc bảo mật khớp với nguồn gốc của thẻ người dùng mới có thể sử dụng luồng này. Nguồn gốc của thẻ phải là một nguồn gốc bảo mật, ví dụ: HTTPS. - targetTabId
number không bắt buộc
Mã nhận dạng thẻ không bắt buộc của thẻ sẽ được ghi lại. Nếu không được chỉ định, thẻ đang hoạt động hiện tại sẽ được chọn. Bạn chỉ có thể dùng những thẻ mà tiện ích đã được cấp quyền
activeTab
làm thẻ đích.
MediaStreamConstraint
Thuộc tính
- bắt buộc
đối tượng
- tùy chọn
đối tượng không bắt buộc
TabCaptureState
Enum
"đang chờ xử lý"
"active"
"stopped"
"error"
Phương thức
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
Chụp vùng hiển thị của thẻ hiện đang hoạt động. Bạn chỉ có thể bắt đầu ghi hình trên thẻ đang hoạt động sau khi tiện ích được triệu hồi, tương tự như cách hoạt động của activeTab. Tính năng ghi hình vẫn hoạt động khi bạn chuyển đổi giữa các trang trong thẻ và dừng khi bạn đóng thẻ hoặc tiện ích đóng luồng nội dung nghe nhìn.
Thông số
- tùy chọn
Định cấu hình luồng nội dung nghe nhìn được trả về.
- callback
hàm
Tham số
callback
có dạng như sau:(stream: LocalMediaStream) => void
- luồng
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(): Promise<CaptureInfo[]>
Trả về danh sách các thẻ đã yêu cầu ghi hình hoặc đang được ghi hình, tức là trạng thái != stopped và trạng thái != error. Điều này cho phép các tiện ích thông báo cho người dùng rằng có một hoạt động ghi hình thẻ đang diễn ra và hoạt động này sẽ ngăn hoạt động ghi hình thẻ mới thành công (hoặc ngăn các yêu cầu dư thừa cho cùng một thẻ).
Giá trị trả về
-
Promise<CaptureInfo[]>
Chrome 116 trở lên
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
): Promise<string>
Tạo mã luồng để ghi lại thẻ đích. Tương tự như phương thức chrome.tabCapture.capture(), nhưng trả về một mã nhận dạng luồng nội dung nghe nhìn thay vì một luồng nội dung nghe nhìn cho thẻ người dùng.
Thông số
- tùy chọn
GetMediaStreamOptions không bắt buộc
Giá trị trả về
-
Promise<string>
Chrome 116 trở lên
Sự kiện
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
Sự kiện được kích hoạt khi trạng thái ghi hình của một thẻ thay đổi. Điều này cho phép tác giả của tiện ích theo dõi trạng thái chụp của các thẻ để giữ cho các phần tử trên giao diện người dùng (chẳng hạn như các thao tác trên trang) luôn đồng bộ hoá.
Thông số
- callback
hàm
Tham số
callback
có dạng như sau:(info: CaptureInfo) => void
- info
-