alias Membrane.{RTP, UDP, PortAudio, RawAudio}
...
links = [
child(:mic_input, %PortAudio.Source{
channels: 2,
sample_rate: 24_000
})
|> child(:encoder, %Membrane.Opus.Encoder{
application: :audio,
input_stream_format: %RawAudio{
channels: 2,
sample_format: :s16le,
sample_rate: 24_000
}
})
|> via_in(Pad.ref(:input, audio_ssrc), options: [payloader: RTP.Opus.Payloader])
|> child(:rtp, %RTP.SessionBin{
secure?: secure?,
srtp_policies: [
%ExLibSRTP.Policy{
ssrc: :any_inbound,
key: srtp_key
}
]
})
|> via_out(Pad.ref(:rtp_output, audio_ssrc), options: [encoding: :OPUS])
|> child(:audio_realtimer, Membrane.Realtimer)
|> child(:audio_sink, %UDP.Sink{
destination_port_no: destination_port,
destination_address: destination_address
})
]
alias Membrane.{RTP, UDP, PortAudio, RawAudio}
...
links = [
child(:mic_input, %PortAudio.Source{
channels: 2,
sample_rate: 24_000
})
|> child(:encoder, %Membrane.Opus.Encoder{
application: :audio,
input_stream_format: %RawAudio{
channels: 2,
sample_format: :s16le,
sample_rate: 24_000
}
})
|> via_in(Pad.ref(:input, audio_ssrc), options: [payloader: RTP.Opus.Payloader])
|> child(:rtp, %RTP.SessionBin{
secure?: secure?,
srtp_policies: [
%ExLibSRTP.Policy{
ssrc: :any_inbound,
key: srtp_key
}
]
})
|> via_out(Pad.ref(:rtp_output, audio_ssrc), options: [encoding: :OPUS])
|> child(:audio_realtimer, Membrane.Realtimer)
|> child(:audio_sink, %UDP.Sink{
destination_port_no: destination_port,
destination_address: destination_address
})
]