recursal/MDN huggingface dataset:
AudioNode.disconnect()
======================

`AudioNode` 인터페이스의 **`disconnect()`** 메서드는 하나 이상의 노드를 메서드가 호출된 노드로부터 연결 해제할 수 있게 합니다.

구문
--


```js
AudioNode.disconnect();

AudioNode.disconnect(output);

AudioNode.disconnect(destination);

AudioNode.disconnect(destination, output);

AudioNode.disconnect(destination, output, input);
```

### 반환 값

`undefined`### 매개변수

`disconnect()` 메서드의 몇 가지 버전이 있는데, 각 버전은 매개변수의 다른 조합을 받아 어떤 노드를 어디에서 연결을 끊을지 제어합니다. 만약 매개변수가 제공되지 않았다면, 나가는 모든 연결들이 연결 해제됩니다.

`destination` Optional

연결을 끊을 노드 혹은 노드들을 명시하는 `AudioNode` 또는 `AudioParam`. 만약 이 값이 `AudioNode` 라면, 하나의 노드가 연결 해제되고, 만약 선택적인 다른 매개변수가 있다면 (`output` 그리고/또는 `input`), 어떤 입력 그리고/또는 출력이 연결 해제되어야 하는지를 추가적으로 제한합니다. 만약 이 값이 `AudioParam` 이라면, 이 `AudioParam` 으로 향하는 연결이 제거되고, 이 계산된 파라미터에 대한 노드의 기여는 한 번 변화가 발생하고 나면 계속 0이 됩니다.

`output` Optional

현재 `AudioNode` 로부터 어떤 출력이 연결 해제될지를 기술하는 인덱스. 인덱스 숫자는 출력 채널의 수에 따라 정의됩니다 (오디오 채널을 참고해 보세요).

`input` Optional

명시된 목적지 `AudioNode`로 가는 어떤 입력이 연결 해제될지를 기술하는 인덱스. 인덱스 숫자는 입력 채널의 수에 따라 정의됩니다 (오디오 채널을 참고해 보세요).

### 예외

`IndexSizeError` `DOMException` (en-US)

만약 `input` 혹은 `output` 으로 명시된 값이 유효하지 않다면 발생되며, 존재하지 않거나 허용되는 범위 밖에 있는 노드를 나타냅니다.

`InvalidAccessError` `DOMException` (en-US)

`disconnect()` 가 호출된 노드가 명시된 `destination` 노드에 연결되어있지 않다면 발생됩니다.

예제
--


```js
var AudioContext = window.AudioContext || window.webkitAudioContext;

var audioCtx = new AudioContext();

var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();

oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);

gainNode.disconnect();
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-disconnect |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기
AudioNode.channelCount
======================

`AudioNode` 인터페이스의 **`channelCount`** 속성은 노드의 모든 입력에 대해 연결을 업믹싱하거나 다운믹싱할 때 얼마나 많은 채널이 사용될 지를 결정하기 위해 사용되는 integer를 나타냅니다.

`channelCount` 의 사용법과 정밀한 정의는 `AudioNode.channelCountMode`의 값에 달려 있습니다.

* 만약 `channelCountMode` 값이 `max` 라면, channelCount는 무시됩니다.
* 만약 `channelCountMode` 값이 `clamped-max` 라면, channelCount는 최대 값으로서 사용됩니다.
* 만약 `channelCountMode` 값이 `explicit` 이라면, channelCount는 정확한 값으로서 사용됩니다.
구문
--


```js
var oscillator = audioCtx.createOscillator();
var channels = oscillator.channelCount;
```

### 값

integer.

예제
--


```js
var AudioContext = window.AudioContext || window.webkitAudioContext;

var audioCtx = new AudioContext();

var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();

oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);

oscillator.channelCount;
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-channelcount |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기
AudioNode.numberOfOutputs
=========================

`AudioNode` 인터페이스의 `numberOfOutputs` 속성은 노드에서 나오는 출력의 수를 반환합니다. 목적지 노드 (예: `AudioDestinationNode`) 는 이 특성에 대해 0의 값을 가집니다.

구문
--


```js
var numOutputs = audioNode.numberOfOutputs;
```

### 값

