DataChannel, Track, and WebSocket common APItotal size buffered to sendDataChannel, Track, and WebSocket common extended APItotal size available to receiveDataChannelreturns dc idreturns dc idTrackreturns ws idNote: SCTP settings apply to newly-created PeerConnections only
Types
rtcAvailableCallbackFunc = proc (id: cint; usePtr: pointer)
rtcBufferedAmountLowCallbackFunc = proc (id: cint; usePtr: pointer)
rtcCandidateCallbackFunc = proc (pc: cint; cand: cstring; mid: cstring; usePtr: pointer)
RtcCertificateType {.size: 4.} = enum RTC_CERTIFICATE_DEFAULT = 0, ## ECDSA RTC_CERTIFICATE_ECDSA = 1, RTC_CERTIFICATE_RSA = 2
rtcClosedCallbackFunc = proc (id: cint; usePtr: pointer)
RtcCodec {.size: 4.} = enum RTC_CODEC_H264 = 0, RTC_CODEC_VP8 = 1, RTC_CODEC_VP9 = 2, RTC_CODEC_OPUS = 128
rtcConfiguration {.header: "libdatachannel/rtc.h", bycopy, bycopy.} = object iceServers*: cstringArray iceServersCount*: cint bindAddress*: cstring ## libjuice only, NULL means any certificateType*: RtcCertificateType iceTransportPolicy*: RtcTransportPolicy enableIceTcp*: bool disableAutoNegotiation*: bool portRangeBegin*: uint16 ## 0 means automatic portRangeEnd*: uint16 ## 0 means automatic mtu*: cint ## <= 0 means automatic maxMessageSize*: cint ## <= 0 means default
rtcDataChannelCallbackFunc = proc (pc: cint; dc: cint; usePtr: pointer)
RTCDataChannelInit {.bycopy.} = object reliability*: RTCReliability protocol*: cstring ## empty string if NULL negotiated*: bool manualStream*: bool stream*: uint16 ## numeric ID 0-65534, ignored if manualStream is false
rtcDescriptionCallbackFunc = proc (pc: cint; sdp: cstring; type: cstring; usePtr: pointer)
RtcDirection {.size: 4.} = enum RTC_DIRECTION_UNKNOWN = 0, RTC_DIRECTION_SENDONLY = 1, RTC_DIRECTION_RECVONLY = 2, RTC_DIRECTION_SENDRECV = 3, RTC_DIRECTION_INACTIVE = 4
rtcErrorCallbackFunc = proc (id: cint; error: cstring; usePtr: pointer)
rtcGatheringState {.size: 4.} = enum RTC_GATHERING_NEW = 0, RTC_GATHERING_INPROGRESS = 1, RTC_GATHERING_COMPLETE = 2
rtcGatheringStateCallbackFunc = proc (pc: cint; state: rtcGatheringState; usePtr: pointer)
rtcLogCallbackFunc = proc (level: RTCLogLevel; message: cstring)
RTCLogLevel {.size: 4.} = enum LogNone = 0, LogFatal = 1, LogError = 2, LogWarning = 3, LogInfo = 4, LogDebug = 5, LogVerbose = 6
rtcMessageCallbackFunc = proc (id: cint; message: cstring; size: cint; usePtr: pointer)
RTCNalUnitSeparator = enum RTC_NAL_SEPARATOR_LENGTH = 0, ## first 4 bytes are NAL unit length RTC_NAL_SEPARATOR_LONG_START_SEQUENCE = 1, ## 0x00, 0x00, 0x00, 0x01 RTC_NAL_SEPARATOR_SHORT_START_SEQUENCE = 2, ## 0x00, 0x00, 0x01 RTC_NAL_SEPARATOR_START_SEQUENCE = 3 ## long or short start sequence
rtcOpenCallbackFunc = proc (id: cint; usePtr: pointer)
RTCPacketizationHandlerInit {.bycopy.} = object ssrc*: uint32 cname*: cstring payloadType*: uint8 clockRate*: uint32 sequenceNumber*: uint16 timestamp*: uint32 ## H264 nalSeparator*: RTCNalUnitSeparator ## NAL unit separator maxFragmentSize*: uint16 ## Maximum NAL unit fragment size
RTCReliability {.bycopy.} = object unordered*: bool unreliable*: bool maxPacketLifeTime*: cint ## ignored if reliable maxRetransmits*: cint ## ignored if reliable
RTCSctpSettings {.bycopy.} = object recvBufferSize*: cint ## in bytes, <= 0 means optimized default sendBufferSize*: cint ## in bytes, <= 0 means optimized default maxChunksOnQueue*: cint ## in chunks, <= 0 means optimized default initialCongestionWindow*: cint ## in MTUs, <= 0 means optimized default maxBurst*: cint ## in MTUs, 0 means optimized default, < 0 means disabled congestionControlModule*: cint ## 0: RFC2581 (default), 1: HSTCP, 2: H-TCP, 3: RTCC delayedSackTimeMs*: cint ## in msecs, 0 means optimized default, < 0 means disabled minRetransmitTimeoutMs*: cint ## in msecs, <= 0 means optimized default maxRetransmitTimeoutMs*: cint ## in msecs, <= 0 means optimized default initialRetransmitTimeoutMs*: cint ## in msecs, <= 0 means optimized default maxRetransmitAttempts*: cint ## number of retransmissions, <= 0 means optimized default heartbeatIntervalMs*: cint ## in msecs, <= 0 means optimized default
rtcSignalingState {.size: 4.} = enum RTC_SIGNALING_STABLE = 0, RTC_SIGNALING_HAVE_LOCAL_OFFER = 1, RTC_SIGNALING_HAVE_REMOTE_OFFER = 2, RTC_SIGNALING_HAVE_LOCAL_PRANSWER = 3, RTC_SIGNALING_HAVE_REMOTE_PRANSWER = 4
rtcSignalingStateCallbackFunc = proc (pc: cint; state: rtcSignalingState; usePtr: pointer)
RTCSsrcForTypeInit {.bycopy.} = object ssrc*: uint32 name*: cstring ## optional msid*: cstring ## optional trackId*: cstring ## optional, track ID used in MSID
RTCStartTime {.bycopy.} = object seconds*: cdouble ## Start time in seconds since1970*: bool ## true if seconds since 1970 ## false if seconds since 1900 timestamp*: uint32 ## Start timestamp
rtcState {.size: 4.} = enum RTC_NEW = 0, RTC_CONNECTING = 1, RTC_CONNECTED = 2, RTC_DISCONNECTED = 3, RTC_FAILED = 4, RTC_CLOSED = 5
rtcStateChangeCallbackFunc = proc (pc: cint; state: rtcState; usePtr: pointer)
rtcTrackCallbackFunc = proc (pc: cint; tr: cint; usePtr: pointer)
RTCTrackInit {.bycopy.} = object direction*: RtcDirection codec*: RtcCodec payloadType*: cint ssrc*: uint32 mid*: cstring name*: cstring ## optional msid*: cstring ## optional trackId*: cstring ## optional, track ID used in MSID
RtcTransportPolicy {.size: 4.} = enum RTC_TRANSPORT_POLICY_ALL = 0, RTC_TRANSPORT_POLICY_RELAY = 1
RTCWebSocketClientCallbackFunc = proc (wsserver: cint; ws: cint; usePtr: pointer) {. cdecl.}
rtcWsConfiguration = object disableTlsVerification*: bool ## if true, don't verify the TLS certificate
rtcWsServerConfiguration = object port*: uint16 ## 0 means automatic selection enableTls*: bool ## if true, enable TLS (WSS) certificatePemFile*: cstring ## NULL for autogenerated certificate keyPemFile*: cstring ## NULL for autogenerated certificate keyPemPass*: cstring ## NULL if no pass
Consts
libdatachannel_dll = "libdatachannel.so"
RTC_DEFAULT_MAXIMUM_FRAGMENT_SIZE = 1220'u
RTC_DEFAULT_MTU = 1280
RTC_ENABLE_MEDIA {.booldefine.} = true
RTC_ENABLE_WEBSOCKET {.booldefine.} = true
RTC_ERR_FAILURE = -2
RTC_ERR_INVALID = -1
RTC_ERR_NOT_AVAIL = -3
RTC_ERR_SUCCESS = 0
RTC_ERR_TOO_SMALL = -4
Procs
proc rtcAddRemoteCandidate(pc: cint; cand: cstring; mid: cstring): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcAddTrack(pc: cint; mediaDescriptionSdp: cstring): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcAddTrackEx(pc: cint; init: ptr RTCTrackInit): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcChainRtcpNackResponder(tr: cint; maxStoredPacketsCount: cuint): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Chain RtcpNackResponder to handler chain for given track
proc rtcChainRtcpSrReporter(tr: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Chain RtcpSrReporter to handler chain for given track
proc rtcCleanup() {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcClosePeerConnection(pc: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcCreateDataChannel(pc: cint; label: cstring): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcCreateDataChannelEx(pc: cint; label: cstring; init: ptr RTCDataChannelInit): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcCreatePeerConnection(config: ptr rtcConfiguration): cint {.importc, ...raises: [], tags: [], forbids: [].}
- returns pc id
proc rtcCreateWebSocket(url: cstring): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcCreateWebSocketEx(url: cstring; config: ptr rtcWsConfiguration): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcCreateWebSocketServer(config: ptr rtcWsServerConfiguration; cb: RTCWebSocketClientCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcDeleteDataChannel(dc: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcDeletePeerConnection(pc: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcDeleteTrack(tr: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcDeleteWebSocket(ws: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcDeleteWebSocketServer(wsserver: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetAvailableAmount(id: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetBufferedAmount(id: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetCNameForSsrc(tr: cint; ssrc: uint32; cname: cstring; cnameSize: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Get CName for SSRC
proc rtcGetCurrentTrackTimestamp(id: cint; timestamp: ptr uint32): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Get current timestamp, result is written to timestamp
proc rtcGetDataChannelLabel(dc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetDataChannelProtocol(dc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetDataChannelReliability(dc: cint; reliability: ptr RTCReliability): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetDataChannelStream(dc: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetLocalAddress(pc: cint; buffer: cstring; size: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetLocalDescription(pc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetLocalDescriptionType(pc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetPreviousTrackSenderReportTimestamp(id: cint; timestamp: ptr uint32): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Get timestamp of previous RTCP SR, result is written to timestamp
proc rtcGetRemoteAddress(pc: cint; buffer: cstring; size: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetRemoteDescription(pc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetRemoteDescriptionType(pc: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetSelectedCandidatePair(pc: cint; local: cstring; localSize: cint; remote: cstring; remoteSize: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetSsrcsForTrack(tr: cint; buffer: ptr uint32; count: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Get all SSRCs for given track
proc rtcGetSsrcsForType(mediaType: cstring; sdp: cstring; buffer: ptr uint32; bufferSize: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Get all SSRCs for given media type in given SDP
proc rtcGetTrackDescription(tr: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetTrackPayloadTypesForCodec(tr: cint; ccodec: cstring; buffer: ptr cint; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Get all available payload types for given codec and stores them in buffer, does nothing if buffer is NULL
proc rtcGetTrackStartTimestamp(id: cint; timestamp: ptr uint32): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Get start timestamp for track identified by given id, result is written to timestamp
proc rtcGetUserPointer(i: cint): pointer {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetWebSocketPath(ws: cint; buffer: cstring; size: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetWebSocketRemoteAddress(ws: cint; buffer: cstring; size: cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcGetWebSocketServerPort(wsserver: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcInitLogger(level: RTCLogLevel; cb: rtcLogCallbackFunc) {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcIsClosed(id: cint): bool {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcIsOpen(id: cint): bool {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcPreload() {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcReceiveMessage(id: cint; buffer: cstring; size: ptr cint): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSendMessage(id: cint; data: cstring; size: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetAvailableCallback(id: cint; cb: rtcAvailableCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetBufferedAmountLowCallback(id: cint; cb: rtcBufferedAmountLowCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetBufferedAmountLowThreshold(id: cint; amount: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetClosedCallback(id: cint; cb: rtcClosedCallbackFunc): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetDataChannelCallback(pc: cint; cb: rtcDataChannelCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetErrorCallback(id: cint; cb: rtcErrorCallbackFunc): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetGatheringStateChangeCallback(pc: cint; cb: rtcGatheringStateCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetH264PacketizationHandler(tr: cint; init: ptr RTCPacketizationHandlerInit): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Set H264PacketizationHandler for track
proc rtcSetLocalCandidateCallback(pc: cint; cb: rtcCandidateCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetLocalDescription(pc: cint; type: ptr cstring): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetLocalDescriptionCallback(pc: cint; cb: rtcDescriptionCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetMessageCallback(id: cint; cb: rtcMessageCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetNeedsToSendRtcpSr(id: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Set NeedsToReport flag in RtcpSrReporter handler identified by given track id
proc rtcSetOpenCallback(id: cint; cb: rtcOpenCallbackFunc): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetOpusPacketizationHandler(tr: cint; init: ptr RTCPacketizationHandlerInit): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Set OpusPacketizationHandler for track
proc rtcSetRemoteDescription(pc: cint; sdp: cstring; type: cstring): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetRtpConfigurationStartTime(id: cint; startTime: ptr RTCStartTime): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Set start time for RTP stream
proc rtcSetSctpSettings(settings: ptr RTCSctpSettings): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetSsrcForType(mediaType: cstring; sdp: cstring; buffer: cstring; bufferSize: cint; init: ptr RTCSsrcForTypeInit): cint {. importc, ...raises: [], tags: [], forbids: [].}
- Set SSRC for given media type in given SDP
proc rtcSetStateChangeCallback(pc: cint; cb: rtcStateChangeCallbackFunc): cint {. importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetTrackCallback(pc: cint; cb: rtcTrackCallbackFunc): cint {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcSetTrackRtpTimestamp(id: cint; timestamp: uint32): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Set RTP timestamp for track identified by given id
proc rtcSetUserPointer(id: cint; usePtr: pointer) {.importc, ...raises: [], tags: [], forbids: [].}
proc rtcStartRtcpSenderReporterRecording(id: cint): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Start stats recording for RTCP Sender Reporter
proc rtcTransformSecondsToTimestamp(id: cint; seconds: cdouble; timestamp: ptr uint32): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Transform seconds to timestamp using track's clock rate, result is written to timestamp
proc rtcTransformTimestampToSeconds(id: cint; timestamp: uint32; seconds: ptr cdouble): cint {.importc, ...raises: [], tags: [], forbids: [].}
- Transform timestamp to seconds using track's clock rate, result is written to seconds