Class: WebRTC::RTCRtpSender

Inherits:
Object
  • Object
show all
Defined in:
lib/webrtc/rtp_sender.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ RTCRtpSender

Returns a new instance of RTCRtpSender.



7
8
9
10
11
12
13
14
# File 'lib/webrtc/rtp_sender.rb', line 7

def initialize(options = {})
  @track = options[:track]
  @transport = options[:transport]
  @ptr = options[:ptr]
  @native_track_id = options[:native_track_id]
  @parameters = default_parameters
  @dtmf = create_dtmf_sender
end

Instance Attribute Details

#dtmfObject (readonly)

Returns the value of attribute dtmf.



5
6
7
# File 'lib/webrtc/rtp_sender.rb', line 5

def dtmf
  @dtmf
end

#native_track_idObject (readonly)

Returns the value of attribute native_track_id.



5
6
7
# File 'lib/webrtc/rtp_sender.rb', line 5

def native_track_id
  @native_track_id
end

#trackObject (readonly)

Returns the value of attribute track.



5
6
7
# File 'lib/webrtc/rtp_sender.rb', line 5

def track
  @track
end

#transportObject (readonly)

Returns the value of attribute transport.



5
6
7
# File 'lib/webrtc/rtp_sender.rb', line 5

def transport
  @transport
end

Class Method Details

.default_codecs(kind) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/webrtc/rtp_sender.rb', line 96

def self.default_codecs(kind)
  case kind.to_sym
  when :audio
    [
      { mime_type: 'audio/opus', clock_rate: 48_000, channels: 2 },
      { mime_type: 'audio/PCMU', clock_rate: 8000, channels: 1 },
      { mime_type: 'audio/PCMA', clock_rate: 8000, channels: 1 }
    ]
  when :video
    [
      { mime_type: 'video/VP8', clock_rate: 90_000 },
      { mime_type: 'video/VP9', clock_rate: 90_000 },
      { mime_type: 'video/H264', clock_rate: 90_000 }
    ]
  else
    []
  end
end

.get_capabilities(kind) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/webrtc/rtp_sender.rb', line 24

def self.get_capabilities(kind)
  typed = get_typed_capabilities(kind)
  {
    codecs: typed.codecs.map do |codec|
      { mime_type: codec.mime_type, clock_rate: codec.clock_rate, channels: codec.channels }
    end,
    header_extensions: typed.header_extensions.map(&:uri)
  }
end

.get_typed_capabilities(kind) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/webrtc/rtp_sender.rb', line 34

def self.get_typed_capabilities(kind)
  RTCRtpCapabilities.new(
    codecs: default_codecs(kind).map do |codec|
      RTCRtpCodecCapability.new(
        mime_type: codec[:mime_type],
        clock_rate: codec[:clock_rate],
        channels: codec[:channels]
      )
    end,
    header_extensions: []
  )
end

Instance Method Details

#get_parametersObject



47
48
49
# File 'lib/webrtc/rtp_sender.rb', line 47

def get_parameters
  @parameters.dup
end

#get_statsObject



80
81
82
# File 'lib/webrtc/rtp_sender.rb', line 80

def get_stats
  Promise.resolve({})
end

#get_typed_parametersObject



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/webrtc/rtp_sender.rb', line 51

def get_typed_parameters
  RTCRtpSendParameters.new(
    transaction_id: @parameters[:transaction_id],
    encodings: @parameters[:encodings],
    header_extensions: @parameters[:header_extensions],
    rtcp: RTCRtcpParameters.new(
      cname: @parameters.dig(:rtcp, :cname).to_s,
      reduced_size: !!@parameters.dig(:rtcp, :reduced_size)
    ),
    codecs: @parameters[:codecs]
  )
end

#replace_track(new_track) ⇒ Object



69
70
71
72
73
74
# File 'lib/webrtc/rtp_sender.rb', line 69

def replace_track(new_track)
  Promise.new do
    @track = new_track
    nil
  end
end

#set_parameters(parameters) ⇒ Object



64
65
66
67
# File 'lib/webrtc/rtp_sender.rb', line 64

def set_parameters(parameters)
  @parameters = parameters.respond_to?(:to_h) ? parameters.to_h : parameters
  Promise.resolve(nil)
end

#set_streams(*streams) ⇒ Object



76
77
78
# File 'lib/webrtc/rtp_sender.rb', line 76

def set_streams(*streams)
  @streams = streams
end