RTCConfiguration

초안
이 문서는 작성중입니다.

RTCConfiguration는 RTCPeerConnection의 설정에 대한 옵션들을 제공합니다. 연결이 처음으로 이루어질 때 RTCPeerConnection 생성자에 전달되거나, 연결이 확립된 동안 설정을 확인하고 변경이 가능한RTCPeerConnection.getConfiguration() 및 RTCPeerConnection.setConfiguration() 메소드와 같이 사용됩니다.

옵션은 ICE 서버, 전달 셋팅, 그리고 identity 정보를 포함합니다.

속성

bundlePolicy Optional
원격 피어가 SDP BUNDLE standard에 호환이 불가능할 때, 어떻게 candidate의 네고시에이션을 처리 할 것인지를 정의합니다. 이 옵션은 무조건 enum RTCBundlePolicy의 값들 중 하나여야만 합니다. 만약 이 값이 딕셔너리에 없으면, "balanced" 으로 지정됩니다.
certificates Optional
인증을 위해 연결에서 사용되는 RTCCertificate 타입의 객체의 Array 입니다. 이 속성이 정의되어있지 않으면, 각 RTCPeerConnection 인스턴스별로 자동으로 인증서 모음이 생성됩니다. 하나의 연결에는 오직 한개의 인증서만 사용이 되지만, 여러 알고리즘들에 대해 다수의 인증서를 제공하는 방법으로 어떤 상황에서 우연치 않게 연결이 성공되는 경우를 줄일 수 있습니다. 아래는 Using certificates에 대한 추가 정보입니다.
이 설정 옵션은 한 번 정의되면 변경이 불가능합니다. 한 번 인증서가 지정되면, 그 후 발생하는 RTCPeerConnection.setConfiguration() 호출에서 이 속성이 무시됩니다.
iceCandidatePoolSize Optional
미리 가져와진 ICE candidate pool의 크기를 정의하는 서명되지 않은 16-bit 정수 값. 기본 값은 0으로 candidate를 미리 가져오는 것이 발생하지 않음을 뜻함. 연결 시도를 시작하기전에 ICE 에이전트가 ICE candidates를 미리 가져오게 허용하면, candidate들은  RTCPeerConnection.setLocalDescription() 호출로 이미 확인이 가능하게 되고, 이로 인해 몇몇 상황에서 연결이 더 빠르게 성립됩니다.
ICE candidate pool의 크기 변경은 ICE 수집을 시작하게 만들 수 있습니다.
iceServers Optional
ICE 에이전트에 의해 이용될 수 있는 하나의 서버를 설명하는 RTCIceServer 객체의 배열. 일반적으로 STUN 혹은 TURN 서버들입니다. 이 옵션이 정의가 안되어있으면, ICE 에이전트는 자체 ICE 서버를 선택하여 사용 할 수 있습니다. 자체 서버가 없다면, 연결은 사용 가능한 STUN 혹은 TURN 서버 없이 진행되고, 이는 로컬 피어와의 연결을 제한합니다. 
iceTransportPolicy Optional
현재 ICE 전송 정책; 이는 RTCIceTransportPolicy enum에 존재하는 값입니다. 이 옵션이 정의가 안되어있으면, "all"로 설정됩니다.
peerIdentity Optional
RTCPeerConnection에 대한 타겟 피어 identity를 명시하는 DOMString. 이 값이 지정되어있으면, RTCPeerConnection은 주어진 이름으로 인증이 성공하지 않는 이상 원격 피어와 연결하지 않습니다. (기본 값은 null 입니다.) 
rtcpMuxPolicy Optional
non-multiplexed RTCP를 지원하기 위해, ICE candidate를 수집 할 때 사용되는 RTCP mux 정책. 이 값은 RTCRtcpMuxPolicy enum.에 존재하는 값입니다. 기본 값은 "require"입니다.

상수

RTCBundlePolicy enum

The RTCBundlePolicy enum defines string constants which are used to request a specific policy for gathering ICE candidates if the remote peer isn't compatible with the SDP BUNDLE standard for bundling multiple media streams on a single transport link.

Note: In technical terms, a BUNDLE lets all media flow between two peers flow across a single 5-tuple; that is, from the same IP and port on one peer to the same IP and port on the other peer, using the same transport protocol.

