원격 재생 API

W3C 후보 권고안 초안

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2024/CRD-remote-playback-20240430/
최신 공개 버전:
https://www.w3.org/TR/remote-playback/
최신 편집자 초안:
https://w3c.github.io/remote-playback/
이력:
https://www.w3.org/standards/history/remote-playback/
커밋 이력
구현 보고서:
https://www.w3.org/wiki/Second_Screen/Implementation_Status#Remote_Playback_API
편집자:
Mark Foltz (Google)
이전 편집자:
Mounir Lamouri (Google)
Anton Vayvod (Google)
피드백:
GitHub w3c/remote-playback (풀 리퀘스트, 새 이슈, 열린 이슈)
테스트 스위트
GitHub web-platform-tests/remote-playback
w3c-test.org/remote-playback/

초록

이 명세는 HTMLMediaElement를 확장하여 웹 페이지에서 미디어의 원격 재생을 제어할 수 있도록 하는 API를 정의합니다.

이 문서의 상태

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

이 문서는 Second Screen Working Group이 권고안 트랙을 사용하여 후보 권고안 초안으로 게시했습니다.

이 문서는 외부 프레젠테이션형 디스플레이에 웹 콘텐츠를 표시해 온 그룹의 경험을 바탕으로 하며, 적절한 경우 Presentation API 명세의 패턴과 설계 고려사항을 재사용합니다 [PRESENTATION-API].

이 문서는 여전히 진행 중인 작업이며 변경될 수 있지만, Working Group은 API 표면이 안정적이라고 판단합니다. 이슈 추적기에 나열된 나머지 이슈의 대부분은 이 단계에서는 이슈 #41을 제외하고 사소한 것으로 간주됩니다.

이슈 #41에서는 원격 재생 장치가 지원할 것으로 기대되는 미디어 재생 기능 집합을 다룹니다. 그룹은 원격 재생 중 이러한 기능을 사용할 때 발생하는 상호운용성 문제를 식별하기 위해 추가적인 개발자 피드백과 구현 경험을 수집하고, 받은 피드백을 바탕으로 명세를 더욱 명확히 할 것입니다.

그 밖의 이슈나 우려 사항이 있는 경우 버그를 등록하거나 메일링 리스트로 이메일을 보낼 수 있습니다. 오타와 같은 작은 편집상 변경에는 풀 리퀘스트를 보내 주시면 감사하겠습니다.

Working Group은 모든 분이 이 문서를 검토해 주시기를 바라며, 접근성, 국제화, 개인정보 보호, 보안 및 기술 아키텍처 원칙에 대한 수평적 검토를 수행하기 위해 W3C의 관련 그룹과 협력할 것입니다.

위험 상태로 식별된 기능은 없습니다.

Second Screen Working Group은 후보 권고안 기간 동안 Remote Playback API를 위한 테스트 스위트를 개발하고 구현 보고서를 준비할 것입니다. 이 명세가 제안 권고안으로 진행하려면 각 기능에 대해 서로 독립적이며 상호운용 가능한 두 개의 구현이 입증되어야 하며, 자세한 내용은 후보 권고안 종료 기준 절에 설명되어 있습니다.

후보 권고안으로 게시되었다고 해서 W3C 및 그 회원의 승인을 의미하지는 않습니다. 후보 권고안 초안에는 Working Group이 이후의 후보 권고안 스냅샷에 포함하려는 이전 후보 권고안의 변경 사항이 통합됩니다.

이 문서는 초안이며 언제든지 다른 문서에 의해 업데이트되거나 대체되거나 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않습니다.

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

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

1. 적합성

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

이 문서의 핵심 단어 MAY, MUST, MUST NOT, RECOMMENDED 및 SHOULD는 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석해야 합니다.

이 명세는 여기에 포함된 인터페이스를 구현하는 사용자 에이전트라는 하나의 제품에 적용되는 적합성 기준을 정의합니다.

ECMAScript를 사용하여 이 명세에 정의된 API를 노출하는 구현은 Web IDL 명세에 정의된 ECMAScript 바인딩과 일관된 방식으로 이를 구현해야 MUST 합니다 [WEBIDL].

2. 소개

이 절은 비규범적입니다.

이 명세는 연결된 TV, 프로젝터 또는 오디오 전용 스피커와 같은 원격 재생 장치를 웹에서 사용할 수 있도록 하는 것을 목표로 하며, 유선 (HDMI, DVI 또는 이와 유사한 기술) 및 무선 기술(Miracast, Chromecast, DLNA, AirPlay 또는 이와 유사한 기술)을 사용하여 연결된 재생 장치를 고려합니다.

화면 크기가 제한적이거나 스피커 소리가 작은 장치는 예를 들어 회의실의 동료 그룹이나 집의 친구 및 가족과 같은 더 많은 사람에게 미디어 콘텐츠를 재생할 수 있는 기능이 부족합니다. 외부의 더 크고 더 큰 소리를 낼 수 있는 원격 재생 장치에서 미디어 콘텐츠를 재생하면 재생되는 미디어의 체감 품질과 효과를 향상하는 데 도움이 됩니다.

이 명세의 핵심은 브라우징 컨텍스트 역할을 하는 페이지가 선택된 원격 재생 장치에서 특정 미디어 요소의 원격 재생을 시작하고 제어할 수 있도록 하는 것입니다. 다양한 방식으로 연결할 수 있는 원격 재생 장치를 사용할 수 있도록 원격 재생을 시작하고 제어하는 방법은 UA에 맡깁니다. 예를 들어 원격 재생 장치가 HDMI 또는 Miracast를 사용하여 연결된 경우, 브라우징 컨텍스트 역할을 하는 동일한 UA가 원격 미디어를 렌더링합니다. 그러나 동일한 장치에서 미디어를 재생하는 대신 운영 체제가 외부 원격 재생 장치를 사용하기 위해 제공하는 모든 수단을 사용할 수 있습니다. 이러한 경우 브라우징 컨텍스트와 미디어 플레이어가 모두 동일한 UA에서 실행되며, 운영 체제를 사용하여 플레이어 출력을 원격 재생 장치로 전달합니다. 이를 일반적으로 미디어 미러링 사례라고 합니다. 이 명세는 이러한 방식으로 연결된 원격 재생 장치에 어떠한 요구사항도 부과하지 않습니다.

