캡처 핸들 - 화면 공유 시 협업 부트스트래핑

W3C 작업 초안

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2025/WD-capture-handle-identity-20250306/
최신 공개 버전:
https://www.w3.org/TR/capture-handle-identity/
최신 편집자 초안:
https://w3c.github.io/mediacapture-handle/identity/
이력:
https://www.w3.org/standards/history/capture-handle-identity/
커밋 이력
편집자:
Elad Alon (Google)
Jan-Ivar Bruaroey (Mozilla)
피드백:
GitHub w3c/mediacapture-handle (풀 리퀘스트, 새 이슈, 열린 이슈)

초록

이 문서는 애플리케이션 APP가 실행 중인 탭을 CAPTR이 화면 캡처하고 있는 경우, 애플리케이션 APP가 다른 애플리케이션 CAPTR에 특정 정보를 노출하도록 옵트인할 수 있는 메커니즘을 제안합니다. 이는 탭 캡처 또는 창 캡처를 위한 메커니즘을 설명합니다.

이 문서의 상태

이 절은 이 문서가 공개된 시점에서의 문서 상태를 설명합니다. 현재 W3C 공개 문서 목록과 이 기술 보고서의 최신 개정판은 https://www.w3.org/TR/의 W3C 기술 보고서 색인에서 확인할 수 있습니다.

이 문서는 완전하지 않습니다.

이 문서는 Web Real-Time Communications Working Group에서 Recommendation 트랙을 사용하여 작업 초안으로 공개했습니다.

작업 초안으로 공개되었다고 해서 W3C와 그 회원들이 보증한다는 의미는 아닙니다.

이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있습니다. 진행 중인 작업 이외의 것으로 이 문서를 인용하는 것은 적절하지 않습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지합니다. 해당 페이지에는 특허를 공개하기 위한 지침도 포함되어 있습니다. 본인이 필수 청구항을 포함한다고 믿는 특허에 대해 실제 지식을 가진 개인은 W3C 특허 정책 6절에 따라 해당 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

1. 준수

비규범으로 표시된 절뿐만 아니라, 이 명세의 모든 작성 지침, 도표, 예제 및 참고는 비규범입니다. 이 명세의 그 밖의 모든 내용은 규범입니다.

이 문서의 핵심 단어 MUSTMUST NOT은 여기 보이는 것처럼 모두 대문자로 나타나는 경우에, 그리고 오직 그 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석됩니다.

2. 문제 설명

2.1 일반 문제 설명

한 탭에서 실행 중인 웹 애플리케이션을 생각해 보겠습니다. 이를 "main_app"이라고 부르겠습니다. main_appgetDisplayMedia를 호출하고 사용자가 다음 중 하나를 선택한다고 가정합니다:

다음 사항에 유의하십시오:

  1. main_app은 자신이 무엇을 캡처하고 있는지 알지 못합니다.
  2. captured_app은 자신이 캡처되고 있다는 사실도, 더구나 누구에게 캡처되는지도 알지 못합니다.

이 두 특성은 일반적인 경우에는 바람직하지만, 브라우저가 애플리케이션이 그 간극을 메우고 연결을 가능하게 하도록 옵트인하는 것을 허용하고자 하는 정당한 사용 사례가 존재합니다.

우리는 일반적인 경우를 이전과 같이 유지하면서, 정당한 사용 사례를 가능하게 하고자 합니다.

2.2 사용 사례 #1: 화상 회의 앱에서 프레젠테이션 제어하기

협업 프레젠테이션 소프트웨어와 화상 회의 소프트웨어를 생각해 보겠습니다. 사용자가 VC 세션에 있다고 가정합니다. 사용자는 프레젠테이션 공유를 시작합니다. 두 애플리케이션 모두 VC 앱이 슬라이드 세션을 캡처하고 있다는 사실, 어떤 애플리케이션인지, 나아가 어떤 세션인지까지 발견할 수 있게 하는 데 관심이 있습니다. 그러면 VC 애플리케이션은 사용자에게 슬라이드를 넘기는 컨트롤을 노출할 수 있습니다. 사용자가 그 컨트롤을 클릭하면, VC 앱은 프레젠테이션 앱에 메시지를 보내 슬라이드 넘기기, 프레젠테이션 모드 진입/종료 등의 작업을 요청할 수 있습니다.

