WebRTCPeerConnection.xml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <class name="WebRTCPeerConnection" inherits="Reference" version="4.0">
  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 from now on) 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 send it to the other peer ([code]B[/code] from now on).
  10. - [code]B[/code] receives the offer, generate and answer, and sends it to [code]A[/code]).
  11. - [code]A[/code] and [code]B[/code] then generates and exchange ICE candidates with each other.
  12. After these steps, the connection should become connected. Keep on reading or look into the tutorial for more information.
  13. </description>
  14. <tutorials>
  15. </tutorials>
  16. <methods>
  17. <method name="add_ice_candidate">
  18. <return type="int" enum="Error">
  19. </return>
  20. <argument index="0" name="media" type="String">
  21. </argument>
  22. <argument index="1" name="index" type="int">
  23. </argument>
  24. <argument index="2" name="name" type="String">
  25. </argument>
  26. <description>
  27. Add an ice candidate generated by a remote peer (and received over the signaling server). See [signal ice_candidate_created].
  28. </description>
  29. </method>
  30. <method name="close">
  31. <return type="void">
  32. </return>
  33. <description>
  34. Close the peer connection and all data channels associated with it. Note, you cannot reuse this object for a new connection unless you call [method initialize].
  35. </description>
  36. </method>
  37. <method name="create_data_channel">
  38. <return type="WebRTCDataChannel">
  39. </return>
  40. <argument index="0" name="label" type="String">
  41. </argument>
  42. <argument index="1" name="options" type="Dictionary" default="{
  43. }">
  44. </argument>
  45. <description>
  46. Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with given [code]label[/code] and optionally configured via the [code]options[/code] dictionary. This method can only be called when the connection is in state [constant STATE_NEW].
  47. 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].
  48. Valid [code]options[/code] are:
  49. [codeblock]
  50. {
  51. "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.
  52. "id": 1, # When "negotiated" is true this value must also be set to the same value on both peer.
  53. # Only one of maxRetransmits and maxPacketLifeTime can be specified, not both. They make the channel unreliable (but also better at real time).
  54. "maxRetransmits": 1, # Specify the maximum number of attempt the peer will make to retransmits packets if they are not acknowledged.
  55. "maxPacketLifeTime": 100, # Specify the maximum amount of time before giving up retransmitions of unacknowledged packets (in milliseconds).
  56. "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.
  57. "protocol": "my-custom-protocol", # A custom sub-protocol string for this channel.
  58. }
  59. [/codeblock]
  60. [b]Note:[/b] You must keep a reference to channels created this way, or it will be closed.
  61. </description>
  62. </method>
  63. <method name="create_offer">
  64. <return type="int" enum="Error">
  65. </return>
  66. <description>
  67. 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.
  68. If this functions returns [constant OK], [signal session_description_created] will be called when the session is ready to be sent.
  69. </description>
  70. </method>
  71. <method name="get_connection_state" qualifiers="const">
  72. <return type="int" enum="WebRTCPeerConnection.ConnectionState">
  73. </return>
  74. <description>
  75. Returns the connection state. See [enum ConnectionState].
  76. </description>
  77. </method>
  78. <method name="initialize">
  79. <return type="int" enum="Error">
  80. </return>
  81. <argument index="0" name="configuration" type="Dictionary" default="{
  82. }">
  83. </argument>
  84. <description>
  85. Re-initialize this peer connection, closing any previously active connection, and going back to state [constant STATE_NEW]. A dictionary of [code]options[/code] can be passed to configure the peer connection.
  86. Valid [code]options[/code] are:
  87. [codeblock]
  88. {
  89. "iceServers": [
  90. {
  91. "urls": [ "stun:stun.example.com:3478" ], # One or more STUN servers.
  92. },
  93. {
  94. "urls": [ "turn:turn.example.com:3478" ], # One or more TURN servers.
  95. "username": "a_username", # Optional username for the TURN server.
  96. "credential": "a_password", # Optional password for the TURN server.
  97. }
  98. ]
  99. }
  100. [/codeblock]
  101. </description>
  102. </method>
  103. <method name="poll">
  104. <return type="int" enum="Error">
  105. </return>
  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_local_description">
  111. <return type="int" enum="Error">
  112. </return>
  113. <argument index="0" name="type" type="String">
  114. </argument>
  115. <argument index="1" name="sdp" type="String">
  116. </argument>
  117. <description>
  118. Sets the SDP description of the local peer. This should be called in response to [signal session_description_created].
  119. After calling this function the peer will start emitting [signal ice_candidate_created] (unless an [enum Error] different from [constant OK] is returned).
  120. </description>
  121. </method>
  122. <method name="set_remote_description">
  123. <return type="int" enum="Error">
  124. </return>
  125. <argument index="0" name="type" type="String">
  126. </argument>
  127. <argument index="1" name="sdp" type="String">
  128. </argument>
  129. <description>
  130. 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.
  131. If [code]type[/code] is [code]offer[/code] the peer will emit [signal session_description_created] with the appropriate answer.
  132. If [code]type[/code] is [code]answer[/code] the peer will start emitting [signal ice_candidate_created].
  133. </description>
  134. </method>
  135. </methods>
  136. <signals>
  137. <signal name="data_channel_received">
  138. <argument index="0" name="channel" type="Object">
  139. </argument>
  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. <argument index="0" name="media" type="String">
  147. </argument>
  148. <argument index="1" name="index" type="int">
  149. </argument>
  150. <argument index="2" name="name" type="String">
  151. </argument>
  152. <description>
  153. 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.
  154. </description>
  155. </signal>
  156. <signal name="session_description_created">
  157. <argument index="0" name="type" type="String">
  158. </argument>
  159. <argument index="1" name="sdp" type="String">
  160. </argument>
  161. <description>
  162. 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.
  163. </description>
  164. </signal>
  165. </signals>
  166. <constants>
  167. <constant name="STATE_NEW" value="0" enum="ConnectionState">
  168. The connection is new, data channels and an offer can be created in this state.
  169. </constant>
  170. <constant name="STATE_CONNECTING" value="1" enum="ConnectionState">
  171. The peer is connecting, ICE is in progress, none of the transports has failed.
  172. </constant>
  173. <constant name="STATE_CONNECTED" value="2" enum="ConnectionState">
  174. The peer is connected, all ICE transports are connected.
  175. </constant>
  176. <constant name="STATE_DISCONNECTED" value="3" enum="ConnectionState">
  177. At least one ICE transport is disconnected.
  178. </constant>
  179. <constant name="STATE_FAILED" value="4" enum="ConnectionState">
  180. One or more of the ICE transports failed.
  181. </constant>
  182. <constant name="STATE_CLOSED" value="5" enum="ConnectionState">
  183. The peer connection is closed (after calling [method close] for example).
  184. </constant>
  185. </constants>
  186. </class>