원격 재생 장치가 미디어를 재생하고 브라우징 컨텍스트와 통신할 수 있지만 미디어를 가져올 수 없는 경우, 브라우징 컨텍스트가 미디어 데이터를 가져와 렌더링을 위해 원격 재생 장치에 전달해야 합니다. 이를 일반적으로 미디어 리모팅 사례라고 합니다.

원격 재생 장치가 미디어를 가져와 재생할 수 있고 브라우징 컨텍스트와 통신할 수 있는 경우, 브라우징 컨텍스트는 원격 미디어를 가져오거나 렌더링할 필요가 없습니다. 이 경우 UA는 미디어 소스와 같은 필요한 데이터를 전달하여 원격 재생 장치가 미디어 자체를 재생하도록 요청하는 프록시 역할을 합니다. 이를 일반적으로 미디어 플링잉 사례라고 합니다. 디스플레이에 연결하는 이 방식은 향후 원격 재생 장치가 선택적으로 구현할 수 있는 이러한 유형의 메시지를 전달하기 위한 표준 프로토콜을 정의함으로써 개선될 수 있습니다.

여기에 정의된 API는 위의 방식 중 하나를 통해 원격 재생 장치에 연결하는 UA에서 사용하기 위한 것입니다.

3. 사용 사례 및 요구사항

이 절은 비규범적입니다.

이 명세의 사용 사례 및 요구사항은 여기에서 확인할 수 있는 별도의 문서에 정리되어 있습니다.

4. 예제

이 절에서는 Remote Playback API의 주요 기능 사용법을 보여 주는 코드 예제를 제시합니다. 이 예제에서 player.html은 원격 재생을 제어하는 플레이어 페이지를 구현하고, media.ext는 원격으로 재생할 미디어 파일입니다. 페이지와 미디어는 모두 https://example.org 도메인에서 제공됩니다. 자세한 내용은 코드 예제의 주석을 참조하십시오.

4.1 원격 재생 장치 가용성 모니터링 예제

<!-- player.html -->
<!-- 원격 재생을 지원하는 사용자 지정 컨트롤이 있는 video 요소입니다. -->
<video id="videoElement" src="https://example.org/media.ext" />
<button id="deviceBtn" style="display: none;">장치 선택</button>
<script>
  // 하나 이상의 원격 재생 장치를 사용할 수 있으면 "장치 선택" 버튼이 표시됩니다.
  const deviceBtn = document.getElementById("deviceBtn");
  const videoElem = document.getElementById("videoElement");

  function availabilityCallback(available) {
    // 장치 가용성에 따라 장치 선택 버튼을 표시하거나 숨깁니다.
    deviceBtn.style.display = available ? "inline" : "none";
  }

  videoElem.remote.watchAvailability(availabilityCallback).catch(() => {
    // 플랫폼에서 가용성 모니터링을 지원하지 않으므로,
    // 원격 재생 장치 검색은 remote.prompt()가 호출된 후에만 이루어집니다.
    // 단순화를 위해 장치를 사용할 수 있다고 가정합니다. 또는
    // 버튼에 대한 세 번째 상태를 구현할 수도 있습니다.
    deviceBtn.style.display = "inline";
  });
</script>

4.2 비디오 원격 재생 시작 예제

<!-- player.html -->
<script>
  deviceBtn.onclick = () => {
    // 사용자에게 원격 재생 장치를 선택하도록 요청합니다.
    videoElem.remote.prompt()
      // UI를 업데이트하고 연결 상태를 모니터링합니다.
      .then(updateRemotePlaybackState);
      // 그 밖의 경우 사용자가 선택 UI를 취소했거나 화면을 찾지 못한 것입니다.
  };
<script>

4.3 원격 재생 상태 변경 모니터링

<!-- player.html -->
<script>
  // 원격 재생은 사용자 에이전트에 의해 시작될 수 있으므로,
  // UI를 동기화하기 위해 초기 상태를 확인합니다.
  if (videoElem.remote.state == "disconnected")
    switchToLocalUI();
  else
    switchToRemoteUI();

  videoElem.remote.onconnecting = switchToRemoteUI;
  videoElem.remote.onconnect = switchToRemoteUI;
  videoElem.remote.ondisconnect = switchToLocalUI;

  // 'connecting' 및 'connected' 상태를 모두 처리합니다. 두 번 이상 호출해도
  // 아무 작업도 수행하지 않습니다.
  function switchToRemoteUI() {
    // 상태가 'connecting' 또는 'connected'임을 사용자에게 나타냅니다.
    // 예를 들어 컨트롤만 필요하므로 video 요소를 숨깁니다.
    videoElem.style.display = "none";

    // 원격 재생 장치의 가용성 모니터링을 중지합니다.
    videoElem.remote.cancelWatchAvailability();
  };

  function switchToLocalUI() {
    // video 요소를 표시합니다.
    videoElem.style.display = "inline";
    // 장치 가용성 관찰을 다시 시작합니다.
    videoElem.remote.watchAvailability(availabilityCallback);
  };
<script>

5. API

5.1 공통 관용 표현

로컬 재생 장치는 브라우징 컨텍스트가 실행되는 장치와 해당 장치가 가진 기본 비디오/오디오 출력입니다.

참고
로컬 재생 장치에는 외부 디스플레이나 스피커/헤드폰과 같은 추가 출력이 있을 수 있습니다. 사용할 출력을 전환하는 작업이 사용자 에이전트 외부의 시스템 수준에서 이루어지는 한, 이 명세의 목적상 재생은 로컬 재생 장치에서 이루어지는 것으로 간주됩니다.

원격 재생 장치는 로컬 재생 장치 이외에 브라우징 컨텍스트가 미디어를 재생하는 데 사용할 수 있는 모든 장치입니다.

미디어 요소 상태는 하나의 미디어 요소에서 페이지 및/또는 사용자가 사용자 에이전트 구현을 통해 관찰할 수 있는 모든 속성의 집합입니다. 편의를 위해 이 명세에서 새로 도입하는 속성은 미디어 요소 상태의 일부로 간주하지 않습니다.

예를 들어 paused 속성이나 미디어 요소의 기본 컨트롤에서 해당 상태를 반영하는 일시 정지/재개 버튼은 미디어 요소 상태의 일부입니다.