이러한 메시지를 전송하는 수단은 이 문서의 범위를 벗어납니다. 몇 가지 선택지는 다음과 같습니다:

2.3 사용 사례 #2: 분석

캡처하는 애플리케이션은 사용자가 어떤 애플리케이션을 캡처하는 경향이 있는지에 대한 통계를 수집하고자 하는 경우가 많습니다. 예를 들어 VC 애플리케이션은 사용자가 특정 제공자의 프레젠테이션 애플리케이션, Wikipedia, CNN 등을 얼마나 자주 공유하는지 알고자 합니다. 이러한 정보를 수집하면 위에서 설명한 것과 같은 새로운 협업을 도입하여 사용자에 대한 서비스를 개선하는 데 사용할 수 있습니다.

2.4 사용 사례 #3: 의도하지 않은 캡처 감지하기

사용자는 때때로 잘못된 탭을 공유하도록 선택합니다. 때로는 실수로 share-this-tab-instead 버튼을 클릭하여 잘못된 탭 공유로 전환하기도 합니다. 선의의 애플리케이션은 사용자가 실수했을 수 있다고 판단하면, 사용자를 보호하기 위해 앱 내부 대화상자를 표시하여 재확인을 요청할 수 있습니다.

2.5 사용 사례 #4: "거울의 방" 피하기

이 사용 사례는 #3의 하위 사례이지만, 그 중요성 때문에 자체 절을 둘 가치가 있습니다. "거울의 방" 효과는 사용자가 VC 통화가 이루어지는 탭을 공유하기로 선택할 때 발생합니다. 자기 캡처를 감지하면 VC 애플리케이션은 캡처된 스트림을 사용자에게 다시 표시하지 않음으로써, 우려되는 이 효과를 피할 수 있습니다.

3. Capture-Handle 메커니즘

capture-handle 메커니즘은 두 가지 주요 부분, 즉 캡처되는 쪽과 캡처하는 쪽으로 구성됩니다.

4. 캡처되는 쪽

애플리케이션은 캡처하는 애플리케이션에 정보를 노출하는 것이 허용됩니다. 일반적으로 자신이 실제로 캡처되고 있는지 알기 전에 그렇게 합니다. 사용되는 메커니즘은 적절한 CaptureHandleConfig와 함께 setCaptureHandleConfig를 호출하는 것입니다.

4.1 CaptureHandleConfig

CaptureHandleConfig 딕셔너리는 캡처되는 애플리케이션이 어떤 정보를 노출하려는지, 그리고 어떤 애플리케이션에 그 정보를 노출할 의향이 있는지를 사용자 에이전트에 지시하는 데 사용됩니다.

WebIDLdictionary CaptureHandleConfig {
  boolean exposeOrigin = false;
  DOMString handle = "";
  sequence<DOMString> permittedOrigins = [];
};
exposeOrigin

true이면, 사용자 에이전트는 캡처되는 애플리케이션의 origin을 CaptureHandleorigin 필드를 통해 노출해야 MUST 합니다. false이면, 사용자 에이전트는 캡처되는 애플리케이션의 origin을 노출해서는 MUST NOT 안 됩니다.

handle

사용자 에이전트는 이 값을 handle로 노출해야 MUST 합니다.

참고: 이 필드의 값은 1024개의 16비트 문자로 제한됩니다. 이 제한은 setCaptureHandleConfig에서 더 자세히 명세됩니다.

permittedOrigins

이 필드의 유효한 값은 다음을 포함합니다:

  • 빈 목록.
  • 단일 항목 "*"을 가진 목록
  • 유효한 origin들로 구성된 목록.

