WebRTCPeerConnection.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <class name="WebRTCPeerConnection" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
  3. <brief_description>
  4. Interface to a WebRTC peer connection.
  5. </brief_description>
  6. <description>
  7. A WebRTC connection between the local computer and a remote peer. Provides an interface to connect, maintain, and monitor the connection.
  8. Setting up a WebRTC connection between two peers may not seem a trivial task, but it can be broken down into 3 main steps:
  9. - The peer that wants to initiate the connection ([code]A[/code] from now on) creates an offer and sends it to the other peer ([code]B[/code] from now on).
  10. - [code]B[/code] receives the offer, generates an answer, and sends it to [code]A[/code].
  11. - [code]A[/code] and [code]B[/code] then generate and exchange ICE candidates with each other.
  12. After these steps, the connection should be established. Refer to the linked tutorials for details.
  13. </description>
  14. <tutorials>
  15. <link title="WebRTC documentation">$DOCS_URL/tutorials/networking/webrtc.html</link>
  16. <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link>
  17. </tutorials>
  18. <methods>
  19. <method name="add_ice_candidate">
  20. <return type="int" enum="Error" />
  21. <param index="0" name="media" type="String" />
  22. <param index="1" name="index" type="int" />
  23. <param index="2" name="name" type="String" />
  24. <description>
  25. Add an ice candidate generated by a remote peer (and received over the signaling server). See [signal ice_candidate_created].
  26. </description>
  27. </method>
  28. <method name="close">
  29. <return type="void" />
  30. <description>
  31. Close the peer connection and all data channels associated with it.
  32. [b]Note:[/b] You cannot reuse this object for a new connection unless you call [method initialize].
  33. </description>
  34. </method>
  35. <method name="create_data_channel">
  36. <return type="WebRTCDataChannel" />
  37. <param index="0" name="label" type="String" />
  38. <param index="1" name="options" type="Dictionary" default="{}" />
  39. <description>
  40. Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with given [param label] and optionally configured via the [param options] dictionary. This method can only be called when the connection is in state [constant STATE_NEW].
  41. There are two ways to create a working data channel: either call [method create_data_channel] on only one of the peer and listen to [signal data_channel_received] on the other, or call [method create_data_channel] on both peers, with the same values, and the [code]"negotiated"[/code] option set to [code]true[/code].
  42. Valid [param options] are:
  43. [codeblock]
  44. {
  45. "negotiated": true, # When set to true (default off), means the channel is negotiated out of band. "id" must be set too. "data_channel_received" will not be called.
  46. "id": 1, # When "negotiated" is true this value must also be set to the same value on both peer.
  47. # Only one of maxRetransmits and maxPacketLifeTime can be specified, not both. They make the channel unreliable (but also better at real time).
  48. "maxRetransmits": 1, # Specify the maximum number of attempt the peer will make to retransmits packets if they are not acknowledged.
  49. "maxPacketLifeTime": 100, # Specify the maximum amount of time before giving up retransmitions of unacknowledged packets (in milliseconds).
  50. "ordered": true, # When in unreliable mode (i.e. either "maxRetransmits" or "maxPacketLifetime" is set), "ordered" (true by default) specify if packet ordering is to be enforced.
  51. "protocol": "my-custom-protocol", # A custom sub-protocol string for this channel.
  52. }
  53. [/codeblock]
  54. [b]Note:[/b] You must keep a reference to channels created this way, or it will be closed.
  55. </description>
  56. </method>
  57. <method name="create_offer">
  58. <return type="int" enum="Error" />
  59. <description>
  60. Creates a new SDP offer to start a WebRTC connection with a remote peer. At least one [WebRTCDataChannel] must have been created before calling this method.
  61. If this functions returns [constant OK], [signal session_description_created] will be called when the session is ready to be sent.
  62. </description>
  63. </method>
  64. <method name="get_connection_state" qualifiers="const">
  65. <return type="int" enum="WebRTCPeerConnection.ConnectionState" />
  66. <description>
  67. Returns the connection state.
  68. </description>
  69. </method>
  70. <method name="get_gathering_state" qualifiers="const">
  71. <return type="int" enum="WebRTCPeerConnection.GatheringState" />
  72. <description>
  73. Returns the ICE [enum GatheringState] of the connection. This lets you detect, for example, when collection of ICE candidates has finished.
  74. </description>
  75. </method>
  76. <method name="get_signaling_state" qualifiers="const">
  77. <return type="int" enum="WebRTCPeerConnection.SignalingState" />
  78. <description>
  79. Returns the signaling state on the local end of the connection while connecting or reconnecting to another peer.
  80. </description>
  81. </method>
  82. <method name="initialize">
  83. <return type="int" enum="Error" />
  84. <param index="0" name="configuration" type="Dictionary" default="{}" />
  85. <description>
  86. Re-initialize this peer connection, closing any previously active connection, and going back to state [constant STATE_NEW]. A dictionary of [param configuration] options can be passed to configure the peer connection.
  87. Valid [param configuration] options are:
  88. [codeblock]
  89. {
  90. "iceServers": [
  91. {
  92. "urls": [ "stun:stun.example.com:3478" ], # One or more STUN servers.
  93. },
  94. {
  95. "urls": [ "turn:turn.example.com:3478" ], # One or more TURN servers.
  96. "username": "a_username", # Optional username for the TURN server.
  97. "credential": "a_password", # Optional password for the TURN server.
  98. }
  99. ]
  100. }
  101. [/codeblock]
  102. </description>
  103. </method>
  104. <method name="poll">
  105. <return type="int" enum="Error" />
  106. <description>
  107. Call this method frequently (e.g. in [method Node._process] or [method Node._physics_process]) to properly receive signals.
  108. </description>
  109. </method>
  110. <method name="set_default_extension" qualifiers="static">
  111. <return type="void" />
  112. <param index="0" name="extension_class" type="StringName" />
  113. <description>
  114. Sets the [param extension_class] as the default [WebRTCPeerConnectionExtension] returned when creating a new [WebRTCPeerConnection].
  115. </description>
  116. </method>
  117. <method name="set_local_description">
  118. <return type="int" enum="Error" />
  119. <param index="0" name="type" type="String" />
  120. <param index="1" name="sdp" type="String" />
  121. <description>
  122. Sets the SDP description of the local peer. This should be called in response to [signal session_description_created].
  123. After calling this function the peer will start emitting [signal ice_candidate_created] (unless an [enum Error] different from [constant OK] is returned).
  124. </description>
  125. </method>
  126. <method name="set_remote_description">
  127. <return type="int" enum="Error" />
  128. <param index="0" name="type" type="String" />
  129. <param index="1" name="sdp" type="String" />
  130. <description>
  131. Sets the SDP description of the remote peer. This should be called with the values generated by a remote peer and received over the signaling server.
  132. If [param type] is [code]"offer"[/code] the peer will emit [signal session_description_created] with the appropriate answer.
  133. If [param type] is [code]"answer"[/code] the peer will start emitting [signal ice_candidate_created].
  134. </description>
  135. </method>
  136. </methods>
  137. <signals>
  138. <signal name="data_channel_received">
  139. <param index="0" name="channel" type="WebRTCDataChannel" />
  140. <description>
  141. Emitted when a new in-band channel is received, i.e. when the channel was created with [code]negotiated: false[/code] (default).
  142. The object will be an instance of [WebRTCDataChannel]. You must keep a reference of it or it will be closed automatically. See [method create_data_channel].
  143. </description>
  144. </signal>
  145. <signal name="ice_candidate_created">
  146. <param index="0" name="media" type="String" />
  147. <param index="1" name="index" type="int" />
  148. <param index="2" name="name" type="String" />
  149. <description>
  150. Emitted when a new ICE candidate has been created. The three parameters are meant to be passed to the remote peer over the signaling server.
  151. </description>
  152. </signal>
  153. <signal name="session_description_created">
  154. <param index="0" name="type" type="String" />
  155. <param index="1" name="sdp" type="String" />
  156. <description>
  157. Emitted after a successful call to [method create_offer] or [method set_remote_description] (when it generates an answer). The parameters are meant to be passed to [method set_local_description] on this object, and sent to the remote peer over the signaling server.
  158. </description>
  159. </signal>
  160. </signals>
  161. <constants>
  162. <constant name="STATE_NEW" value="0" enum="ConnectionState">
  163. The connection is new, data channels and an offer can be created in this state.
  164. </constant>
  165. <constant name="STATE_CONNECTING" value="1" enum="ConnectionState">
  166. The peer is connecting, ICE is in progress, none of the transports has failed.
  167. </constant>
  168. <constant name="STATE_CONNECTED" value="2" enum="ConnectionState">
  169. The peer is connected, all ICE transports are connected.
  170. </constant>
  171. <constant name="STATE_DISCONNECTED" value="3" enum="ConnectionState">
  172. At least one ICE transport is disconnected.
  173. </constant>
  174. <constant name="STATE_FAILED" value="4" enum="ConnectionState">
  175. One or more of the ICE transports failed.
  176. </constant>
  177. <constant name="STATE_CLOSED" value="5" enum="ConnectionState">
  178. The peer connection is closed (after calling [method close] for example).
  179. </constant>
  180. <constant name="GATHERING_STATE_NEW" value="0" enum="GatheringState">
  181. The peer connection was just created and hasn't done any networking yet.
  182. </constant>
  183. <constant name="GATHERING_STATE_GATHERING" value="1" enum="GatheringState">
  184. The ICE agent is in the process of gathering candidates for the connection.
  185. </constant>
  186. <constant name="GATHERING_STATE_COMPLETE" value="2" enum="GatheringState">
  187. The ICE agent has finished gathering candidates. If something happens that requires collecting new candidates, such as a new interface being added or the addition of a new ICE server, the state will revert to gathering to gather those candidates.
  188. </constant>
  189. <constant name="SIGNALING_STATE_STABLE" value="0" enum="SignalingState">
  190. There is no ongoing exchange of offer and answer underway. This may mean that the [WebRTCPeerConnection] is new ([constant STATE_NEW]) or that negotiation is complete and a connection has been established ([constant STATE_CONNECTED]).
  191. </constant>
  192. <constant name="SIGNALING_STATE_HAVE_LOCAL_OFFER" value="1" enum="SignalingState">
  193. The local peer has called [method set_local_description], passing in SDP representing an offer (usually created by calling [method create_offer]), and the offer has been applied successfully.
  194. </constant>
  195. <constant name="SIGNALING_STATE_HAVE_REMOTE_OFFER" value="2" enum="SignalingState">
  196. The remote peer has created an offer and used the signaling server to deliver it to the local peer, which has set the offer as the remote description by calling [method set_remote_description].
  197. </constant>
  198. <constant name="SIGNALING_STATE_HAVE_LOCAL_PRANSWER" value="3" enum="SignalingState">
  199. The offer sent by the remote peer has been applied and an answer has been created and applied by calling [method set_local_description]. This provisional answer describes the supported media formats and so forth, but may not have a complete set of ICE candidates included. Further candidates will be delivered separately later.
  200. </constant>
  201. <constant name="SIGNALING_STATE_HAVE_REMOTE_PRANSWER" value="4" enum="SignalingState">
  202. A provisional answer has been received and successfully applied in response to an offer previously sent and established by calling [method set_local_description].
  203. </constant>
  204. <constant name="SIGNALING_STATE_CLOSED" value="5" enum="SignalingState">
  205. The [WebRTCPeerConnection] has been closed.
  206. </constant>
  207. </constants>
  208. </class>