integer ≥ 0.

예제
--


```js
const audioCtx = new AudioContext();

const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain();

oscillator.connect(gainNode).connect(audioCtx.destination);

console.log(oscillator.numberOfOutputs); // 1
console.log(gainNode.numberOfOutputs); // 1
console.log(audioCtx.destination.numberOfOutputs); // 0
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-numberofoutputs |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기
AudioNode.channelCountMode
==========================

`AudioNode` 인터페이스의 `channelCountMode` 프로퍼티는 노드의 입력과 출력 사이에서 채널들이 반드시 일치되어야만 하는 방법을 기술하는 열거형 값을 나타냅니다.

`channelCountMode` 의 가능한 값과 그 의미는 다음과 같습니다.

| 값 | 설명 | 다음의 `AudioNode` 자식들은 이것이 기본값입니다 |
| --- | --- | --- |
| `max` | 채널의 수는 모든 연결의 최대 채널의 수와 같습니다. 이 경우, `channelCount`는 무시되고 오직 업믹싱이 일어납니다. | `GainNode` (en-US), `DelayNode` (en-US),
 `ScriptProcessorNode` (en-US),
 `ChannelMergerNode` (en-US),
 `BiquadFilterNode`,
 `WaveShaperNode` (en-US) |
| `clamped-max` | 채널의 수는 모든 연결의 최대 채널 수와 같은데, `channelCount`의 값에 고정됩니다. | `PannerNode` (en-US), `ConvolverNode` (en-US),
 `DynamicsCompressorNode` (en-US) |
| `explicit` | 채널의 수는 `channelCount`의 값에 의해 정의됩니다. | `AudioDestinationNode`,
 `AnalyserNode`,
 `ChannelSplitterNode` (en-US) |

**참고:** 명세서의 구 버전에서는, `ChannelSplitterNode` (en-US)의 기본값은 max였습니다.

구문
--


```js
var oscillator = audioCtx.createOscillator();
oscillator.channelCountMode = "explicit";
```

### 값

channelCountMode를 나타내는 열거형 값.

예제
--


```js
var AudioContext = window.AudioContext || window.webkitAudioContext;

var audioCtx = new AudioContext();

var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();

oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);

oscillator.channelCountMode = "explicit";
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-channelcountmode |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기
AudioNode.channelInterpretation
===============================

`AudioNode` 인터페이스의 **`channelInterpretation`** 프로퍼티는 입력/출력 채널의 수가 다를 때 입력 채널이 출력 채널에 매핑되는 방법을 기술하는 열거형 값을 나타냅니다. 예를 들어, 이 설정은 모노 입력이 어떻게 스테레오 또는 5.1 채널 출력으로 업믹스될 것인지를 정의하거나, 어떻게 쿼드 채널 입력이 스테레오 또는 모노 출력으로 다운믹스될 것인지를 정의합니다.

이 프로퍼티에는 두 가지 옵션이 있습니다. `speakers` 와 `discrete` 입니다. 이 옵션들은 Web Audio API의 기본 개념 > 업믹싱과 다운믹싱에 기록되어 있습니다.

구문
--


```js
var oscillator = audioCtx.createOscillator();
oscillator.channelInterpretation = "discrete";
```

### 값

이 값들은 Web Audio API의 기본 개념 > 업믹싱과 다운믹싱에 기록되어 있습니다.

요약하자면,

`speakers`

일반적인 스피커 입력과 출력 설정 (모노, 스테레오, quad, 5.1) 의 조합에 대한 "표준" 매핑의 집합을 사용합니다. 예를 들어, 이 설정으로 모노 채널 입력은 스테레오 출력의 양 채널 모두에 출력될 것입니다.

`discrete`

입력 채널은 출력 채널에 순서대로 매핑됩니다. 만약 출력하는 더 많은 입력이 있다면, 추가적인 입력은 탈락됩니다. 만약 입력이 더 적다면 사용되지 않는 출력은 소리나지 않습니다.

예제
--