permittedOrigins가 단일 항목 "*"으로 구성되어 있으면, CaptureHandle은 모든 캡처하는 쪽에서 관찰 가능합니다. 그렇지 않으면, CaptureHandle은 자신의 origin이 permittedOrigins에 나열된 캡처하는 쪽에게만 관찰 가능합니다.

4.2 MediaDevices.setCaptureHandleConfig()

MediaDevicessetCaptureHandleConfig라는 메서드로 확장되며, 이 메서드는 CaptureHandleConfig 객체를 받습니다. 이 메서드를 호출함으로써 애플리케이션은 캡처하는 애플리케이션이 어떤 정보를 관찰할 수 있도록 허용하는지 사용자 에이전트에 알립니다.

참고

setCaptureHandleConfig가 한 번보다 많이 호출될 경우 어떻게 동작해야 하는지에 대해서는 아직 합의가 없습니다. 이는 그 자체가 cross-origin 메시징 채널로 오용될 수 있다는 우려 때문입니다. 이는 이슈 #11에서 논의 중입니다.

WebIDLpartial interface MediaDevices {
  undefined setCaptureHandleConfig(optional CaptureHandleConfig config = {});
};
setCaptureHandleConfig

사용자 에이전트는 다음 검증을 실행해야 MUST 합니다:

모든 검증을 통과하면, 사용자 에이전트는 새 config를 받아들여야 MUST 합니다. 사용자 에이전트는 setCaptureHandleConfig에 대한 이전 호출을 모두 잊어야 MUST 하며, 이제부터 애플리케이션의 CaptureHandleConfigconfig입니다.

관찰 가능한 CaptureHandle은 모든 캡처하는 애플리케이션에 대해 다시 평가됩니다.

  1. 관찰 가능한 CaptureHandlesetCaptureHandleConfig 호출 전과 다른 모든 캡처하는 애플리케이션에 대해, 사용자 에이전트는 capturehandlechange라는 이름의 이벤트를 발화해야 MUST 합니다.
  2. 사용자 에이전트는 getCaptureHandle이 호출될 때마다 새 관찰 가능한 CaptureHandle을 보고해야 MUST 합니다.

5. 캡처하는 쪽

트랙의 CaptureHandle관찰하도록 허용된 캡처하는 애플리케이션은 그것을 읽는 두 가지 방법을 가집니다.

  1. getCaptureHandle이 반환하는 현재 값을 읽습니다.
  2. EventListeneroncapturehandlechange에 등록합니다.

5.1 CaptureHandle

사용자 에이전트는 캡처되는 애플리케이션에 대한 정보를 CaptureHandle 딕셔너리를 통해 캡처하는 애플리케이션에 노출합니다. CaptureHandle 객체는 그것을 관찰하도록 허용되지 않은 캡처하는 애플리케이션에 제공되어서는 MUST NOT 안 됩니다.

WebIDLdictionary CaptureHandle {
  DOMString origin;
  DOMString handle;
};
origin

캡처되는 애플리케이션이 (exposeOrigin을 true로 설정하여) 자신의 origin 노출에 옵트인했다면, 사용자 에이전트는 origin을 캡처되는 애플리케이션의 origin으로 설정해야 MUST 합니다. 그렇지 않으면 origin은 설정되지 않습니다.

handle

사용자 에이전트는 이 필드를 캡처되는 애플리케이션이 handle에 설정한 값으로 설정해야 MUST 합니다.

5.2 MediaStreamTrack.getCaptureHandle()

MediaStreamTrackgetCaptureHandle이라는 메서드로 확장합니다. MediaStreamTrack이 화면 캡처에서 파생된 비디오 트랙이면, getCaptureHandle은 최신의 관찰 가능한 CaptureHandle을 반환합니다. 그렇지 않으면 null을 반환합니다.

참고