로컬 재생 상태는 특정 미디어 요소를 로컬 재생 장치에서 재생하기 위한 미디어 요소 상태의 사용자 에이전트 구현입니다.

원격 재생 상태는 특정 미디어 요소를 특정 원격 재생 장치에서 재생하기 위한 미디어 요소 상태의 사용자 에이전트 구현입니다.

참고

좋은 사용자 경험을 위해서는 미디어 요소 상태가 state가 변경될 때 예기치 않게 변경되지 않는 것이 중요합니다. 또한 원격 재생 상태가 미디어 요소 상태와 동기화되어 있어야 하므로, 미디어가 원격 재생 장치에서 일시 정지되면 사용자와 페이지 모두에서 일시 정지된 것으로 보여야 합니다.

이 명세에서 언급하는 작업의 작업 소스는 미디어 요소 이벤트 작업 소스입니다.

5.2 RemotePlayback 인터페이스

WebIDL[Exposed=Window]
interface RemotePlayback : EventTarget {
  Promise<long> watchAvailability(RemotePlaybackAvailabilityCallback callback);
  Promise<undefined> cancelWatchAvailability(optional long id);

  readonly attribute RemotePlaybackState state;

  attribute EventHandler onconnecting;
  attribute EventHandler onconnect;
  attribute EventHandler ondisconnect;

  Promise<undefined> prompt();
};

enum RemotePlaybackState {
  "connecting",
  "connected",
  "disconnected"
};

callback RemotePlaybackAvailabilityCallback = undefined(boolean available);

RemotePlayback 객체를 통해 페이지는 원격 재생 장치의 가용성을 감지하고, 장치에 연결하고, 장치에서의 재생을 제어할 수 있습니다.

RemotePlaybackState 열거형은 원격 재생 장치에 대한 가능한 연결 상태를 나타냅니다.

RemotePlaybackAvailabilityCallback은 현재 원격 재생 장치 가용성을 반환합니다.

5.2.1 원격 재생 장치 가용성 관찰

RemotePlaybackAvailabilityCallback은 페이지가 해당 미디어 요소에 대한 원격 재생 장치 가용성을 얻는 방법입니다. 사용자 에이전트가 백그라운드에서(prompt()에 대한 대기 중인 요청 없이) 사용 가능한 원격 재생 장치 목록을 모니터링할 수 있다면, 아래에 정의된 RemotePlaybackAvailabilityCallback 동작을 사용자 에이전트가 반드시 구현해야 합니다. 그렇지 않으면 watchAvailability()이 반환한 프로미스를 NotSupportedError로 반드시 거부해야 합니다.

5.2.1.1 가용성 콜백 집합

사용자 에이전트는 각 미디어 요소에 watchAvailability() 메서드를 통해 등록된 가용성 콜백 집합을 반드시 추적해야 합니다. 각 RemotePlayback 객체의 가용성 콜백 집합은 처음에는 비어 있는 (callbackId, callback) 튜플의 집합으로 나타내며, 여기서:

  1. callbackId는 주어진 브라우징 컨텍스트에서 watchAvailability()이 반환한 모든 id 중 고유한 양의 정수입니다;
  2. callback은 RemotePlaybackAvailabilityCallback 객체입니다.

각 미디어 요소마다 RemotePlayback 객체가 정확히 하나만 존재하므로, 미디어 요소의 가용성 콜백 집합은 해당 요소의 remote 속성이 참조하는 RemotePlayback 객체의 가용성 콜백 집합과 동일한 집합입니다.

브라우징 컨텍스트가 알고 있는 모든 RemotePlayback 객체의 모든 가용성 콜백 집합을 합친 집합을 전역 가용성 콜백 집합이라고 합니다.

5.2.1.2 사용 가능한 원격 재생 장치 목록

사용자 에이전트는 사용 가능한 원격 재생 장치 목록을 반드시 유지해야 합니다. 이 목록에는 원격 재생 장치가 포함되며 구현별 검색 메커니즘에 따라 채워집니다. 이 목록은 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘의 가장 최근 결과로 설정하거나, 알고리즘이 아직 실행되지 않았다면 빈 목록으로 설정합니다.

사용자 에이전트는 예를 들어 플랫폼 또는 전력 소비 제한 때문에 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘의 지속적 실행을 지원하지 않을 수 있습니다. 이 경우 watchAvailability()이 반환한 프로미스를 NotSupportedError로 반드시 거부해야 하며, 전역 가용성 콜백 집합은 비어 있게 되고 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘은 원격 재생 시작 알고리즘의 일부로만 실행됩니다.

전역 가용성 콜백 집합이 비어 있지 않으면, 사용자 에이전트는 페이지가 등록된 콜백을 통해 마지막으로 수신한 값을 추적하고 사용 가능한 장치가 있을 때만 원격 재생을 제공할 수 있도록 사용 가능한 원격 재생 장치 목록을 지속적으로 반드시 모니터링해야 합니다.

참고

사용자 에이전트는 절전 비기능 요구사항을 충족하기 위해 가능하면 사용 가능한 원격 재생 장치 목록을 모니터링하지 않을 것으로 기대됩니다. 예를 들어 전역 가용성 콜백 집합이 비어 있거나, 비어 있지 않은 가용성 콜백 집합을 가진 미디어 요소가 있는 모든 페이지가 백그라운드에 있을 때 사용자 에이전트는 모니터링 알고리즘을 실행하지 않도록 선택할 수 있습니다.

일부 원격 재생 장치는 기능, 보안 또는 하드웨어 제한 때문에 미디어 리소스의 일부만 재생할 수 있습니다. 예를 들면 특정 형식의 비디오 및/또는 오디오만 렌더링할 수 있는 셋톱박스, 스마트 TV 또는 네트워크 스피커가 있습니다. 사용자 에이전트가 해당 리소스에 지정된 미디어의 원격 재생이 그 장치에서 성공할 것이라고 합리적으로 보장할 수 있는 경우, 이러한 장치를 해당 미디어 리소스에 대한 호환 가능한 원격 재생 장치라고 합니다.

참고

사용자 에이전트는 호환 가능한 원격 재생 장치를 식별하는 데 도움이 되도록 track 요소의 srclang 속성을 텍스트 트랙 데이터의 언어에 대한 힌트로 사용할 수 있습니다.