```js
var AudioContext = window.AudioContext || window.webkitAudioContext;

var audioCtx = new AudioContext();

var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();

oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);

oscillator.channelInterpretation = "discrete";
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-channelinterpretation |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio API 사용하기
AudioNode.context
=================

`AudioNode` 인터페이스의 읽기 전용 `context` 속성은 연관된 `BaseAudioContext`를 반환하는데, BaseAudioContext는 이 노드가 관여하고 있는 프로세싱 그래프를 나타내는 객체입니다.

구문
--


```js
var aContext = anAudioNode.context;
```

### 값

이 `AudioNode` 를 생성하기 위해 사용된 `AudioContext` 또는 `OfflineAudioContext` 객체.

예제
--


```js
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioCtx = new AudioContext();

const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain();
oscillator.connect(gainNode).connect(audioCtx.destination);

console.log(oscillator.context); // AudioContext
console.log(oscillator.context === audioCtx); // true
```

명세서
---

| Specification |
| --- |
| Web Audio API # dom-audionode-context |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Web Audio
API 사용하기
ServiceWorker.onstatechange
===========================

**실험적:** **이 기능은 실험적인 기능입니다.**  
프로덕션 환경에서 사용하기 전에 브라우저 호환성 표를 주의 깊게 확인하세요.

`statechange` 타입의 이벤트가 발생될 때마다 호출되는 `EventListener` 속성. 기본적으로 `ServiceWorker.state` (en-US)가 변경되는 시점에 발생한다.

Syntax
------


```js
ServiceWorker.onstatechange = function(statechangeevent) { ... }
ServiceWorker.addEventListener('statechange', function(statechangeevent) { ... } )
```

Examples
--------

이 코드 조각은 service worker registration-events sample (live demo) 으로부터 가져온 것이다. 이 코드는 `ServiceWorker.state` (en-US)의 모든 변경 사항을 수신하고 그 값을 반환한다.


```js
var serviceWorker;
if (registration.installing) {
  serviceWorker = registration.installing;
  document.querySelector("#kind").textContent = "installing";
} else if (registration.waiting) {
  serviceWorker = registration.waiting;
  document.querySelector("#kind").textContent = "waiting";
} else if (registration.active) {
  serviceWorker = registration.active;
  document.querySelector("#kind").textContent = "active";
}

