[
child(:webrtc_sink, %WebRTC.Sink{
signaling: %Membrane.WebRTC.SignalingChannel{pid: signaling_channel},
tracks: [:audio, :video],
video_codec: :h264
}),
get_child(:source_bin_audio_tee)
|> child(:audio_parser, %Membrane.AAC.Parser{
out_encapsulation: :ADTS
})
|> child(:aac_decoder, Membrane.AAC.FDK.Decoder)
|> child(:converter, %Membrane.FFmpeg.SWResample.Converter{
output_stream_format: %Membrane.RawAudio{
sample_format: @audio_sample_format,
sample_rate: @audio_sample_rate,
channels: 2
}
})
|> child(:encoder, %Membrane.Opus.Encoder{
application: :audio,
input_stream_format: %Membrane.RawAudio{
channels: 2,
sample_format: @audio_sample_format,
sample_rate: @audio_sample_rate
}
})
|> child(:parser, %Membrane.Opus.Parser{delimitation: :keep})
|> get_child(:audio_tee)
]
# Then eventually
spec ++ [
get_child(:audio_tee)
|> via_in(Pad.ref(:input, :audio_track), options: [kind: :audio])
|> get_child(:webrtc_sink)
]
[
child(:webrtc_sink, %WebRTC.Sink{
signaling: %Membrane.WebRTC.SignalingChannel{pid: signaling_channel},
tracks: [:audio, :video],
video_codec: :h264
}),
get_child(:source_bin_audio_tee)
|> child(:audio_parser, %Membrane.AAC.Parser{
out_encapsulation: :ADTS
})
|> child(:aac_decoder, Membrane.AAC.FDK.Decoder)
|> child(:converter, %Membrane.FFmpeg.SWResample.Converter{
output_stream_format: %Membrane.RawAudio{
sample_format: @audio_sample_format,
sample_rate: @audio_sample_rate,
channels: 2
}
})
|> child(:encoder, %Membrane.Opus.Encoder{
application: :audio,
input_stream_format: %Membrane.RawAudio{
channels: 2,
sample_format: @audio_sample_format,
sample_rate: @audio_sample_rate
}
})
|> child(:parser, %Membrane.Opus.Parser{delimitation: :keep})
|> get_child(:audio_tee)
]
# Then eventually
spec ++ [
get_child(:audio_tee)
|> via_in(Pad.ref(:input, :audio_track), options: [kind: :audio])
|> get_child(:webrtc_sink)
]