RTP demo with RawAudio
Hello friends, I'm trying to get microphone input (via
Excerpt below based on the demo in
This seems to throw an error when generating the headers because buffer.pts is
Does anyone have any tips on what I might be doing wrong?
Membrane.PortAudio.SourceMembrane.PortAudio.Source) packaged into an RTP stream and sent to a server and can't quite seem to get it right.Excerpt below based on the demo in
membrane-demo/rtpmembrane-demo/rtp but with microphone input substituted and newer syntax.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
})
]This seems to throw an error when generating the headers because buffer.pts is
nilnil:[error] <0.815.0>/:rtp/{:stream_send_bin, 1236}/:payloader/:header_generator Error handling action {:split, {:handle_buffer, [[:input, %Membrane.Buffer{payload: <<220, 255, 254>>, pts: nil, dts: nil, metadata: %{}}]]}} returned by callback Membrane.RTP.HeaderGenerator.handle_buffers_batch
[error] GenServer #PID<0.849.0> terminating
** (FunctionClauseError) no function clause matching in Ratio.mult/2
(ratio 2.4.2) lib/ratio.ex:418: Ratio.mult(nil, 48000)
(membrane_rtp_plugin 0.23.0) lib/membrane/rtp/header_generator.ex:71: Membrane.RTP.HeaderGenerator.handle_process/4[error] <0.815.0>/:rtp/{:stream_send_bin, 1236}/:payloader/:header_generator Error handling action {:split, {:handle_buffer, [[:input, %Membrane.Buffer{payload: <<220, 255, 254>>, pts: nil, dts: nil, metadata: %{}}]]}} returned by callback Membrane.RTP.HeaderGenerator.handle_buffers_batch
[error] GenServer #PID<0.849.0> terminating
** (FunctionClauseError) no function clause matching in Ratio.mult/2
(ratio 2.4.2) lib/ratio.ex:418: Ratio.mult(nil, 48000)
(membrane_rtp_plugin 0.23.0) lib/membrane/rtp/header_generator.ex:71: Membrane.RTP.HeaderGenerator.handle_process/4Does anyone have any tips on what I might be doing wrong?