if (serviceWorker) {
  logState(serviceWorker.state);
  serviceWorker.addEventListener("statechange", function (e) {
    logState(e.target.state);
  });
}
```


`statechange` 가 발생할 때, 서비스워커의 참조들이 변화할 수 있으므로 주의하라. 예시:


```js
navigator.serviceWorker.register(..).then(function(swr) {
  swr.installing.state == "installing"
  swr.installing.onstatechange = function() {
    swr.installing == null;
    // 이 시점에서, swr.waiting 또는 swr.active는 true일 것이다. 이것은 statechange 이벤트가 대기 상태이기 때문이며,
    // 그동안 잠재 상태의 워커가 waiting 상태가 될 수도 있으며 가능한 경우에는 즉시 activated 될 것이다.
  }
})
```

명세서
---

| Specification |
| --- |
| Service Workers # dom-serviceworker-onstatechange |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Location.reload()
=================

**`Location.reload()`** 메서드는 새로고침 버튼처럼 현재 리소스를 다시 불러옵니다.

새로고침은 `SECURITY_ERROR` `DOMException` (en-US)과 함께 거부당할 수 있습니다. 이는 `location.reload()`를 호출한 스크립트의 출처와 `Location` 객체를 소유한 문서의 출처가 다를 때 발생합니다. 더 자세한 정보는 동일 출처 정책 문서를 참고하세요.

구문
--


```js
location.reload();
```

명세
--

| Specification |
| --- |
| HTML Standard # dom-location-reload-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 메서드가 속한 `Location` 인터페이스.
* 비슷한 메서드: `Location.assign()` (en-US), `Location.replace()`.
location: replace() method
==========================

`Location` 인터페이스의 **`replace()`** 메서드는 현재 리소스를 제공된 URL에 있는 리소스로 바꿔줍니다. `replace()`를 사용한 후에는 현재 페이지가 세션 `History`에 저장되지 않으므로 사용자가 뒤로가기 버튼을 사용하여 해당 페이지로 이동할 수 없다는 점에서 `assign()` (en-US) 메서드와 차이점이 있습니다.

보안 정책 위반으로 인해 할당을 수행할 수 없는 경우, `SECURITY_ERROR` 유형의 `DOMException` (en-US)이 발생합니다. 이것은 메서드를 호출하는 스크립트의 원본이 `Location` 객체에 의해 원래 설명된 페이지의 원본과 다를 때 발생합니다. 스크립트가 다른 도메인에 호스팅된 경우에 주로 발생합니다.

제공된 URL이 유효하지 않은 경우, `SYNTAX_ERROR` 유형의 `DOMException` (en-US)이 발생합니다.

문법
--


```js
replace(url)
```

### 매개변수

`url`

탐색할 페이지의 URL이 포함된 문자열

### 반환 값

없음 (`undefined`).

예제
--


```js
// 이 페이지를 대체하여 Location.reload 문서로 이동합니다.
window.location.replace(
  "https://developer.mozilla.org/en-US/docs/Web/API/Location.reload",
);
```

명세서
---

| Specification |
| --- |
| HTML Standard # dom-location-replace-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 해당 메서드가 속한 `Location` 인터페이스
* 비슷한 메서드: `Location.assign()` (en-US)와 `Location.reload()`.
RTCPeerConnection.onicecandidate
================================

`RTCPeerConnection` 속성의 **`onicecandidate`** 는 `RTCPeerConnection` (en-US) 인스턴스에서 `icecandidate` 이벤트 발생시에 호출 하려는 함수를 지정합니다. 이 이벤트는 로컬 ICE 에이전트가 signaling 서버를 통해 원격 피어에게 메세지를 전달 할 필요가 있을때 마다 발생합니다. 그리고 ICE 에이전트가 signaling에 사용되는 기술에 대한 구체사항을 모르더라도 원격 피어와의 네고시에이션을 수행하도록 도와줍니다. 어떤 메세징 기술을 선택하던간에, 이 메소드를 사용해서 원격 피어에 ICE candidate를 전달하는 과정을 간단하게 구현 할 수 있습니다.

Syntax
------


```js
RTCPeerConnection.onicecandidate = eventHandler;
```

### 값

`onicecandidate` 속성은 `icecandidate` 이벤트를 나타내는 `RTCPeerConnectionIceEvent` (en-US) 객체를 입력 값으로 받는 함수로 설정되어야합니다. 여기에 설정되는 함수는 ICE candidate를 signaling 서버를 통해 원격 피어에게 전달해야합니다. 이때, ICE candidate의 SDP는 이벤트의 `candidate` 속성에서 확인 할 수 있습니다. 만약 이벤트의 `candidate` 속성이 `null` 로 지정되어있다면, ICE 수집과정이 완료됩니다. 이 메세지는 원격 피어에 전달되지 않아야합니다. 이때, 연결의 `iceGatheringState` 또한 `complete`로 바뀌게 됩니다. ICE 수집 상태를 명시적으로 감시할 필요는 없습니다. 다만, signaling의 종료를 감지해야 한다면, ICE 네고시에이션이 complete 상태로 변한것을 알려주는 `icegatheringstatechange` 이벤트를 감시하면 됩니다.

예시
--

아래는 Signaling and video calling 문서의 코드를 기반으로 원격 피어에게 ICE candidate를 전달하는 `icecandidate` 이벤트에 대한 핸들러를 설정합니다.


```js
pc.onicecandidate = function (event) {
  if (event.candidate) {
    // event.candidate가 존재하면 원격 유저에게 candidate를 전달합니다.
  } else {
    // 모든 ICE candidate가 원격 유저에게 전달된 조건에서 실행됩니다.
    // candidate = null
  }
};
```


위에서 알 수 있듯이, 이벤트의 `candidate` 속성이 `null`이면 네고시에이션의 종료가 감지됩니다.

명세
--

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-rtcpeerconnection-onicecandidate |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* `icecandidate` 이벤트 및 이벤트의 타입인 `RTCPeerConnectionIceEvent` (en-US).
RTCPeerConnection.ontrack
=========================

`RTCPeerConnection` (en-US) 속성인 \*\*`ontrack`\*\*은 `RTCPeerConnection` (en-US)에 트랙이 등록됨을 알려주는 `track`가 발생하면 호출되는 함수를 지정하는 `event handler`입니다.

이 함수는 `RTCTrackEvent` (en-US) 타입의 이벤트 객체를 입력 인자로 받습니다. 해당 이벤트는 신규로 받아지는 `MediaStreamTrack`가 생성되고 연결의 리시버 세트에 추가된 `RTCRtpReceiver` (en-US)객체와 연관되면 전송됩니다.

Syntax
------


```js
RTCPeerConnection.ontrack = eventHandler;
```

### 값

`ontrack`을 함수로 지정해서 신규 트랙에 대해 설명하고 어떻게 사용 될지를 알려주는 `RTCTrackEvent` (en-US) 객체를 입력 인자로 받도록 하십시오. 이 정보에는 신규 트랙을 나타내는 `MediaStreamTrack` 객체, `RTCRtpReceiver` (en-US)와`RTCRtpTransceiver` (en-US), 그리고 트랙이 어느 스트림에 해당하는지를 알려주는 `MediaStream` (en-US)의 리스트 객체를 포함합니다.

예시
--

아래의 예시는 Signaling and video calling 문서에 나온 코드의 일부입니다. 이 코드는 들어오는 트랙을 `<video>`에 연결해서 해당 비디오를 보여줄 수 있도록 합니다.


```js
pc.ontrack = function (event) {
  document.getElementById("received\_video").srcObject = event.streams[0];
  document.getElementById("hangup-button").disabled = false;
};
```


첫 줄에 나온 `ontrack` 이벤트 핸들러는 들어오는 트랙의 첫 스트림을 가져다가 `srcObject` 속성에 지정합니다. 이렇게 함으로써 비디오의 스트림을 해당 요소에 연결하고, 유저에게 보여 줄 수 있게됩니다. 두 번째줄에서는 "통화 종료" 버튼을 활성화하여 유저가 통화를 종료 할 수 있도록 해줍니다.

명세서
---

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # event-track |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* The `track` event and its type, `RTCTrackEvent` (en-US).
RTCPeerConnection.getTransceivers()
===================================

`RTCPeerConnection` (en-US) 인터페이스의 **`getTransceivers()`** 메소드는 연결에서 데이터 전송 및 수신에 사용되는 `RTCRtpTransceiver` (en-US) 객체의 리스트를 반환합니다.

Syntax
------


```js
transceiverList = RTCPeerConnection.getTransceivers();
```

### 매개변수

없음.

### 반환 값

`RTCPeerConnection`에 대한 모든 미디어의 전송/수신을 관리하는 트랜시버를 나타내는 `RTCRtpTransceiver` (en-US) 객체의 배열입니다. 리스트의 순서는 트랜시버가 연결에 추가된 순서대로 정렬되어있습니다.

예시
--

아래 코드는 `RTCPeerConnection`와 연관된 모든 트랜시버를 중지시킵니다.


```js
pc.getTransceivers.forEach((transceiver) => {
  transceiver.stop();
});
```

명세서
---

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-peerconnection-gettranseceivers |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* WebRTC API
* Signaling and video calling
* `RTCPeerConnection.addTransceiver()` (en-US)
* `Array.forEach()`
RTCPeerConnection.restartIce()
==============================

WebRTC API의 `RTCPeerConnection` (en-US) 인터페이스에서는 **`restartIce()`** 메소드를 제공해서 연결의 양쪽에서 ICE candidate의 재수집 요청을 간단하게 할 수 있게 만들어줍니다.

`restartIce()`가 반환을 한 뒤에는, offer가 시그널링 메커니즘을 통해 전달되고, 원격 피어가 받은 offer를 description으로 설정을 하게 됩니다.이 과정이 완료되면, `createOffer()` (en-US)에 대한 다음 호출로 반환된 offer가 로컬 피어 (로컬로 설정이 된 경우)와 원격 피어에서 ICE 재시작을 발생시키도록 설정됩니다.

`restartIce()`는 `RTCPeerConnection`에 대한 `negotiationneeded` (en-US) 이벤트를 발생시켜서 어플리케이션이 신호 채널을 통해서 협상을 수행하도록 합니다.

만약 협상이 롤백 현상이나 수신받은 offer가 이미 협상 중으로 인해 실패하게되면, `RTCPeerConnection` (en-US)가 ICE 재시작 요청을 했다는 것을 자동으로 기억합니다. 다음번에 연결의 `signalingState` (en-US)가 `stable`로 바뀌게되면, 연결 인터페이스가 `negotiationneeded` (en-US) 이벤트를 발생시킵니다. 이 과정은 ICE 재시작 과정이 온전히 완료될 때까지 반복됩니다.

Syntax
------


```js
RTCPeerConnection.restartIce();
```

### 매개변수

없음.

### 반환 값

`undefined`.

`createOffer()` (en-US)를 사용해서 만들어진 다음 offer가 신호 메커니즘을 통해 원격 유저에게 전달이 되면, ICE 재시작을 시작하도록 만듭니다. ICE를 재시작하게되면 기본적으로 ICE가 초기화되고, 새로운 증명서를 사용해서 신규 candidate를 생성합니다. 기존에 존재하던 미디어 전송/수신은 이 과정동안에는 방해받지 않습니다.

ICE 재시작의 작동원리를 좀 더 자세히 알고 싶다면, ICE restart (en-US)와 RFC 5245, 섹션 9.1.1.1: ICE specification를 참고하십시오.

예시
--

아래의 예제는 `iceconnectionstatechange` (en-US) 이벤트에 대한 핸들러입니다. 이 핸들러는 ICE를 재시작하여 `failed` 상태로의 전환을 관리합니다.


```js
pc.addEventListener("iceconnectionstatechange", (event) => {
  if (pc.iceConnectionState === "failed") {
    /\* possibly reconfigure the connection in some way here \*/
    /\* then request ICE restart \*/
    pc.restartIce();
  }
});
```


위의 코드를 사용하여 ICE 협상 중 `failed` 상태로 전환되면 코드가 정상적으로 재협상 되어야 하기 때문에 `negotiationneeded` (en-US) 이벤트가 발생합니다. 그러나, `restartIce()`를 호출했기 때문에 `negotiationneeded`에 대한 핸들러에서 발생하는 `createOffer()` (en-US) 호출은 일반적으로 수행되는 재협상이 아니라 ICE 재시작을 발생시킵니다.

명세서
---

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-rtcpeerconnection-restartice |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* WebRTC API
* Lifetime of a WebRTC session (en-US)
* Signaling and video calling
RTCPeerConnection.getConfiguration()
====================================

**실험적:** **이 기능은 실험적인 기능입니다.**  
프로덕션 환경에서 사용하기 전에 브라우저 호환성 표를 주의 깊게 확인하세요.

**`RTCPeerConnection.getConfiguration()`** 메소드는 호출 된 `RTCPeerConnection` (en-US)의 현재 설정을 알려주는 `RTCConfiguration` 객체를 반환합니다.

여기서 반환되는 설정 값 은 가장 최근에 적용했던 `setConfiguration()` 혹은 `setConfiguration()`가 호출 되지 않았다면, `RTCPeerConnection`가 구성되면서 생긴 설정입니다. 이 설정은 연결에 의해 사용되는 ICE 서버의 리스트, 전송 정책에 관한 정보, 그리고 식별 정보를 포함합니다.

Syntax
------


```js
var configuration = RTCPeerConnection.getConfiguration();
```

### 매개변수

이 메소드는 입력 변수를 받지 않습니다.

### 반환 값

`RTCPeerConnection` (en-US)의 현재 설정을 알려주는 `RTCConfiguration` 객체입니다.

예시
--

아래의 예제는 활성화된 연결에서 이미 사용 중인 인증서가 없다면, 신규 인증서를 추가하는 작업입니다.


```js
let configuration = myPeerConnection.getConfiguration();