사용자 에이전트가 호환 가능한 원격 재생 장치를 찾기 위해 고려한 미디어 요소의 미디어 리소스를 가용성 소스 집합이라고 합니다.

선택된 원격 재생 장치에서 원격 재생을 시작하는 데 사용되는 미디어 요소의 미디어 리소스를 원격 재생 소스라고 합니다. 원격 재생 소스는 미디어 요소의 가용성 소스 집합에 반드시 속해야 합니다.

가용성 소스 집합에서 원격 재생 소스를 선택하는 메커니즘은 구현에 따라 다르지만, 사용자 에이전트는 가용성 소스 집합의 모든 리소스를 잠재적인 원격 재생 소스로 고려해야 합니다.

참고
선택된 장치의 원격 재생 소스를 선택하는 알고리즘은 사용자 에이전트와 지원되는 원격 재생 장치 유형에 따라 달라집니다. 예를 들어 미디어 미러링의 경우 사용자 에이전트는 단순히 HTMLMediaElement의 리소스 선택 알고리즘을 따를 수 있습니다. 그러나 미디어 리모팅 또는 미디어 플링잉을 사용하는 경우 최적의 미디어 소스는 선택된 원격 재생 장치의 가져오기 및 재생 기능에 따라 달라질 수 있습니다.

사용자 에이전트가 원격 재생 장치에 적합한 원격 재생 소스를 결정할 수 없는 경우, 사용자 에이전트가 가용성 소스 집합의 모든 리소스에 대한 메타데이터(예: 확장 MIME 유형)를 원격 재생 장치에 전송하여 해당 장치가 자체 리소스 선택 알고리즘을 실행하고 원격 재생 소스를 선택할 수 있도록 하는 것이 권장됩니다.

사용 가능한 원격 재생 장치 목록이 비어 있거나 그중 어느 것도 가용성 소스 집합에 있는 미디어 요소의 어떤 소스와도 호환되지 않는 경우, 해당 미디어 요소에 대해 원격 재생은 사용할 수 없음 상태입니다. 그렇지 않으면 원격 재생은 사용 가능 상태입니다. 원격 재생을 해당 미디어 요소에 대해 사용할 수 없으면 false로 설정되고, 사용할 수 있으면 true로 설정되는 boolean을 해당 미디어 요소의 가용성이라고 합니다.

사용자 에이전트가 사용 가능한 원격 재생 장치 목록 모니터링을 중지하는 경우 (예를 들어 사용자 제어 또는 절전을 위해), 페이지가 사용자 경험을 적절히 업데이트할 수 있도록 전역 가용성 콜백 집합의 모든 콜백을 false로 호출해야 합니다. 또한 사용자 에이전트가 나중에 사용 가능한 원격 재생 장치 목록 모니터링을 재개할 경우 가용성 정보가 올바르게 전파될 수 있도록 모든 미디어 요소의 가용성 값을 false로 설정해야 합니다.

5.2.1.3 원격 재생 장치 가용성 정보 가져오기

watchAvailability() 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:

입력
callback, 가용성 정보와 함께 호출될 콜백입니다.
출력
promise, Promise입니다.
  1. promise을 새로운 Promise으로 둡니다.
  2. promise을 반환하고, 아래의 다음 단계를 실행합니다:
  3. 미디어 요소에 disableRemotePlayback 속성이 있으면, promise을 InvalidStateError로 거부하고 나머지 모든 단계를 중단합니다.
  4. 사용자 에이전트가 브라우징 컨텍스트의 전체 수명 동안 사용 가능한 원격 재생 장치 목록을 모니터링할 수 없는 경우(예를 들어 사용자가 이 기능을 비활성화했기 때문인 경우), 다음 단계를 병렬로 실행합니다:
    1. promise을 이행합니다.
    2. callback을 false를 인수로 사용하여 호출하는 작업을 대기열에 추가합니다.
    3. 나머지 모든 단계를 중단합니다.
  5. 사용자 에이전트가 사용 가능한 원격 재생 장치 목록을 지속적으로 모니터링할 수는 없지만 원격 재생을 시작할 때 짧은 시간 동안은 수행할 수 있는 경우:
    1. promise을 NotSupportedError 예외로 거부합니다.
    2. 나머지 모든 단계를 중단합니다.
  6. callbackId를 미디어 요소의 브라우징 컨텍스트에서 이 단계들이 이전에 반환한 모든 callbackIds 중 고유한 양의 정수로 둡니다.
  7. 튜플 (callbackId, callback)을 생성하고 이 미디어 요소의 가용성 콜백 집합에 추가합니다.
  8. promise을 callbackId로 이행하고 다음 단계를 병렬로 실행합니다:
    1. 작업을 대기열에 추가하여 callback을 미디어 요소의 현재 가용성을 인수로 사용하여 호출합니다.
    2. 사용자 에이전트가 사용 가능한 원격 재생 장치 목록을 모니터링하고 있지 않으면, 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘을 실행합니다.
참고

callbackId 값을 할당하는 간단한 알고리즘은 각 브라우징 컨텍스트마다 카운터를 유지하고 6단계에서 이를 증가시키는 것입니다.

참고
사용자의 핑거프린팅에 이용될 수 있는 정보의 유출을 방지하기 위해, 사용자 에이전트는 브라우저 프로필 또는 원격 재생 장치의 영구적인 정보를 사용하는 callbackId를 할당하지 않을 것으로 기대됩니다.
5.2.1.4 사용 가능한 원격 재생 장치 목록 모니터링

가용성 콜백 집합이 비어 있지 않거나 원격 재생을 시작하기 위한 대기 중인 요청이 있으면, 사용자 에이전트는 다음 단계를 실행하여 사용 가능한 원격 재생 장치 목록을 반드시 모니터링해야 합니다:

  1. 사용 가능한 원격 재생 장치를 구현별 메커니즘을 사용해 가져오고, newDevices를 이 목록으로 둡니다.
  2. 브라우징 컨텍스트가 알고 있는 각 미디어 요소에 대해:
    1. mediaElement에 disableRemotePlayback 속성이 있으면, 이 튜플에 대한 나머지 모든 단계를 중단하고 다음 튜플로 계속합니다.
    2. newAvailabilityValue를 사용 가능한 원격 재생 장치 목록 대신 newDevices 목록을 사용하여 계산한 미디어 요소의 가용성 값으로 설정합니다.
    3. 현재 가용성이 newAvailabilityValue와 같지 않으면, 요소의 가용성 콜백 집합에 있는 각 (callbackId, callback)에 대해:
      1. callback을 newAvailabilityValue를 인수로 사용하여 호출하는 작업을 대기열에 추가합니다.
  3. 사용 가능한 원격 재생 장치 목록을 newDevices 값으로 설정합니다.
