Parlora.Channels.Browser (Parlora v0.1.0)

Copy Markdown View Source

One browser audio connection, terminated at Parlora with ExWebRTC and libopus.

Supply :signaling as the owning signaling process. It receives {:parlora_browser, channel_pid, {:signal, json_map}}; submit the browser's offer and ICE candidates with signal/2 from that same process. Its death closes the channel. Only one audio offer is supported per session.

Options: :ice_servers (default []), :ice_transport_policy (:all or :relay, default :all), :jitter_ms (40), :playback_buffer_ms (120), :playback_buffering (:adaptive or :fixed, default :adaptive), :playback_recovery_ms (120), :max_rtp_packets (32), :max_age_ms (200), and :max_mailbox (256). Bounds reject overload rather than growing queues. Adaptive playback learns a target between the initial cushion and 200 ms, capped by queue duration. Recovery waiting has its own cap; zero initial cushion disables buffering. See the browser guide. Clear affects Parlora buffers; packets already handed to ExWebRTC and browser or OS buffers cannot be recalled. Handoff does not confirm audibility.

Summary

Functions

Returns a specification to start this module under a supervisor.

Bounded media counters; sent packets are not confirmed playback.

Admits one offer or ICE candidate from the channel's signaling owner.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

observations(pid)

Bounded media counters; sent packets are not confirmed playback.

signal(pid, message)

Admits one offer or ICE candidate from the channel's signaling owner.

After receiving {:parlora_browser, channel, :attached}, submit string-keyed maps:

%{"type" => "offer", "sdp" => offer_sdp}
%{"type" => "candidate", "candidate" => %{
  "candidate" => candidate_string, "sdpMid" => "0", "sdpMLineIndex" => 0
}}

Send the offer before its candidates. The SDP must negotiate one bidirectional Opus audio track. sdpMid may be nil; optional usernameFragment is forwarded. Ignore the browser's null end-of-gathering candidate. Admission is asynchronous; observe channel events for negotiation failure and session readiness.

See the browser handshake and JavaScript client for the WebSocket envelopes used by Parlora.Channels.Browser.Signaling.