if (
  configuration.certificates != undefined &&
  !configuration.certificates.length
) {
  RTCPeerConnection.generateCertificate({
    name: "RSASSA-PKCS1-v1\_5",
    hash: "SHA-256",
    modulusLength: 2048,
    publicExponent: new Uint8Array([1, 0, 1]),
  }).then(function (cert) {
    configuration.certificates = [cert];
    myPeerConnection.setConfiguration(configuration);
  });
}
```


위의 예제에서는 `RTCPeerConnection` (en-US)의 현재 설정을 가져 온 다음에, 인증서가 존재하는지 확인하기 위해 (1) 설정에 `certificates`값이 포함되어 있는지, (2) 길이가 0인지를 확인합니다.

만약 인증서가 존재하지 않으면, `RTCPeerConnection.generateCertificate()`가 호출되어 신규 인증서를 만들어냅니다. 여기에 fulfillment 핸들러를 제공해서 새로 만들어진 인증서를 포함하는 배열을 현재 설정에 추가하고, `setConfiguration()`에 전달해서 연결에 인증서를 추가합니다.

명세
--

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-rtcpeerconnection-getconfiguration |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* `RTCPeerConnection.setConfiguration()`
* `RTCConfiguration`
* `RTCPeerConnection` (en-US)
RTCPeerConnection.createAnswer()
================================

`RTCPeerConnection` (en-US) 인터페이스의 **`createAnswer()`** 메소드는 WebRTC 연결 중 발생하는 offer/answer 네고시에이션에서 원격 유저로부터 받은 offer에 대한 SDP answer를 생성합니다. 이 answer는 세션이 이미 부착된 미디어, 브라우저에서 지원하는 코덱 및 옵션, 그리고 이미 수집된 ICE candidate에 대한 정보를 담고 잇습니다. Answer는 반환 된 `Promise`에 전달되고, 그 다음에는 네고시에이션 과정을 계속 진행하기 위해서 offer의 소스에게 전달되야합니다.

Syntax
------


```js
aPromise = RTCPeerConnection.createAnswer([options]);

