Copyright © 2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세는 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 프로세스 문서의 적용을 받습니다.
비규범적으로 표시된 절뿐만 아니라, 이 명세의 모든 작성 지침, 도표, 예제 및 참고 사항은 비규범적입니다. 이 명세의 그 밖의 모든 내용은 규범적입니다.
이 문서의 핵심 단어 MAY, MUST, MUST NOT, RECOMMENDED 및 SHOULD는 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석해야 합니다.
이 명세는 여기에 포함된 인터페이스를 구현하는 사용자 에이전트라는 하나의 제품에 적용되는 적합성 기준을 정의합니다.
ECMAScript를 사용하여 이 명세에 정의된 API를 노출하는 구현은 Web IDL 명세에 정의된 ECMAScript 바인딩과 일관된 방식으로 이를 구현해야 MUST 합니다 [WEBIDL].
이 절은 비규범적입니다.
이 명세는 연결된 TV, 프로젝터 또는 오디오 전용 스피커와 같은 원격 재생 장치를 웹에서 사용할 수 있도록 하는 것을 목표로 하며, 유선 (HDMI, DVI 또는 이와 유사한 기술) 및 무선 기술(Miracast, Chromecast, DLNA, AirPlay 또는 이와 유사한 기술)을 사용하여 연결된 재생 장치를 고려합니다.
화면 크기가 제한적이거나 스피커 소리가 작은 장치는 예를 들어 회의실의 동료 그룹이나 집의 친구 및 가족과 같은 더 많은 사람에게 미디어 콘텐츠를 재생할 수 있는 기능이 부족합니다. 외부의 더 크고 더 큰 소리를 낼 수 있는 원격 재생 장치에서 미디어 콘텐츠를 재생하면 재생되는 미디어의 체감 품질과 효과를 향상하는 데 도움이 됩니다.
이 명세의 핵심은 브라우징 컨텍스트 역할을 하는 페이지가 선택된 원격 재생 장치에서 특정 미디어 요소의 원격 재생을 시작하고 제어할 수 있도록 하는 것입니다. 다양한 방식으로 연결할 수 있는 원격 재생 장치를 사용할 수 있도록 원격 재생을 시작하고 제어하는 방법은 UA에 맡깁니다. 예를 들어 원격 재생 장치가 HDMI 또는 Miracast를 사용하여 연결된 경우, 브라우징 컨텍스트 역할을 하는 동일한 UA가 원격 미디어를 렌더링합니다. 그러나 동일한 장치에서 미디어를 재생하는 대신 운영 체제가 외부 원격 재생 장치를 사용하기 위해 제공하는 모든 수단을 사용할 수 있습니다. 이러한 경우 브라우징 컨텍스트와 미디어 플레이어가 모두 동일한 UA에서 실행되며, 운영 체제를 사용하여 플레이어 출력을 원격 재생 장치로 전달합니다. 이를 일반적으로 미디어 미러링 사례라고 합니다. 이 명세는 이러한 방식으로 연결된 원격 재생 장치에 어떠한 요구사항도 부과하지 않습니다.
원격 재생 장치가 미디어를 재생하고 브라우징 컨텍스트와 통신할 수 있지만 미디어를 가져올 수 없는 경우, 브라우징 컨텍스트가 미디어 데이터를 가져와 렌더링을 위해 원격 재생 장치에 전달해야 합니다. 이를 일반적으로 미디어 리모팅 사례라고 합니다.
원격 재생 장치가 미디어를 가져와 재생할 수 있고 브라우징 컨텍스트와 통신할 수 있는 경우, 브라우징 컨텍스트는 원격 미디어를 가져오거나 렌더링할 필요가 없습니다. 이 경우 UA는 미디어 소스와 같은 필요한 데이터를 전달하여 원격 재생 장치가 미디어 자체를 재생하도록 요청하는 프록시 역할을 합니다. 이를 일반적으로 미디어 플링잉 사례라고 합니다. 디스플레이에 연결하는 이 방식은 향후 원격 재생 장치가 선택적으로 구현할 수 있는 이러한 유형의 메시지를 전달하기 위한 표준 프로토콜을 정의함으로써 개선될 수 있습니다.
여기에 정의된 API는 위의 방식 중 하나를 통해 원격 재생 장치에 연결하는 UA에서 사용하기 위한 것입니다.
이 절은 비규범적입니다.
이 명세의 사용 사례 및 요구사항은 여기에서 확인할 수 있는 별도의 문서에 정리되어 있습니다.
이 절에서는 Remote Playback API의 주요 기능
사용법을 보여 주는 코드 예제를 제시합니다. 이 예제에서
player.html은 원격 재생을 제어하는 플레이어 페이지를
구현하고, media.ext는 원격으로 재생할
미디어 파일입니다. 페이지와 미디어는 모두
https://example.org 도메인에서 제공됩니다. 자세한 내용은
코드 예제의 주석을 참조하십시오.
<!-- 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>
<!-- player.html -->
<script>
deviceBtn.onclick = () => {
// 사용자에게 원격 재생 장치를 선택하도록 요청합니다.
videoElem.remote.prompt()
// UI를 업데이트하고 연결 상태를 모니터링합니다.
.then(updateRemotePlaybackState);
// 그 밖의 경우 사용자가 선택 UI를 취소했거나 화면을 찾지 못한 것입니다.
};
<script>
<!-- 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>
로컬 재생 장치는 브라우징 컨텍스트가 실행되는 장치와 해당 장치가 가진 기본 비디오/오디오 출력입니다.
원격 재생 장치는 로컬 재생 장치 이외에 브라우징 컨텍스트가 미디어를 재생하는 데 사용할 수 있는 모든 장치입니다.
미디어 요소 상태는 하나의 미디어 요소에서 페이지 및/또는 사용자가 사용자 에이전트 구현을 통해 관찰할 수 있는 모든 속성의 집합입니다. 편의를 위해 이 명세에서 새로 도입하는 속성은 미디어 요소 상태의 일부로 간주하지 않습니다.
paused 속성이나 미디어 요소의 기본 컨트롤에서
해당 상태를 반영하는 일시 정지/재개 버튼은 미디어 요소 상태의 일부입니다.
로컬 재생 상태는 특정 미디어 요소를 로컬 재생 장치에서 재생하기 위한 미디어 요소 상태의 사용자 에이전트 구현입니다.
원격 재생 상태는 특정 미디어 요소를 특정 원격 재생 장치에서 재생하기 위한 미디어 요소 상태의 사용자 에이전트 구현입니다.
좋은 사용자 경험을 위해서는 미디어 요소
상태가 state가 변경될 때 예기치 않게
변경되지 않는 것이 중요합니다. 또한 원격
재생 상태가 미디어 요소 상태와
동기화되어 있어야 하므로, 미디어가
원격 재생 장치에서 일시 정지되면 사용자와
페이지 모두에서 일시 정지된 것으로 보여야 합니다.
이 명세에서 언급하는 작업의 작업 소스는 미디어 요소 이벤트 작업 소스입니다.
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은 현재
원격 재생 장치 가용성을 반환합니다.
RemotePlaybackAvailabilityCallback은
페이지가 해당 미디어
요소에 대한
원격 재생 장치 가용성을 얻는 방법입니다. 사용자
에이전트가 백그라운드에서(prompt()에 대한 대기 중인 요청 없이)
사용
가능한
원격 재생 장치 목록을 모니터링할 수 있다면, 아래에 정의된
RemotePlaybackAvailabilityCallback
동작을 사용자 에이전트가 반드시
구현해야 합니다. 그렇지 않으면
watchAvailability()이
반환한 프로미스를 NotSupportedError로
반드시 거부해야 합니다.
사용자 에이전트는 각 미디어 요소에
watchAvailability()
메서드를 통해 등록된 가용성
콜백 집합을 반드시 추적해야 합니다. 각
RemotePlayback 객체의
가용성
콜백 집합은 처음에는 비어 있는
(callbackId, callback) 튜플의
집합으로 나타내며, 여기서:
watchAvailability()이
반환한 모든 id 중 고유한 양의 정수입니다;
RemotePlaybackAvailabilityCallback
객체입니다.
각 미디어
요소마다 RemotePlayback 객체가
정확히 하나만
존재하므로, 미디어
요소의 가용성
콜백 집합은 해당 요소의 remote
속성이 참조하는 RemotePlayback 객체의
가용성
콜백 집합과 동일한 집합입니다.
브라우징
컨텍스트가 알고 있는 모든 RemotePlayback 객체의 모든
가용성
콜백 집합을 합친 집합을 전역
가용성 콜백 집합이라고 합니다.
사용자 에이전트는 사용 가능한 원격 재생 장치 목록을 반드시 유지해야 합니다. 이 목록에는 원격 재생 장치가 포함되며 구현별 검색 메커니즘에 따라 채워집니다. 이 목록은 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘의 가장 최근 결과로 설정하거나, 알고리즘이 아직 실행되지 않았다면 빈 목록으로 설정합니다.
사용자 에이전트는 예를 들어 플랫폼 또는 전력 소비 제한 때문에
사용 가능한
원격 재생 장치 목록을 모니터링하는 알고리즘의 지속적 실행을 지원하지 않을
수 있습니다. 이 경우
watchAvailability()이
반환한 프로미스를
NotSupportedError로
반드시 거부해야 하며,
전역 가용성
콜백 집합은 비어 있게 되고
사용 가능한
원격 재생 장치 목록을 모니터링하는 알고리즘은
원격 재생 시작 알고리즘의 일부로만 실행됩니다.
전역 가용성 콜백 집합이 비어 있지 않으면, 사용자 에이전트는 페이지가 등록된 콜백을 통해 마지막으로 수신한 값을 추적하고 사용 가능한 장치가 있을 때만 원격 재생을 제공할 수 있도록 사용 가능한 원격 재생 장치 목록을 지속적으로 반드시 모니터링해야 합니다.
사용자 에이전트는 절전 비기능 요구사항을 충족하기 위해 가능하면 사용 가능한 원격 재생 장치 목록을 모니터링하지 않을 것으로 기대됩니다. 예를 들어 전역 가용성 콜백 집합이 비어 있거나, 비어 있지 않은 가용성 콜백 집합을 가진 미디어 요소가 있는 모든 페이지가 백그라운드에 있을 때 사용자 에이전트는 모니터링 알고리즘을 실행하지 않도록 선택할 수 있습니다.
일부 원격 재생 장치는 기능, 보안 또는 하드웨어 제한 때문에 미디어 리소스의 일부만 재생할 수 있습니다. 예를 들면 특정 형식의 비디오 및/또는 오디오만 렌더링할 수 있는 셋톱박스, 스마트 TV 또는 네트워크 스피커가 있습니다. 사용자 에이전트가 해당 리소스에 지정된 미디어의 원격 재생이 그 장치에서 성공할 것이라고 합리적으로 보장할 수 있는 경우, 이러한 장치를 해당 미디어 리소스에 대한 호환 가능한 원격 재생 장치라고 합니다.
사용자 에이전트는 호환 가능한
원격 재생
장치를 식별하는 데 도움이 되도록
요소의 tracksrclang
속성을 텍스트 트랙 데이터의 언어에 대한 힌트로 사용할 수 있습니다.
사용자 에이전트가 호환 가능한 원격 재생 장치를 찾기 위해 고려한 미디어 요소의 미디어 리소스를 가용성 소스 집합이라고 합니다.
선택된 원격 재생 장치에서 원격 재생을 시작하는 데 사용되는 미디어 요소의 미디어 리소스를 원격 재생 소스라고 합니다. 원격 재생 소스는 미디어 요소의 가용성 소스 집합에 반드시 속해야 합니다.
가용성 소스 집합에서 원격 재생 소스를 선택하는 메커니즘은 구현에 따라 다르지만, 사용자 에이전트는 가용성 소스 집합의 모든 리소스를 잠재적인 원격 재생 소스로 고려해야 합니다.
HTMLMediaElement의
리소스 선택 알고리즘을 따를 수 있습니다. 그러나 미디어
리모팅 또는 미디어 플링잉을 사용하는 경우 최적의 미디어
소스는 선택된 원격 재생
장치의 가져오기 및 재생 기능에 따라 달라질 수 있습니다.
사용자 에이전트가 원격 재생 장치에 적합한 원격 재생 소스를 결정할 수 없는 경우, 사용자 에이전트가 가용성 소스 집합의 모든 리소스에 대한 메타데이터(예: 확장 MIME 유형)를 원격 재생 장치에 전송하여 해당 장치가 자체 리소스 선택 알고리즘을 실행하고 원격 재생 소스를 선택할 수 있도록 하는 것이 권장됩니다.
사용 가능한 원격
재생
장치 목록이 비어 있거나 그중 어느 것도 가용성 소스 집합에 있는
미디어
요소의 어떤 소스와도 호환되지 않는 경우, 해당
미디어
요소에 대해 원격 재생은 사용할 수 없음 상태입니다. 그렇지 않으면 원격 재생은
사용 가능
상태입니다. 원격 재생을 해당 미디어 요소에 대해
사용할 수 없으면 false로 설정되고,
사용할 수 있으면 true로 설정되는
boolean을 해당 미디어 요소의
가용성이라고
합니다.
사용자 에이전트가
사용 가능한 원격 재생 장치 목록 모니터링을 중지하는 경우
(예를 들어 사용자 제어 또는 절전을 위해), 페이지가 사용자 경험을 적절히 업데이트할 수 있도록
전역 가용성
콜백 집합의 모든 콜백을 false로 호출해야
합니다. 또한 사용자 에이전트가 나중에
사용 가능한 원격 재생 장치 목록 모니터링을 재개할 경우 가용성 정보가 올바르게
전파될 수 있도록 모든 미디어 요소의
가용성 값을 false로 설정해야
합니다.
watchAvailability()
메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:
Promise입니다.
Promise으로 둡니다.
disableRemotePlayback
속성이 있으면, promise을
InvalidStateError로
거부하고 나머지 모든 단계를 중단합니다.
false를 인수로 사용하여 호출하는 작업을
대기열에 추가합니다.
NotSupportedError
예외로 거부합니다.
callbackId 값을 할당하는 간단한 알고리즘은 각 브라우징 컨텍스트마다 카운터를 유지하고 6단계에서 이를 증가시키는 것입니다.
가용성 콜백 집합이 비어 있지 않거나 원격 재생을 시작하기 위한 대기 중인 요청이 있으면, 사용자 에이전트는 다음 단계를 실행하여 사용 가능한 원격 재생 장치 목록을 반드시 모니터링해야 합니다:
disableRemotePlayback
속성이 있으면, 이 튜플에 대한 나머지 모든 단계를 중단하고 다음 튜플로 계속합니다.
cancelWatchAvailability()
메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:
Promise입니다.
Promise으로 둡니다.
disableRemotePlayback
속성이 있으면
promise을
InvalidStateError로
거부하고 나머지 모든 단계를 중단합니다.
undefined이면,
가용성
콜백 집합을 비웁니다.
NotFoundError로
거부하고 나머지 모든 단계를 중단합니다.
prompt() 메서드가
호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다:
Promise입니다.
Promise으로 둡니다.
disableRemotePlayback
속성이 있으면
promise을
InvalidStateError로
거부하고 나머지 모든 단계를 중단합니다.
prompt() 호출에서
아직 처리되지 않은 프로미스가 이미 있는 경우, 사용자 에이전트는
promise을
OperationError
예외로 거부하고 나머지 모든 단계를 중단할 수 있습니다.
InvalidAccessError
예외로 거부하고 이 단계를 중단합니다.
state 또는
사용 가능한 원격
재생 장치 목록과 관계없이 선험적으로 실행 가능하지 않다는 것을 알고 있다면,
promise을
NotSupportedError로
거부하고 나머지 모든 단계를 중단합니다.
NotFoundError
예외로 거부하고 나머지 모든 단계를 중단합니다.
state를
connecting으로
설정합니다.
connecting이라는 이름의 이벤트를
미디어
요소의 remote 속성에서 발생시킵니다.
이벤트는 버블링해서는 안 되고, 취소 가능해서도 안 되며, 기본 동작도 없습니다.
원격 재생 장치를 선택함으로써 사용자는 해당 장치를 사용할 권한을 부여합니다.
NotAllowedError
예외로 거부하고 사용자 에이전트가 표시한 UI를 숨깁니다.
state 속성은
RemotePlayback 연결의 현재 상태를 나타냅니다.
연결 상태에 따라
RemotePlaybackState의
값 중 하나를 가질 수 있습니다:
connecting은
사용자 에이전트가 선택된 원격 재생 장치를 사용하여
원격 재생을
시작하려고 시도 중임을 의미합니다. 이는
prompt()이 반환한
promise이 이행될 때의 초기 상태입니다. 이 상태에서는
미디어 요소의 로컬 재생이 계속되며 미디어 명령은 여전히
로컬 재생 상태에 적용됩니다.
connected는
로컬 재생에서 원격 재생으로의 전환이 완료되었고 이제 모든
미디어 명령이 원격 재생
상태에 적용됨을 의미합니다.
disconnected는
원격 재생이 시작되지 않았거나, 시작에 실패했거나,
중지되었음을 의미합니다. 모든 미디어 명령은
로컬
재생 상태에 적용됩니다. 원격 재생은
prompt() 호출을 통해
시작할 수 있습니다.
사용자 에이전트가 원격 재생 장치와 연결을 설정할 때는 반드시 다음 단계를 실행해야 합니다:
RemotePlayback 객체입니다.
state가
"connecting"과
같지 않으면 나머지 모든 단계를 중단합니다.
disconnected"로
설정합니다.
disconnect라는 이름의
이벤트를
발생시킵니다.
원격 재생 상태가
"connected"인 동안
사용자 에이전트는 미디어 요소의 로컬 오디오 및 비디오 출력을
일시 정지해야 합니다.
사용자 에이전트가 미디어 요소에 대해
사용자에게
사용자 인터페이스를 노출하고 있는 경우(즉, 기본 컨트롤을 사용하는 경우),
사용자 에이전트는 아이콘 또는 다른 수단을 통해
원격 재생 상태가
"connected"임을
나타내야 합니다.
사용자 에이전트는 브라우저에서 원격 재생 장치에 연결하는 기능을 지원할 수 있습니다. 이는 사용자에게 노출되는 사용자 인터페이스에 적절한 미디어 컨트롤을 추가하거나, 사용자가 시스템 전체의 디스플레이 미러링을 활성화할 때 수행할 수 있습니다. 이 기능을 브라우저가 시작하는 원격 재생이라고 합니다. 브라우저가 시작하는 원격 재생을 지원하는 사용자 에이전트는 사용자가 예를 들어 브라우저의 버튼을 클릭하는 등의 사용자 제스처를 통해 그렇게 하려는 의도를 표현한 경우에만 원격 재생을 시작해야 합니다.
사용자 에이전트가 브라우저가 시작하는
원격 재생을 지원하는 경우,
state 속성은
원격 재생 장치와의 연결의 현재 상태를
반드시 반영해야 합니다. 브라우저가 원격 재생을 시작하거나 종료할 때는
원격 재생 장치와
연결을 설정하고
원격 재생 장치와의 연결을
해제하는 알고리즘을 따라 해당 이벤트를 반드시 발생시켜야 합니다.
브라우저가 새로 생성된 미디어 요소에서
원격 재생을 시작하려는 경우, 해당 요소의
state 속성 값을
"connecting"으로 초기화한 다음
원격 재생 장치와
연결을 설정하는 단계를 따라야 합니다.
HTMLMediaElement
인터페이스는 원격
재생
장치와의 연결이 설정되는 즉시 원격으로 재생되는 미디어와 상호작용합니다.
RemotePlayback 객체의
state가
"connected"인 경우,
다음 조건은 로컬 재생 상태,
미디어 요소 상태 및
원격 재생 상태를 서로 연관시킵니다:
HTMLMediaElement
객체에서 실행된 모든 미디어 명령을
원격 재생
장치에 전송하여 해당 장치의 원격 재생 상태를
변경하도록 해야 합니다;
명령 전송에 실패하면 사용자 에이전트는 원격 재생 장치와의 연결을 해제할 수 있습니다.
원격 재생 장치는 사용자
에이전트의 재생 엔진 기능 일부만 구현할 수 있으며, 일부
HTMLMediaElement
API는 원격 재생 중에 사용하는 것이 항상 적절하지는 않습니다. 이 경우
원격 재생 중 지원되지 않는 미디어 명령을 실행한 후
로컬 재생 상태는 실제
원격 재생 상태를
가능한 한 가깝게 반영할 것으로 기대됩니다.
예를 들어 이를 지원하지 않는 원격 재생
장치에 연결된 상태에서
fastSeek()을
호출한 후에는
HTMLMediaElement의
seeking
속성이 false로 유지되고
seeking
이벤트가 발생하지 않을 것으로 기대됩니다.
사용자 에이전트가 원격 재생 장치와의 연결을 해제할 때는 반드시 다음을 수행해야 합니다:
RemotePlayback 객체입니다.
state가
disconnected이면 나머지 모든 단계를 중단합니다.
state를
disconnected로 변경합니다.
disconnect라는 이름의
이벤트를
발생시킵니다.
재생 중 원격 재생 장치가 갑자기 연결 해제되는 경우
(예를 들어 전원 손실 또는 네트워크 연결 해제로 인해),
사용자 에이전트는 원격 재생 장치와의 연결을
해제하는 단계보다 먼저 사용 가능한 원격 재생
장치 목록을 모니터링하는 단계를 실행해야 합니다. 이렇게 하면
이벤트가 발생하기 전에
가용성
콜백 집합의 콜백을 호출할 수 있으므로, 페이지가 재생 재개가 불가능함을
표시하도록 자체적으로 업데이트할 수 있습니다.
disconnect
disconnected 상태로 전환됨을 의미합니다.
다음은 RemotePlayback 인터페이스를 구현하는
객체가 이벤트 핸들러
IDL 속성으로 지원해야 하는 이벤트 핸들러와
이에 대응하는 이벤트
핸들러 이벤트 유형입니다:
| 이벤트 핸들러 | 이벤트 핸들러 이벤트 유형 |
|---|---|
onconnecting
|
connecting
|
onconnect
|
connect
|
ondisconnect
|
disconnect
|
HTMLMediaElement
확장
WebIDLpartial interface HTMLMediaElement {
[SameObject] readonly attribute RemotePlayback remote;
[CEReactions] attribute boolean disableRemotePlayback;
};
remote 속성은
미디어 요소와
연결된 RemotePlayback 인스턴스를
반드시 반환해야 합니다.
일부 페이지는 미디어 요소의 원격 재생을 비활성화하려 할 수
있습니다. 예를 들어 프레젠테이션 화면에 전체 문서를 표시하기 위해
PresentationRequest를
사용하는 것을 선호할 수 있습니다. 이 사용 사례를 지원하기 위해
새로운 disableRemotePlayback 속성이 audio 및
video 요소의 콘텐츠 속성 목록에 추가됩니다.
각 요소의 disableRemotePlayback 콘텐츠 속성 값을 반영하는 이에 대응하는
disableRemotePlayback
IDL 속성이 HTMLMediaElement 인터페이스에 추가됩니다.
disableRemotePlayback
IDL 속성은 같은 이름의 콘텐츠 속성을
반영하도록 해야 합니다.
미디어
요소에
disableRemotePlayback
속성이 있으면, 사용자 에이전트는 미디어 요소를 원격으로 재생하거나 이를 위한 UI를 표시해서는
안 됩니다.
미디어
요소에
disableRemotePlayback
속성이 추가되면, 사용자 에이전트는 다음 단계에 따라
원격 재생을
비활성화하도록 해야 합니다:
RemotePlayback 메서드가 반환한
대기 중인 모든 프로미스를 InvalidStateError로
거부합니다.
state가
disconnected가 아니면, 미디어 요소가 연결되어 있거나 연결 중인
원격
재생 장치에 대해 원격 재생 장치와의
연결을
해제하는 알고리즘을 실행합니다.
이 절은 비규범적입니다.
watchAvailability()
메서드를 통해 제공된 callback을 호출하면 일반적으로 로컬
영역 네트워크를 통해 검색되는
원격 재생 장치의 존재 여부에 관한 1비트의
정보가 노출됩니다. 이는 다른
정보와 함께 사용하여 사용자를 핑거프린팅하는 데 이용될 수 있습니다. 그러나 이 정보는
사용자의 로컬 네트워크 컨텍스트에도 의존하므로 위험이
최소화됩니다. 또한 설계상 원격
재생 장치의 사람이 읽을 수 있는 이름은 페이지에 노출되지 않습니다.
이 API를 사용하면 사용 가능한 원격 재생 장치 목록을 모니터링할 수 있습니다. 사용자 에이전트가 원격 재생 장치와 미디어 요소의 리소스 간 호환성과 가용성을 판단하는 방법은 구현 세부 사항입니다. 사용자 에이전트가 가용성을 판단하기 위해 미디어 리소스를 특정 유형의 장치와 일치시키는 경우, 이 기능을 사용하여 사용자 동의 없이 사용자가 어떤 원격 재생 장치를 가지고 있는지에 관한 정보를 탐색할 수 있습니다.
사용자가 브라우저 설정을 통해 백그라운드 모니터링을 비활성화한 경우 사용자 에이전트는 사용 가능한 원격 재생 장치 목록을 모니터링하지 않아야 합니다.
원격 재생 상태를 변경하는 단계 중 사용자에게 원격 재생 장치 사용 권한을 요청할 때, 사용자 에이전트는 해당 요청이 어떤 출처에서 오는지 명확하게 알려야 합니다.
원격 재생을 요청하는 출처를 표시하면 사용자가 어떤 콘텐츠가 요청을 하는지 이해하는 데 도움이 되며, 특히 요청이 하위 내비게이터블에서 시작된 경우에 유용합니다. 예를 들어 삽입된 콘텐츠가 사용자가 클릭하도록 유도하여 원하지 않는 원격 재생을 시작하는 요청을 발생시키려 할 수 있습니다.
표시될 출처를 보여 주면 사용자가 해당 콘텐츠가
잠재적으로
신뢰할 수 있는 출처
(예: https:)에서 온 것인지, 그리고 알고 있거나 예상한 사이트에 해당하는지
알 수 있습니다.
Remote Playback API는 디스플레이에 대해 "로컬"이 무엇을 의미하는지를 추상화합니다. 즉, 네트워크를 통해 접근할 수 있는 디스플레이를 로컬 디스플레이인 것처럼 노출합니다. Remote Playback API는 페이지가 어떤 디스플레이에든 접근하려면 사용자 권한을 요구하여, 다른 사람이 볼 수 있는 디스플레이에 원치 않는 콘텐츠가 표시되는 것과 같은 발생 가능한 문제를 완화합니다.
이 명세는 로컬 재생 장치와 원격 재생 장치 간의 통신 프로토콜을 의무화하지 않지만, 사용자 에이전트는 이들 사이에서 메시지의 기밀성과 진위성에 대해 일정한 보장을 제공해야 합니다.
Remote Playback API는 [SECURE-CONTEXTS]로 제한되지 않습니다. 이는 사용자 에이전트가 일반적으로 브라우징 컨텍스트와 관계없이 모든 미디어에서 기본적으로 제공하는 기능을 웹 애플리케이션에 노출하기 때문입니다. 사용자 에이전트는 보안되지 않은 컨텍스트에서 사용 가능한 원격 재생 장치 목록을 모니터링하는 알고리즘의 일부로 항상 빈 목록을 반환함으로써 API를 [SECURE-CONTEXTS]로 제한할 수 있습니다.
이 명세가 제안 권고안으로 진행하려면 각 기능에 대해 서로 독립적이며 상호운용 가능한 구현이 최소 두 개 있어야 합니다. 각 기능은 서로 다른 제품 집합에서 구현할 수 있으며, 모든 기능을 하나의 제품에서 구현해야 한다는 요구사항은 없습니다. 또한 구현은 미디어 리모팅과 미디어 플링잉 사례를 동일한 제품 내에서 또는 서로 다른 제품에서 지원함을 입증해야 합니다.
이 기준의 목적상 다음 용어를 정의합니다:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: