RTCPeerConnection.setLocalDescription()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Experimental: 이 기능은 실험적인 기능입니다.
프로덕션 환경에서 사용하기 전에 브라우저 호환성 표를 주의 깊게 확인하세요.
RTCPeerConnection.setLocalDescription()
메소드는 연결 인터페이스와 관련이 있는 로컬 설명 (local description)을 변경합니다. 로컬 설명은 미디어 형식을 포함하는 연결의 로컬 엔드에 대한 속성을 명시합니다.
이 메소드는 세션 설명 (session description)을 단일 매개변수로 가지며, 설명이 비동기적으로 변하게되면 fulfilled되는 Promise
를 반환합니다.
연결이 이미 되어있는데 setLocalDescription()
가 호출된다면, 이는 재협상이 진행 중이라는 뜻입니다 (아마도 네트워크 환경이 바뀐 것에 대응하기 위함일 것입니다). 두명의 피어가 설정 값에 모두 동의해야지만 설명이 교환되기 때문에, setLocalDescription()
의 호출로 전송된 설명은 즉시 사용되지 못합니다. 대신 협상이 완료되는 순간까지는 기존 연결 설정대로 작동 하게 됩니다. 그러다가 협상이 완료된 다음에서야 신규 설정이 사용됩니다.
Syntax
aPromise = RTCPeerConnection.setLocalDescription(sessionDescription);
pc.setLocalDescription(sessionDescription, successCallback, errorCallback);
매개 변수
sessionDescription
-
연결의 로컬 엔드에 적용시킬 설정 값을 지정하는
RTCSessionDescriptionInit
혹은RTCSessionDescription
입니다.
세션 설명 매개 변수에 대한 설명
sessionDescription
매개 변수는 일단 기술적으로는 RTCSessionDescriptionInit
의 타입입니다. 하지만, RTCSessionDescription
가 RTCSessionDescriptionInit
와 구별이 불가능하도록 직렬화 (serialize)하기 때문에, RTCSessionDescription
를 전달 할 수도 있습니다. 이 말은 코드가 다음과 같이 간단해질 수 있다는 뜻입니다:
myPeerConnection.createOffer().then(function (offer) {
return myPeerConnection.setLocalDescription(new RTCSessionDescription(offer));
});
위 코드를 아래와 같이 간단하게 사용이 가능해집니다:
myPeerConnection.createOffer().then(myPeerConnection.setLocalDescription);
이러한 이유로, RTCSessionDescription()
생성자는 더 이상 사용되지 않습니다.
반환 값
RTCPeerConnection.localDescription
의 값이 성공적으로 바뀌거나 혹은 변환이 불가능한 경우 거절되면 fulfill 되는 Promise
입니다. 거절되는 예로는 명시한 설명이 연결에 존재하는 하나 혹은 양쪽 모두의 피어들과 호환이 불가능하면 발생하기도 합니다. 참고로 프로미스의 fulfillment 핸들러는 입력 매개 변수를 받지 않습니다.
참고 : 설명을 바꾸는 과정은 변경이 실패해도 연결 상태를 잃지 않게 보장하도록 WebRTC 레이어에 의해서 처리되는 중간 단계를 거칩니다. 이 과정에 대한 자세한 설명은 Pending and current descriptions를 참조하십시오.
지원이 중단된 매개 변수
이전 버전의 문서에서는 콜백 기반의 함수를 찾을 수 있습니다. 콜백 함수는 지원이 중단되었고, 추후에 삭제 될 예정이기 때문에 사용하지 않도록 강력히 권장하고 있습니다. 이미 콜백 함수를 사용 중이라면, Promise
기반인 setLocalDescription()
를 대신 사용하도록 업데이트 해야합니다. 기존 코드 업데이트에 도움을 주기 위해, 아래에서는 이전 버전의 setLocalDescription()
에 대한 매개 변수를 설명합니다.
successCallback
지원이 중단되었습니다-
설명 값이 성공적으로 설정되면 입력 매개 변수 없이 호출되는 JavaScript
Function
입니다. 여기서, offer가 시그널링 서버를 통해서 원격 유저에게 전송 될 수 있습니다. errorCallback
지원이 중단되었습니다-
설명 값이 설정이 불가능할 때에 호출되어
RTCPeerConnectionErrorCallback
서명을 확인하는 함수입니다. 여기에는 요청이 왜 실패했는지를 설명하는DOMException
객체를 전달합니다.
지원이 중단된 위의 메소드는 실제 설정이 바뀌기 전에 바로 반환합니다. 성공하면 successCallback
가 호출되고, 실패하면 errorCallback
가 호출됩니다.
지원이 중단된 예외처리
지원이 중단된 콜백버전의 setLocalDescription()
를 사용하게되면 아래와 같은 예외들이 발 생 할 수도 있습니다:
InvalidStateError
지원이 중단되었습니다-
연결의
signalingState
가"closed"
상태고, 이는 연결이 현재 열린 상태가 아니여서 협상이 발생할 수 없다는 뜻입니다. InvalidSessionDescriptionError
지원이 중단되었습니다-
sessionDescription
에 의해 명시된RTCSessionDescription
매개 변수가 유효하지 않음을 알려줍니다.
예시
아래의 예시에서는, negotiationneeded
이벤트에 대한 핸들러를 구현하였습니다:
function handleNegotiationNeededEvent() {
pc.createOffer()
.then(function (offer) {
return pc.setLocalDescription(offer);
})
.then(function () {
// Send the offer to the remote peer using the signaling server
})
.catch(reportError);
}
이 함수는 createOffer()
를 호출하여 offer를 생성하면서 시작됩니다. 이 과정이 성공하면, setLocalDescription()
를 호출합니다. 프로미스에 대한 fulfillment 핸들러는 시그널링 서버를 사용해서 다른 유저에게 신규 생성된 offer를 전송할 수 있게 됩니다.
명세서
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-peerconnection-setlocaldescription |
브라우저 호환성
BCD tables only load in the browser