5.2.1.5 원격 재생 장치 가용성 관찰 중지

cancelWatchAvailability() 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:

입력
id, 콜백 식별자입니다.
출력
promise, Promise입니다.
  1. promise을 새로운 Promise으로 둡니다.
  2. promise을 반환하고, 아래의 다음 단계를 실행합니다:
  3. 미디어 요소에 disableRemotePlayback 속성이 있으면 promise을 InvalidStateError로 거부하고 나머지 모든 단계를 중단합니다.
  4. 매개변수 id가 undefined이면, 가용성 콜백 집합을 비웁니다.
  5. 그렇지 않고 id가 가용성 콜백 집합에 있는 항목 중 하나의 callbackId와 일치하면, 해당 항목을 집합에서 제거합니다.
  6. 그렇지 않으면 promise을 NotFoundError로 거부하고 나머지 모든 단계를 중단합니다.
  7. 이제 가용성 콜백 집합이 비어 있고 원격 재생을 시작하기 위한 대기 중인 요청이 없으면, 절전을 위해 사용 가능한 원격 재생 장치 목록을 모니터링하기 위한 대기 중인 모든 작업을 취소합니다.
  8. promise을 이행합니다.
참고
원격 재생 장치의 가용성을 모니터링하고 선택된 가용성 소스 집합과 원격 재생 장치의 호환성을 판단하는 데 사용되는 메커니즘은 사용자 에이전트에 맡깁니다.

5.2.2 원격 재생 상태 변경을 사용자에게 요청

prompt() 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:

입력
없음. 다만 이 알고리즘은 미디어 요소, 해당 요소의 remote 속성 및 해당 요소의 가용성 소스 집합을 참조합니다.
출력
Promise입니다.
  1. promise을 새로운 Promise으로 둡니다.
  2. promise을 반환하고 이 단계를 병렬로 계속 실행합니다.
  3. 미디어 요소에 disableRemotePlayback 속성이 있으면 promise을 InvalidStateError로 거부하고 나머지 모든 단계를 중단합니다.
  4. 동일한 미디어 요소 또는 심지어 동일한 브라우징 컨텍스트에 대해 이전의 prompt() 호출에서 아직 처리되지 않은 프로미스가 이미 있는 경우, 사용자 에이전트는 promise을 OperationError 예외로 거부하고 나머지 모든 단계를 중단할 수 있습니다.
    참고
    여기서의 근거는 사용자 에이전트가 미디어 요소 또는 브라우징 컨텍스트에 대해 모달인 대화상자를 표시할 수 있기 때문입니다. 그러한 경우 두 번째 prompt() 호출은 어떠한 UI도 표시할 수 없습니다.
  5. 문서의 활성 창에 일시적 활성화가 없으면, promise을 InvalidAccessError 예외로 거부하고 이 단계를 중단합니다.
  6. 선택적으로, 사용자 에이전트가 이 특정 미디어 요소의 원격 재생이 현재 state 또는 사용 가능한 원격 재생 장치 목록과 관계없이 선험적으로 실행 가능하지 않다는 것을 알고 있다면, promise을 NotSupportedError로 거부하고 나머지 모든 단계를 중단합니다.
    참고
    이러한 상황의 예로 사용자 에이전트가 미디어 플링잉만 지원하고, 미디어 요소의 소스가 원격 재생 장치에 전달할 수 있는 URL이 아닌 경우가 있습니다.
  7. 사용자 에이전트가 사용 가능한 원격 재생 장치 목록을 표시해야 하는데 사용 가능한 원격 재생 장치 목록을 모니터링하고 있지 않으면, 사용 가능한 원격 재생 장치 목록을 모니터링하는 단계를 병렬로 실행합니다.
  8. 원격 재생을 사용할 수 없고 사용자 권한 요청이 완료되기 전까지도 계속 사용할 수 없는 상태라면, promise을 NotFoundError 예외로 거부하고 나머지 모든 단계를 중단합니다.
  9. 사용자에게 원격 재생 상태 변경 권한을 요청합니다.
    참고
    권한을 요청하는 UI의 한 예는 사용자가 새로운 원격 재생 장치를 선택하거나, 로컬 재생 장치와 원격 재생 장치 사이를 전환하거나, 원격 재생 장치와의 연결을 해제할 수 있도록 하는 것입니다.
    참고
    사용자는 관련 목적, 예를 들어 디스플레이 또는 현재 페이지의 콘텐츠를 미러링하기 위해 이미 원격 재생 장치를 선택했을 수 있습니다. 이 경우 사용자 에이전트는 장치를 선택하는 UI를 생략하고 즉시 다음 단계로 진행하도록 선택할 수 있습니다.
  10. 사용자가 원격 재생을 시작할 원격 재생 장치 device를 선택한 경우, 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:
    1. remote 객체의 state를 connecting으로 설정합니다.
    2. promise을 이행합니다.
    3. 작업을 대기열에 추가하여 이벤트를 발생시키되, connecting이라는 이름의 이벤트를 미디어 요소의 remote 속성에서 발생시킵니다. 이벤트는 버블링해서는 안 되고, 취소 가능해서도 안 되며, 기본 동작도 없습니다.
    4. 원격 재생 장치와 연결을 설정하되, 미디어 요소에 대해 device와 연결합니다.
    참고

    원격 재생 장치를 선택함으로써 사용자는 해당 장치를 사용할 권한을 부여합니다.

  11. 그렇지 않고 사용자가 원격 재생 장치 device와의 연결을 해제하기로 선택한 경우, 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:
    1. promise을 이행합니다.
    2. device에 대해 원격 재생 장치와의 연결 해제 알고리즘을 실행합니다.
  12. 그렇지 않으면 사용자는 장치 사용 권한을 거부한 것으로 간주하므로 promise을 NotAllowedError 예외로 거부하고 사용자 에이전트가 표시한 UI를 숨깁니다.
참고
UI 및 장치 선택의 구현 세부 사항은 사용자 에이전트에 맡깁니다. 예를 들어 사용자에게 대화상자를 표시하여 사용 가능한 장치를 선택(권한 부여)하게 하거나, 선택을 취소(권한 거부)하도록 할 수 있습니다. 대부분의 경우 사용 가능한 장치는 사용자에게 친숙한 이름과 함께 그 이름의 로케일 및 텍스트 방향 정보를 알립니다. 사용자 에이전트는 로케일과 텍스트 방향을 알고 있는 경우 이를 사용하여 해당 사용자 친화적 이름을 렌더링하는 것이 권장됩니다.

5.2.3 state 속성

state 속성은 RemotePlayback 연결의 현재 상태를 나타냅니다. 연결 상태에 따라 RemotePlaybackState의 값 중 하나를 가질 수 있습니다:

  • connecting은 사용자 에이전트가 선택된 원격 재생 장치를 사용하여 원격 재생을 시작하려고 시도 중임을 의미합니다. 이는 prompt()이 반환한 promise이 이행될 때의 초기 상태입니다. 이 상태에서는 미디어 요소의 로컬 재생이 계속되며 미디어 명령은 여전히 로컬 재생 상태에 적용됩니다.
  • connected는 로컬 재생에서 원격 재생으로의 전환이 완료되었고 이제 모든 미디어 명령이 원격 재생 상태에 적용됨을 의미합니다.
  • disconnected는 원격 재생이 시작되지 않았거나, 시작에 실패했거나, 중지되었음을 의미합니다. 모든 미디어 명령은 로컬 재생 상태에 적용됩니다. 원격 재생은 prompt() 호출을 통해 시작할 수 있습니다.

5.2.4 원격 재생 장치와 연결 설정

사용자 에이전트가 원격 재생 장치와 연결을 설정할 때는 반드시 다음 단계를 실행해야 합니다:

입력
remote, 연결할 RemotePlayback 객체입니다.
device, 연결할 원격 재생 장치입니다.
  1. remote의 state가 "connecting"과 같지 않으면 나머지 모든 단계를 중단합니다.
  2. remote를 device에 연결하도록 요청합니다. 이 단계의 구현은 사용자 에이전트에 따라 다릅니다.
  3. 연결이 성공적으로 완료되면 다음 단계를 실행하는 작업을 대기열에 추가합니다:
    1. remote의 state를 "connected"로 설정합니다.
    2. remote에서 connect라는 이름의 이벤트를 발생시킵니다.
    3. 현재 미디어 요소 상태를 원격 재생 상태와 동기화합니다. 이 단계의 구현은 사용자 에이전트에 따라 다릅니다.
  4. 연결에 실패하면 다음 단계를 실행하는 작업을 대기열에 추가합니다:
    1. remote의 원격 재생 상태를 "disconnected"로 설정합니다.
    2. remote에서 disconnect라는 이름의 이벤트를 발생시킵니다.

원격 재생 상태가 "connected"인 동안 사용자 에이전트는 미디어 요소의 로컬 오디오 및 비디오 출력을 일시 정지해야 합니다.

사용자 에이전트가 미디어 요소에 대해 사용자에게 사용자 인터페이스를 노출하고 있는 경우(즉, 기본 컨트롤을 사용하는 경우), 사용자 에이전트는 아이콘 또는 다른 수단을 통해 원격 재생 상태가 "connected"임을 나타내야 합니다.

참고
사용자 에이전트를 원격 재생 장치와 연결하고, 원격 재생 소스를 선택하고, 재생을 시작하는 데 사용되는 메커니즘은 모두 사용자 에이전트가 구현할 때 선택할 사항입니다. 연결은 미디어 명령을 원격 재생 장치로 전달하고 미디어 재생 상태를 수신하여 미디어 요소 상태와 원격 재생 상태를 동기화할 수 있는 양방향 메시징 추상화를 제공해야 할 가능성이 높습니다 (미디어 미러링을 사용하는 경우는 제외).
참고
가능하면 사용자 에이전트가 로케일 및 텍스트 방향 정보를 원격 재생 장치에 전달하는 것이 권장되며, 이를 통해 원격 재생 장치가 사용자 환경설정을 반영하는 로케일별 특성에 맞춰 사용자 인터페이스와 작동 기능을 조정할 수 있습니다. 예를 들어 원격 재생 장치는 이 정보를 사용하여 사용자 에이전트와 동일한 기본 텍스트 트랙을 선택하고, 미디어 리소스를 가져올 때 전송하는 HTTP Accept-Language 헤더를 설정할 수 있습니다.
참고
미디어 요소가 "connected" 상태이고 해당 콘텐츠가 원격 재생 장치에서 렌더링되고 있는 동안에는 사용자 에이전트가 미디어 요소의 출력을 렌더링하지 않아야 합니다.

5.2.5 브라우저가 시작하는 원격 재생

사용자 에이전트는 브라우저에서 원격 재생 장치에 연결하는 기능을 지원할 수 있습니다. 이는 사용자에게 노출되는 사용자 인터페이스에 적절한 미디어 컨트롤을 추가하거나, 사용자가 시스템 전체의 디스플레이 미러링을 활성화할 때 수행할 수 있습니다. 이 기능을 브라우저가 시작하는 원격 재생이라고 합니다. 브라우저가 시작하는 원격 재생을 지원하는 사용자 에이전트는 사용자가 예를 들어 브라우저의 버튼을 클릭하는 등의 사용자 제스처를 통해 그렇게 하려는 의도를 표현한 경우에만 원격 재생을 시작해야 합니다.

사용자 에이전트가 브라우저가 시작하는 원격 재생을 지원하는 경우, state 속성은 원격 재생 장치와의 연결의 현재 상태를 반드시 반영해야 합니다. 브라우저가 원격 재생을 시작하거나 종료할 때는 원격 재생 장치와 연결을 설정하고 원격 재생 장치와의 연결을 해제하는 알고리즘을 따라 해당 이벤트를 반드시 발생시켜야 합니다.

브라우저가 새로 생성된 미디어 요소에서 원격 재생을 시작하려는 경우, 해당 요소의 state 속성 값을 "connecting"으로 초기화한 다음 원격 재생 장치와 연결을 설정하는 단계를 따라야 합니다.