RTCPeerConnection.createAnswer(successCallback, failureCallback[, options]);
```

### 매개 변수

`options` Optional

Answer를 커스터마이즈 할 수 있는 옵션을 설정하는 객체입니다. 설정 가능한 옵션은 `RTCAnswerOptions` (en-US) 딕셔너리에 기반합니다.

### 더 이상 사용되지 않는 매개 변수

이전 버전의 문서에서는 이 함수를 콜백 기반으로 사용하도록 되어있습니다. 콜백 기반 함수는 이제 더 이상 사용되지 않으며, **사용하지 않는 것을 권장**합니다. 이미 사용 중이라면, `Promise` 버전인 `createAnswer()`를 사용하도록 코드를 업데이트 하십시오. 이전 버전의 코드를 업데이트 하는 것을 쉽게 하기 위해 고안된 `createAnswer()`의 특정 변수에 대해 아래에서 설명합니다.

`successCallback` 
지원이 중단되었습니다

신규 생성된 answer를 설명하는 단일 `RTCSessionDescription` (en-US) 객체에 전달되는 `RTCSessionDescriptionCallback` 입니다.

`failureCallback` 
지원이 중단되었습니다

왜 answer를 생성하는 요청이 실패했는지를 설명해주는 단일 `DOMException` (en-US) 객체에 전달되는 `RTCPeerConnectionErrorCallback` 입니다.

`options` Optional

Answer를 위해 요청된 옵션을 제공하는 `RTCOfferOptions` (en-US) 객체입니다.

### 예외처리

`NotReadableError`

아이덴티티 제공자가 아이덴티티 주장을 제공 할 수 없음을 알려줍니다.

`OperationError`

SDP 생성이 어떤 이유로 실패했음을 알려줍니다. 이는 일반적인 failure catch-all exception 입니다.

### 반환 값

다른 유저에게 전달되는 SDP answer를 가진 `RTCSessionDescriptionInit` 딕셔너리에 준수하는 객체와 함께 호출되는 fulfillment 핸들러인 `Promise` 입니다.

예시
--

아래는 Signaling and video calling 문서에서 나오는 코드의 일부입니다. 이 코드는 시그널링 채널을 통해 다른 유저에게 offer는 전달하는 메세지를 다루는 핸들러에서 나옵니다.

**참고:** 주의 할 점은 이것이 시그널링 과정의 일부이며, 전송계층 구현에 대한 세부사항은 전적으로 개발자에게 달려있다는 것 입니다. 여기서는 WebSocket (en-US) 연결을 사용해서 다른 유저에게 "video-answer" 값이 있는 `type` 필드 및 offer를 보낸 장치에게 전달 할 answer를 담은 JSON 메세지를 보냅니다. 프로미스 fulfillment 핸들러의 다른 모든 항목들과 함께 `sendToServer()`함수로 전달되는 객체의 내용을 어떻게 할 지는 개발자의 디자인에 달려잇습니다.


```js
pc.createAnswer()
  .then(function (answer) {
    return pc.setLocalDescription(answer);
  })
  .then(function () {
    // Send the answer to the remote peer through the signaling server.
  })
  .catch(handleGetUserMediaError);
