aboutsummaryrefslogtreecommitdiff
path: root/files/ko/web/api/rtcpeerconnection/setlocaldescription/index.html
blob: 41430c7267c957df932d16ce9addc21f4d7849c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
---
title: RTCPeerConnection.setLocalDescription()
slug: Web/API/RTCPeerConnection/setLocalDescription
translation_of: Web/API/RTCPeerConnection/setLocalDescription
---
<p>{{APIRef("WebRTC")}}{{SeeCompatTable}}</p>

<p><span class="seoSummary"><code><strong>RTCPeerConnection.setLocalDescription()</strong></code> 메소드는 연결 인터페이스와 관련이 있는 로컬 설명 (local description)을 변경합니다. 로컬 설명은 미디어 형식을 포함하는 연결의 로컬 엔드에 대한 속성을 명시합니다.</span></p>

<p>이 메소드는 세션 설명 (session description)을 단일 매개변수로 가지며, 설명이 비동기적으로 변하게되면 fulfilled되는 {{jsxref("Promise")}}를 반환합니다.</p>

<p>연결이 이미 되어있는데 <code>setLocalDescription()</code>가 호출된다면, 이는 재협상이 진행 중이라는 뜻입니다 (아마도 네트워크 환경이 바뀐 것에 대응하기 위함일 것입니다). 두명의 피어가 설정 값에 모두 동의해야지만 설명이 교환되기 때문에, <code>setLocalDescription()</code>의 호출로 전송된 설명은 즉시 사용되지 못합니다. 대신 협상이 완료되는 순간까지는 기존 연결 설정대로 작동 하게 됩니다. 그러다가 협상이 완료된 다음에서야 신규 설정이 사용됩니다.</p>

<h2 id="Syntax">Syntax</h2>

<pre class="syntaxbox notranslate">aPromise = <em>RTCPeerConnection</em>.setLocalDescription(<em>sessionDescription</em>);

<em>pc</em>.setLocalDescription(<em>sessionDescription</em>, <em>successCallback</em>, <em>errorCallback</em>); {{deprecated_inline}}
</pre>

<h3 id="매개_변수">매개 변수</h3>

<dl>
 <dt><code>sessionDescription</code></dt>
 <dd>연결의 로컬 엔드에 적용시킬 설정 값을 지정하는 {{domxref("RTCSessionDescriptionInit")}} 혹은 {{domxref("RTCSessionDescription")}}입니다.</dd>
</dl>

<h4 id="세션_설명_매개_변수에_대한_설명">세션 설명 매개 변수에 대한 설명</h4>

<p><code>sessionDescription</code> 매개 변수는 일단 기술적으로는 <code>RTCSessionDescriptionInit</code>의 타입입니다. 하지만, {{domxref("RTCSessionDescription")}}<code>RTCSessionDescriptionInit</code>와 구별이 불가능하도록 직렬화 (serialize)하기 때문에, <code>RTCSessionDescription</code>를 전달 할 수도 있습니다. 이 말은 코드가 다음과 같이 간단해질 수 있다는 뜻입니다:</p>

<pre class="brush: js notranslate">myPeerConnection.createOffer().then(function(offer) {
  return myPeerConnection.setLocalDescription(new RTCSessionDescription(offer));
});
</pre>

<p>위 코드를 아래와 같이 간단하게 사용이 가능해집니다:</p>

<pre class="brush: js notranslate">myPeerConnection.createOffer().then(myPeerConnection.setLocalDescription);</pre>

<p>이러한 이유로, {{domxref("RTCSessionDescription.RTCSessionDescription", "RTCSessionDescription()")}} 생성자는 더 이상 사용되지 않습니다.</p>

<h3 id="반환_값">반환 값</h3>

<p>{{domxref("RTCPeerConnection.localDescription")}}의 값이 성공적으로 바뀌거나 혹은 변환이 불가능한 경우 거절되면 fulfill 되는 {{jsxref("Promise")}}입니다. 거절되는 예로는 명시한 설명이 연결에 존재하는 하나 혹은 양쪽 모두의 피어들과 호환이 불가능하면 발생하기도 합니다. 참고로 프로미스의 fulfillment 핸들러는 입력 매개 변수를 받지 않습니다.</p>

<div class="note">
<p>설명을 바꾸는 과정은 변경이 실패해도 연결 상태를 잃지 않게 보장하도록 WebRTC 레이어에 의해서 처리되는 중간 단계를 거칩니다. 이 과정에 대한 자세한 설명은 {{SectionOnPage("/en-US/docs/Web/API/WebRTC_API/Connectivity", "Pending and current descriptions")}}를 참조하십시오.</p>
</div>

