hey guys im quite new using membrane, i want to use membrane webrtc to utilize my webrtc call (audio only)
here’s my pipeline
@impl true
def handle_init(_ctx, opts) do
spec =
child(:webrtc_source, %Membrane.WebRTC.Source{
signaling: opts[:ingress_signaling]
})
|> via_out(:output, options: [kind: :audio])
|> child(%Membrane.Transcoder{output_stream_format: Membrane.Opus})
|> child(:audio_realtimer, Membrane.Realtimer)
|> via_in(:input, options: [kind: :audio])
|> child(:webrtc_sink, %Membrane.WebRTC.Sink{
signaling: opts[:egress_signaling]
})
{[spec: spec], %{}}
end
and here’s my channels code
@impl true
def join("call:" <> signaling_id, %{"call_id" => call_id, "role" => role} = payload, socket) when role in ["ingress", "egress"] do
PhoenixSignaling.register_channel(signaling_id)
signaling = PhoenixSignaling.Registry.get(signaling_id)
c_pid = CallHandler.new(call_id)
if role == "egress" do
CallHandler.add_egress(c_pid, signaling_id, signaling)
else
CallHandler.add_ingress(c_pid, signaling_id, signaling)
end
socket = assign(socket, :signaling_id, signaling_id)
{:ok, socket}
end
@impl true
def handle_in(signaling_id, msg, socket) do
IO.inspect({:receive_frombrows, signaling_id, msg})
# msg = Jason.decode!(msg)
PhoenixSignaling.signal(signaling_id, msg)
{:noreply, socket}
end
@impl true
def handle_info({:membrane_webrtc_signaling, _pid, msg, _metadata}, socket) do
IO.inspect({:receive_signal, socket.assigns.signaling_id, msg})
push(socket, socket.assigns.signaling_id, msg)
{:noreply, socket}
end
all my peers successfully doing handshake but media wont flow into my peers
no errors in my code either, did i make some mistake on my pipeline?