```


위의 예제는 `RTCPeerConnection` (en-US)가 신규 answer를 만들고 반환하도록 요청합니다. 프로미스 핸들러에 반환된 answer는 `setLocalDescription()` 호출에 의해 연결의 로컬 엔드에 대한 description으로 설정됩니다.

이 과정이 성공하면, answer는 적당한 아무 프로토콜을 사용해서 시그널링 서버에 전달됩니다. 그리고 `Promise.catch()` (en-US)는 에러를 잡아내고 처리하기 위해 사용됩니다.

Handling the invitation를 확인해서 전체 코드를 확인해보십시오. 이 문서를 보면 시그널링 과정 및 answer가 어떻게 작동하는지를 이해 할 수 있습니다.

명세
--

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-rtcpeerconnection-createanswer |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
RTCPeerConnection.currentRemoteDescription
==========================================

읽기 속성인 `RTCPeerConnection.currentRemoteDescription`은 마지막 `RTCPeerConnection` (en-US) 이후 가장 최근에 원격 유저와의 네고시에이션 및 연결을 성공적으로 마친 연결의 원격 엔드 포인트를 알려주는 `RTCSessionDescription` (en-US) 객체를 반환합니다. 추가적으로 이 속성은 description에 의해 표현되는 마지막 offer 및 answer가 처음 시작되면 ICE 에이전트에 의해 생성이 되었을 수도 있는 모든 ICE candidate들의 리스트를 포함합니다.

`currentRemoteDescription`를 바꾸기 위해서는, `RTCPeerConnection.setRemoteDescription()` (en-US)를 호출해서 이 값이 설정되도록 만들어주는 연속된 이벤트를 활성화하십시오. 왜 바꾸는 것이 바로 적용이 안되는지 및 어떻게 작동하는지 더 자세히 알고 싶다면, Pending and current descriptions (en-US) 를 참조하십시오.

**참고:** `RTCPeerConnection.remoteDescription` (en-US)와 다르게, 이 값은 연결의 로컬 엔드 포인트에 대한 실제 현재 상태를 보여줍니다. `remoteDescription`은 연결이 현재 어느 상태로 바뀌는지에 대한 설명도 명시 할 수 있습니다.

Syntax
------


```js
sessionDescription = RTCPeerConnection.currentRemoteDescription;
```

### 반환 값

설정이 되어있다면, 연결의 원격 엔드포인트에 대한 현재 설명을 반환합니다. 설정되어있지않으면, 이 값은 `null`입니다.

예시
--

아래 예제는 `currentRemoteDescription` 를 확인하고 객체의 `type` 및 `sdp` 필드를 경고로 띄워줍니다.


```js
const pc = new RTCPeerConnection();
// ...
const sd = pc.currentRemoteDescription;
if (sd) {
  alert(`Local session: type='${sd.type}'; sdp description='${sd.sdp}'`);
} else {
  alert("No local session yet.");
}
```

명세
--

| Specification |
| --- |
| WebRTC: Real-Time Communication in Browsers # dom-peerconnection-currentremotedesc |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

참조
--

* `RTCPeerConnection.setRemoteDescription()` (en-US), `RTCPeerConnection.pendingRemoteDescription` (en-US), `RTCPeerConnection.remoteDescription` (en-US)
* `RTCPeerConnection.setRemoteDescription()` (en-US), `RTCPeerConnection.remoteDescription` (en-US), `RTCPeerConnection.pendingRemoteDescription` (en-US), `RTCPeerConnection.currentRemoteDescription`
* WebRTC