참고
브라우저가 시작하는 원격 재생을 구현하는 사용자 에이전트는 어떤 미디어 요소가 재생이 허용되는지와 백그라운드 미디어 재생 최적화 등 미디어 재생에 영향을 주는 다른 브라우저 정책과 이 기능이 어떻게 상호작용하는지 고려해야 합니다.

5.2.6 미디어 명령 및 미디어 재생 상태

HTMLMediaElement 인터페이스는 원격 재생 장치와의 연결이 설정되는 즉시 원격으로 재생되는 미디어와 상호작용합니다.

RemotePlayback 객체의 state가 "connected"인 경우, 다음 조건은 로컬 재생 상태, 미디어 요소 상태 및 원격 재생 상태를 서로 연관시킵니다:

명령 전송에 실패하면 사용자 에이전트는 원격 재생 장치와의 연결을 해제할 수 있습니다.

참고

원격 재생 장치는 사용자 에이전트의 재생 엔진 기능 일부만 구현할 수 있으며, 일부 HTMLMediaElement API는 원격 재생 중에 사용하는 것이 항상 적절하지는 않습니다. 이 경우 원격 재생 중 지원되지 않는 미디어 명령을 실행한 후 로컬 재생 상태는 실제 원격 재생 상태를 가능한 한 가깝게 반영할 것으로 기대됩니다.

예를 들어 이를 지원하지 않는 원격 재생 장치에 연결된 상태에서 fastSeek()을 호출한 후에는 HTMLMediaElement의 seeking 속성이 false로 유지되고 seeking 이벤트가 발생하지 않을 것으로 기대됩니다.

5.2.7 원격 재생 장치와의 연결 해제

사용자 에이전트가 원격 재생 장치와의 연결을 해제할 때는 반드시 다음을 수행해야 합니다:

입력
remote, 중지할 재생을 나타내는 RemotePlayback 객체입니다.
device, 연결을 해제할 원격 재생 장치입니다.
  1. remote의 state가 disconnected이면 나머지 모든 단계를 중단합니다.
  2. 다음 단계를 실행하는 작업을 대기열에 추가합니다:
    1. remote를 device에서 연결 해제하도록 요청합니다. 이 단계의 구현은 사용자 에이전트에 따라 다릅니다.
    2. remote의 state를 disconnected로 변경합니다.
    3. remote에서 disconnect라는 이름의 이벤트를 발생시킵니다.
    4. 현재 미디어 요소 상태를 로컬 재생 상태와 동기화합니다. 이 단계의 구현은 사용자 에이전트에 따라 다릅니다.

재생 중 원격 재생 장치가 갑자기 연결 해제되는 경우 (예를 들어 전원 손실 또는 네트워크 연결 해제로 인해), 사용자 에이전트는 원격 재생 장치와의 연결을 해제하는 단계보다 먼저 사용 가능한 원격 재생 장치 목록을 모니터링하는 단계를 실행해야 합니다. 이렇게 하면 disconnect 이벤트가 발생하기 전에 가용성 콜백 집합의 콜백을 호출할 수 있으므로, 페이지가 재생 재개가 불가능함을 표시하도록 자체적으로 업데이트할 수 있습니다.

참고
사용자 에이전트가 요청하더라도 원격 재생 장치가 실제로 미디어 재생을 중지하지 않을 수 있습니다. 이는 사용자 에이전트와 원격 재생 장치의 구현에 따라 달라집니다. 이 경우 원격 재생을 중지한다는 것은 사용자 에이전트가 단순히 원격 재생 장치와의 연결을 해제하고 미디어 요소가 disconnected 상태로 전환됨을 의미합니다.

5.2.8 이벤트 핸들러

다음은 RemotePlayback 인터페이스를 구현하는 객체가 이벤트 핸들러 IDL 속성으로 지원해야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 유형입니다:

이벤트 핸들러 이벤트 핸들러 이벤트 유형
onconnecting connecting
onconnect connect
ondisconnect disconnect

5.3 HTMLMediaElement 확장

WebIDLpartial interface HTMLMediaElement {
  [SameObject] readonly attribute RemotePlayback remote;

  [CEReactions] attribute boolean disableRemotePlayback;
};

remote 속성은 미디어 요소와 연결된 RemotePlayback 인스턴스를 반드시 반환해야 합니다.

5.3.1 disableRemotePlayback 속성

일부 페이지는 미디어 요소의 원격 재생을 비활성화하려 할 수 있습니다. 예를 들어 프레젠테이션 화면에 전체 문서를 표시하기 위해 PresentationRequest를 사용하는 것을 선호할 수 있습니다. 이 사용 사례를 지원하기 위해 새로운 disableRemotePlayback 속성이 audio 및 video 요소의 콘텐츠 속성 목록에 추가됩니다.

각 요소의 disableRemotePlayback 콘텐츠 속성 값을 반영하는 이에 대응하는 disableRemotePlayback IDL 속성이 HTMLMediaElement 인터페이스에 추가됩니다. disableRemotePlayback IDL 속성은 같은 이름의 콘텐츠 속성을 반영하도록 해야 합니다.

5.3.2 원격 재생 비활성화

미디어 요소에 disableRemotePlayback 속성이 있으면, 사용자 에이전트는 미디어 요소를 원격으로 재생하거나 이를 위한 UI를 표시해서는 안 됩니다.

미디어 요소에 disableRemotePlayback 속성이 추가되면, 사용자 에이전트는 다음 단계에 따라 원격 재생을 비활성화하도록 해야 합니다:

  1. RemotePlayback 메서드가 반환한 대기 중인 모든 프로미스를 InvalidStateError로 거부합니다.
  2. 미디어 요소의 가용성 콜백 집합을 비웁니다.
  3. 해당 요소의 state가 disconnected가 아니면, 미디어 요소가 연결되어 있거나 연결 중인 원격 재생 장치에 대해 원격 재생 장치와의 연결을 해제하는 알고리즘을 실행합니다.

6. 보안 및 개인정보 보호 고려사항

이 절은 비규범적입니다.

6.1 개인 식별 정보