getCaptureHandleMediaStreamTrack에 속해야 하는지, 아니면 모든 트랙에 영향을 미치는 메시징과 단일 트랙의 소비를 분리하기 위해 복제 가능하지도 않고 전송 가능하지도 않은 전용 컨트롤러 객체에 속해야 하는지에 대해서는 아직 합의가 없습니다. 이는 이슈 #12에서 논의 중입니다.

WebIDLpartial interface MediaStreamTrack {
  CaptureHandle? getCaptureHandle();
};
getCaptureHandle

해당 트랙이 비디오 트랙이 아니면 사용자 에이전트는 null을 반환해야 MUST 합니다.

트랙이 browser 또는 window display surface 중 어느 하나도 나타내지 않으면, 사용자 에이전트는 null을 반환해야 MUST 합니다.

트랙이 ended 상태이면, 사용자 에이전트는 null을 반환해야 MUST 합니다.

캡처되는 애플리케이션이 CaptureHandleConfig를 설정하지 않았거나, 마지막으로 그것을 빈 CaptureHandleConfig로 설정했다면, 사용자 에이전트는 null을 반환해야 MUST 합니다.

사용자 에이전트는 캡처하는 문서의 origin을 캡처되는 애플리케이션이 permittedOrigins에 나열한 origin들과 비교해야 MUST 합니다. 캡처하는 origin이 CaptureHandle관찰하도록 허용되지 않은 경우, 사용자 에이전트는 null을 반환해야 MUST 합니다.

이전의 모든 검증을 통과했다면, 사용자 에이전트는 캡처되는 애플리케이션이 마지막으로 설정한 CaptureHandleConfig에서 파생된 값을 가진 CaptureHandle 딕셔너리를 반환해야 MUST 합니다.

5.3 변경 시 이벤트

5.3.1 capturehandlechange

주어진 캡처하는 애플리케이션에 대한 관찰 가능한 CaptureHandle이 변경될 때마다, 사용자 에이전트는 capturehandlechange라는 이름의 이벤트를 발화합니다. 이는 다음 경우에 발생할 수 있습니다:

  1. 캡처되는 애플리케이션이 새 CaptureHandleConfig와 함께 setCaptureHandleConfig()를 호출한 경우. (새 CaptureHandleConfig는 예를 들어 permittedOrigins를 변경하는 경우처럼, 관찰 가능한 CaptureHandle을 변경할 수도 있고 변경하지 않을 수도 있음에 유의하십시오.)
  2. 캡처되는 애플리케이션의 최상위 브라우징 컨텍스트가 cross-document로 탐색된 경우.
  3. 사용자 에이전트가 트랙을 새 애플리케이션을 따르도록 전환한 경우.

이벤트는 트랙이 끝날 때 발화되지 않으며, 그것이 끝난 뒤에도 발화되지 않습니다.

5.3.2 oncapturehandlechange

MediaStreamTrackoncapturehandlechange라는 EventListener로 확장됩니다.

WebIDLpartial interface MediaStreamTrack {
  attribute EventHandler oncapturehandlechange;
};
oncapturehandlechange

EventHandlercapturehandlechange라는 이름의 이벤트를 위한 것입니다.

A. 참고 문헌

A.1 규범적 참고 문헌

[dom]
DOM 표준. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[html]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[mediacapture-streams]
미디어 캡처 및 스트림. Cullen Jennings; Bernard Aboba; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2024년 12월 19일. CRD. URL: https://www.w3.org/TR/mediacapture-streams/
[RFC2119]
RFC에서 요구 수준을 나타내기 위해 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 핵심 단어의 대문자와 소문자 모호성. B. Leiba. IETF. 2017년 5월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[SCREEN-CAPTURE]
화면 캡처. Jan-Ivar Bruaroey; Elad Alon. W3C. 2025년 2월 13일. W3C 작업 초안. URL: https://www.w3.org/TR/screen-capture/
[WEBIDL]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

A.2 정보성 참고 문헌

[GETUSERMEDIA]
미디어 캡처 및 스트림. Cullen Jennings; Bernard Aboba; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2024년 12월 19일. CRD. URL: https://www.w3.org/TR/mediacapture-streams/