<h3 id="지원이_중단된_매개_변수">지원이 중단된 매개 변수</h3>

<p>이전 버전의 문서에서는 콜백 기반의 함수를 찾을 수 있습니다. 콜백 함수는 지원이 중단되었고, 추후에 삭제 될 예정이기 때문에 <strong>사용하지 않도록 강력히 권장</strong>하고 있습니다. 이미 콜백 함수를 사용 중이라면, {{jsxref("Promise")}} 기반인 <code>setLocalDescription()</code>를 대신 사용하도록 업데이트 해야합니다. 기존 코드 업데이트에 도움을 주기 위해, 아래에서는 이전 버전의 <code>setLocalDescription()</code>에 대한 매개 변수를 설명합니다.</p>

<dl>
 <dt><code>successCallback</code> {{deprecated_inline}}</dt>
 <dd>설명 값이 성공적으로 설정되면 입력 매개 변수 없이 호출되는 자바스크립트 {{jsxref("Function")}}입니다. 여기서, offer가 시그널링 서버를 통해서 원격 유저에게 전송 될 수 있습니다.</dd>
 <dt><code>errorCallback</code> {{deprecated_inline}}</dt>
 <dd>설명 값이 설정이 불가능할 때에 호출되어 <code>RTCPeerConnectionErrorCallback</code> 서명을 확인하는 함수입니다. 여기에는 요청이 왜 실패했는지를 설명하는 {{domxref("DOMException")}} 객체를 전달합니다.</dd>
</dl>

<p>지원이 중단된 위의 메소드는 실제 설정이 바뀌기 전에 바로 반환합니다. 성공하면 <code>successCallback</code>가 호출되고, 실패하면 <code>errorCallback</code>가 호출됩니다.</p>

<h3 id="지원이_중단된_예외처리">지원이 중단된 예외처리</h3>

<p>지원이 중단된 콜백버전의 <code>setLocalDescription()</code>를 사용하게되면 아래와 같은 예외들이 발 생 할 수도 있습니다:</p>

<dl>
 <dt><code>InvalidStateError</code> {{deprecated_inline}}</dt>
 <dd>연결의 {{domxref("RTCPeerConnection.signalingState", "signalingState")}}<code>"closed"</code> 상태고, 이는 연결이 현재 열린 상태가 아니여서 협상이 발생할 수 없다는 뜻입니다.</dd>
 <dt><code>InvalidSessionDescriptionError</code> {{deprecated_inline}}</dt>
 <dd><code>sessionDescription</code>에 의해 명시된 {{domxref("RTCSessionDescription")}} 매개 변수가 유효하지 않음을 알려줍니다.</dd>
</dl>

<h2 id="예시">예시</h2>

<p>아래의 예시에서는, {{event("negotiationneeded")}} 이벤트에 대한 핸들러를 구현하였습니다:</p>

<pre class="brush: js notranslate">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);
}</pre>

<p>이 함수는 {{domxref("RTCPeerConnection.createOffer()", "createOffer()")}}를 호출하여 offer를 생성하면서 시작됩니다. 이 과정이 성공하면, <code>setLocalDescription()</code>를 호출합니다. 프로미스에 대한 fulfillment 핸들러는 시그널링 서버를 사용해서 다른 유저에게 신규 생성된 offer를 전송할 수 있게 됩니다.</p>

<h2 id="사양서">사양서</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">사양서</th>
   <th scope="col">상태</th>
   <th scope="col">코멘트</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{ SpecName('WebRTC 1.0', '#widl-RTCPeerConnection-setLocalDescription-void-RTCSessionDescription-description-VoidFunction-successCallback-RTCPeerConnectionErrorCallback-failureCallback', 'RTCPeerConnection.setLocalDescription()') }}</td>
   <td>{{ Spec2('WebRTC 1.0') }}</td>
   <td>Initial specification.</td>
  </tr>
  <tr>
   <td>{{SpecName('WebRTC 1.0', '#widl-RTCPeerConnection-setLocalDescription-Promise-void--RTCSessionDescriptionInit-description', 'RTCPeerConnection.setLocalDescription()')}}</td>
   <td>{{Spec2('WebRTC 1.0')}}</td>
   <td>Initial specification.</td>
  </tr>
 </tbody>
</table>

<h2 id="브라우저_호환성">브라우저 호환성</h2>



<p>{{Compat("api.RTCPeerConnection.setLocalDescription")}}</p>

<h2 id="참조">참조</h2>

<ul>
 <li><a href="/en-US/docs/Web/API/WebRTC_API">WebRTC API</a></li>
</ul>