watchAvailability() 메서드를 통해 제공된 callback을 호출하면 일반적으로 로컬 영역 네트워크를 통해 검색되는 원격 재생 장치의 존재 여부에 관한 1비트의 정보가 노출됩니다. 이는 다른 정보와 함께 사용하여 사용자를 핑거프린팅하는 데 이용될 수 있습니다. 그러나 이 정보는 사용자의 로컬 네트워크 컨텍스트에도 의존하므로 위험이 최소화됩니다. 또한 설계상 원격 재생 장치의 사람이 읽을 수 있는 이름은 페이지에 노출되지 않습니다.

이 API를 사용하면 사용 가능한 원격 재생 장치 목록을 모니터링할 수 있습니다. 사용자 에이전트가 원격 재생 장치와 미디어 요소의 리소스 간 호환성과 가용성을 판단하는 방법은 구현 세부 사항입니다. 사용자 에이전트가 가용성을 판단하기 위해 미디어 리소스를 특정 유형의 장치와 일치시키는 경우, 이 기능을 사용하여 사용자 동의 없이 사용자가 어떤 원격 재생 장치를 가지고 있는지에 관한 정보를 탐색할 수 있습니다.

사용자가 브라우저 설정을 통해 백그라운드 모니터링을 비활성화한 경우 사용자 에이전트는 사용 가능한 원격 재생 장치 목록을 모니터링하지 않아야 합니다.

6.2 사용자 인터페이스 지침

출처 표시

원격 재생 상태를 변경하는 단계 중 사용자에게 원격 재생 장치 사용 권한을 요청할 때, 사용자 에이전트는 해당 요청이 어떤 출처에서 오는지 명확하게 알려야 합니다.

원격 재생을 요청하는 출처를 표시하면 사용자가 어떤 콘텐츠가 요청을 하는지 이해하는 데 도움이 되며, 특히 요청이 하위 내비게이터블에서 시작된 경우에 유용합니다. 예를 들어 삽입된 콘텐츠가 사용자가 클릭하도록 유도하여 원하지 않는 원격 재생을 시작하는 요청을 발생시키려 할 수 있습니다.

표시될 출처를 보여 주면 사용자가 해당 콘텐츠가 잠재적으로 신뢰할 수 있는 출처 (예: https:)에서 온 것인지, 그리고 알고 있거나 예상한 사이트에 해당하는지 알 수 있습니다.

6.3 장치 접근

Remote Playback API는 디스플레이에 대해 "로컬"이 무엇을 의미하는지를 추상화합니다. 즉, 네트워크를 통해 접근할 수 있는 디스플레이를 로컬 디스플레이인 것처럼 노출합니다. Remote Playback API는 페이지가 어떤 디스플레이에든 접근하려면 사용자 권한을 요구하여, 다른 사람이 볼 수 있는 디스플레이에 원치 않는 콘텐츠가 표시되는 것과 같은 발생 가능한 문제를 완화합니다.

6.4 로컬 재생 장치와 원격 재생 장치 간 메시징

이 명세는 로컬 재생 장치와 원격 재생 장치 간의 통신 프로토콜을 의무화하지 않지만, 사용자 에이전트는 이들 사이에서 메시지의 기밀성과 진위성에 대해 일정한 보장을 제공해야 합니다.

6.5 보안 컨텍스트

Remote Playback API는 [SECURE-CONTEXTS]로 제한되지 않습니다. 이는 사용자 에이전트가 일반적으로 브라우징 컨텍스트와 관계없이 모든 미디어에서 기본적으로 제공하는 기능을 웹 애플리케이션에 노출하기 때문입니다. 사용자 에이전트는 보안되지 않은 컨텍스트에서 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘의 일부로 항상 빈 목록을 반환함으로써 API를 [SECURE-CONTEXTS]로 제한할 수 있습니다.

A. 후보 권고안 종료 기준

이 명세가 제안 권고안으로 진행하려면 각 기능에 대해 서로 독립적이며 상호운용 가능한 구현이 최소 두 개 있어야 합니다. 각 기능은 서로 다른 제품 집합에서 구현할 수 있으며, 모든 기능을 하나의 제품에서 구현해야 한다는 요구사항은 없습니다. 또한 구현은 미디어 리모팅과 미디어 플링잉 사례를 동일한 제품 내에서 또는 서로 다른 제품에서 지원함을 입증해야 합니다.

이 기준의 목적상 다음 용어를 정의합니다:

독립적
각 구현은 서로 다른 주체가 개발해야 하며, 다른 적격 구현에서 사용하는 코드를 공유하거나 재사용하거나 그 코드에서 파생해서는 안 됩니다. 이 명세의 구현과 관련이 없는 코드 부분은 이 요구사항에서 제외됩니다.
상호운용 가능
공식 테스트 스위트에서 해당 테스트 사례를 통과하는 것입니다.
구현
다음을 충족하는 사용자 에이전트입니다:
  1. 명세를 구현합니다.
  2. 일반 대중이 사용할 수 있습니다. 구현은 출시된 제품이거나 기타 공개적으로 이용 가능한 버전(즉, 베타 버전, 프리뷰 릴리스 또는 "나이틀리 빌드")일 수 있습니다. 출시되지 않은 제품 릴리스는 안정성을 입증하기 위해 최소 한 달 동안 해당 기능을 구현한 상태여야 합니다.
  3. 실험적이지 않습니다(즉, 테스트 스위트를 통과하기 위해 특별히 설계되었으며 향후 일반적인 사용을 목적으로 하지 않는 버전이 아닙니다).

B. 참고 문헌

B.1 규범적 참고 문헌

[dom]
DOM 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
HTML 표준. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[PRESENTATION-API]
Presentation API. Mark Foltz; Dominik Röttsches. W3C. 2023년 10월 16일. W3C 후보 권고안. URL: https://www.w3.org/TR/presentation-api/
[RFC2119]
RFC에서 요구사항 수준을 나타내기 위해 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. 현행 최선 관행. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 핵심 단어의 대문자와 소문자 간 모호성. B. Leiba. IETF. 2017년 5월. 현행 최선 관행. URL: https://www.rfc-editor.org/rfc/rfc8174
[WEBIDL]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/

B.2 정보 제공 참고 문헌

[SECURE-CONTEXTS]
보안 컨텍스트. Mike West. W3C. 2023년 11월 10일. W3C 후보 권고안. URL: https://www.w3.org/TR/secure-contexts/
[url]
URL 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://url.spec.whatwg.org/