Constant Description
"balanced" On BUNDLE-aware connections, the ICE agent should gather candidates for all of the media types in use (audio, video, and data). Otherwise, the ICE agent should only negotiate one audio and video track on separate transports.
"max-compat" The ICE agent should gather candidates for each track, using separate transports to negotiate all media tracks for connections which aren't BUNDLE-compatible.
"max-bundle" The ICE agent should gather candidates for just one track. If the connection isn't BUNDLE-compatible, then the ICE agent should negotiate just one media track.

RTCIceTransportPolicy enum

The RTCIceTransportPolicy enum defines string constants which can be used to limit the transport policies of the ICE candidates to be considered during the connection process.

Constant Description
"all" All ICE candidates will be considered.
"public" Only ICE candidates with public IP addresses will be considered. Removed from the specification's May 13, 2016 working draft.
"relay" Only ICE candidates whose IP addresses are being relayed, such as those being passed through a TURN server, will be considered.

RTCRtcpMuxPolicy enum

The RTCRtcpMuxPolicy enum defines string constants which specify what ICE candidates are gathered to support non-multiplexed RTCP. <<<add a link to info about multiplexed RTCP.

Constant Description
"negotiate" Instructs the ICE agent to gather both RTP and RTCP candidates. If the remote peer can multiplex RTCP, then RTCP candidates are multiplexed atop the corresponding RTP candidates. Otherwise, both the RTP and RTCP candidates are returned, separately.
"require" Tells the ICE agent to gather ICE candidates for only RTP, and to multiplex RTCP atop them. If the remote peer doesn't support RTCP multiplexing, then session negotiation fails.

인증서 사용하기

RTCPeerConnection가 자동으로 생성하는 인증서 대신에, 사용자가 직접 RTCPeerConnection을 위한 자체 인증서를 만들기를 원한다면 RTCPeerConnection.generateCertificate() 호출 합니다. 

이 속성은 다중 인증서 제공을 지원합니다. 이는 주어진 DTLS 연결이 오직 하나의 인증서를 사용한다해도, 다중 인증서는 여러개의 암호화 알고리즘 지원을 허용하기 때문입니다. RTCPeerConnection의 구현은 DTLS 합의 중 결정된 알고리즘 및 원격 피어에 근거해서 어떤 인증서를 사용 할지 선택합니다.

인증서를 제공하지 않으면, 신규 인증서가 자동으로 생성이 됩니다. 사용자 자체의 identity 키를 제공하는 것의 한 가지 명백한 장점은 연속성입니다. 동일한 인증서를 이후 호출에도 사용하게되면, 원격 피어는 사용자가 같은 caller인지 알 수 있습니다. 또한, 새로운 인증키를 발급하지 않아도 됩니다. 

<<<link to added info on identity>>>

예시

아래 설정은 두개의 ICE 서버를 구축합니다. 첫 번째 서버, stun:stun.services.mozilla.com는 인증을 요구하기 때문에 유저 이름과 비밀번호를 제공합니다. 두 번째 서버는 두 개의 URL 주소가 있습니다: stun:stun.example.comstun:stun-1.example.com입니다.

var configuration = { iceServers: [{
                          urls: "stun:stun.services.mozilla.com",
                          username: "louis@mozilla.com", 
                          credential: "webrtcdemo"
                      }, {
                          urls: ["stun:stun.example.com", "stun:stun-1.example.com"]
                      }]
};

var pc = new RTCPeerConnection(configuration);

사양서

Specification Status Comment
WebRTC 1.0: Real-time Communication Between Browsers
The definition of 'RTCConfiguration' in that specification.
Candidate Recommendation Initial definition.

브라우저 호환성

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
RTCConfigurationChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
bundlePolicyChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
certificatesChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
iceCandidatePoolSizeChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
iceServersChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
iceTransportPolicyChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
peerIdentityChrome Full support 23Edge ? Firefox ? IE No support NoOpera Full support YesSafari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0
rtcpMuxPolicyChrome Full support 57
Notes
Full support 57
Notes
Notes Default for rtcpMuxPolicy is require
Edge ? Firefox ? IE No support NoOpera Full support 44
Notes
Full support 44
Notes
Notes Default for rtcpMuxPolicy is require
Safari ? WebView Android Full support YesChrome Android Full support 57Firefox Android ? Opera Android Full support YesSafari iOS ? Samsung Internet Android Full support 7.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.
See implementation notes.