Skip to content

Instantly share code, notes, and snippets.

@sax
Last active October 7, 2021 16:15
Show Gist options
  • Save sax/3ff89074947d078eac51c7f10d0b239f to your computer and use it in GitHub Desktop.
Save sax/3ff89074947d078eac51c7f10d0b239f to your computer and use it in GitHub Desktop.
membrane re-linking crash
[error] GenServer #PID<0.1474.0> terminating
** (Membrane.LinkError) Pad {Membrane.Pad, :input, "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "} has already been linked
(membrane_core 0.7.0) lib/membrane/core/child/pad_controller.ex:165: Membrane.Core.Child.PadController.validate_pad_being_linked!/4
(membrane_core 0.7.0) lib/membrane/core/child/pad_controller.ex:48: Membrane.Core.Child.PadController.handle_link/5
(membrane_core 0.7.0) lib/membrane/core/bin.ex:173: Membrane.Core.Bin.handle_call/3
(stdlib 3.16) gen_server.erl:721: :gen_server.try_handle_call/4
(stdlib 3.16) gen_server.erl:750: :gen_server.handle_msg/6
(stdlib 3.16) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.1587.0>): {Membrane.Core.Message, :handle_link, [:input, %Membrane.Core.Parent.Link.Endpoint{child: {:endpoint, "0c920133-55a6-45a3-9087-9ef9307d906a"}, pad_props: [options: [encoding: :OPUS]], pad_ref: {Membrane.Pad, :input, "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "}, pad_spec: {Membrane.Pad, :input, "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "}, pid: #PID<0.1474.0>}, %Membrane.Core.Parent.Link.Endpoint{child: {:tee, {"80942349-2d9d-48f2-b20e-f5d1aabbb057", "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "}}, pad_props: [], pad_ref: {Membrane.Pad, :copy, #Reference<0.2858565386.3600023554.36716>}, pad_spec: :copy, pid: #PID<0.1587.0>}, %{accepted_caps: :any, availability: :on_request, direction: :output, mode: :push, name: :copy, options: nil}], []}
defp pause_peer(tracks, peer_id, ctx) do
endpoint = ctx.children[{:endpoint, peer_id}]
endpoint_node = node(endpoint.pid)
Enum.reduce(tracks, [], fn
{track_id, _encoding}, link_removals ->
tee = find_child(ctx, pattern: {:tee, {_other_endpoint_id, ^track_id}})
if is_nil(tee) do
link_removals
else
tee_child_entry = ctx.children[tee]
tee_node = node(tee_child_entry.pid)
track_source_id = {endpoint_node, track_id}
track_source = {:track_source, track_source_id}
if tee_node == endpoint_node do
# Unlink track from endpoint on the same node
link_removal =
unlink(:copy)
|> from(tee)
|> to({:endpoint, peer_id})
|> via_in(Pad.ref(:input, track_id))
link_removals ++ [link_removal]
else
# Unlink track to existing UDP receiver on endpoint's node
link_removal =
unlink(:output)
|> from(track_source)
|> to({:endpoint, peer_id})
|> via_in(Pad.ref(:input, track_id))
link_removals ++ [link_removal]
end
end
end)
end
raising: pad ref: {Membrane.Pad, :input,
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "}
raising: state: %Membrane.Core.Bin.State{
children: %{
:ice => %Membrane.ChildEntry{
clock: nil,
component_type: :bin,
module: Membrane.ICE.Bin,
name: :ice,
options: %Membrane.ICE.Bin{
controlling_mode: true,
handshake_module: Membrane.DTLS.Handshake,
handshake_opts: [client_mode: false, dtls_srtp: true],
log_metadata: [peer_id: "0c920133-55a6-45a3-9087-9ef9307d906a"],
n_components: 1,
port_range: 0..0,
stream_name: "",
stun_servers: [%{server_addr: "stun.l.google.com", server_port: 19302}],
turn_servers: []
},
pid: #PID<0.1476.0>,
playback_synced?: true,
sync: :membrane_no_sync,
terminating?: false
},
:ice_funnel => %Membrane.ChildEntry{
clock: nil,
component_type: :element,
module: Membrane.Funnel,
name: :ice_funnel,
options: %Membrane.Funnel{end_of_stream: :on_last_pad},
pid: #PID<0.1484.0>,
playback_synced?: true,
sync: :membrane_no_sync,
terminating?: false
},
:rtp => %Membrane.ChildEntry{
clock: nil,
component_type: :bin,
module: Membrane.RTP.SessionBin,
name: :rtp,
options: %Membrane.RTP.SessionBin{
custom_depayloaders: %{},
custom_payloaders: %{},
fmt_mapping: %{},
receiver_srtp_policies: nil,
receiver_ssrc_generator: &Membrane.RTP.SessionBin.generate_receiver_ssrc/2,
rtcp_report_interval: nil,
secure?: true,
srtp_policies: []
},
pid: #PID<0.1485.0>,
playback_synced?: true,
sync: :membrane_no_sync,
terminating?: false
},
{:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "} => %Membrane.ChildEntry{
clock: nil,
component_type: :element,
module: Membrane.WebRTC.TrackFilter,
name: {:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "},
options: %Membrane.WebRTC.TrackFilter{enabled: true},
pid: #PID<0.1510.0>,
playback_synced?: true,
sync: :membrane_no_sync,
terminating?: false
},
{:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "} => %Membrane.ChildEntry{
clock: nil,
component_type: :element,
module: Membrane.WebRTC.TrackFilter,
name: {:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "},
options: %Membrane.WebRTC.TrackFilter{enabled: true},
pid: #PID<0.1500.0>,
playback_synced?: true,
sync: :membrane_no_sync,
terminating?: false
}
},
children_log_metadata: [
parent_path: ["pipeline@<0.1450.0>"],
peer_id: "0c920133-55a6-45a3-9087-9ef9307d906a",
sfu: "horse"
],
controlling_pid: #PID<0.1450.0>,
crash_groups: %{},
internal_state: %{
audio_codecs: [],
candidate_gathering_state: :done,
candidates: ["a=candidate:45 1 TCP 843058175 136.25.139.210 63013 typ srflx raddr 172.16.0.200 rport 63013 tcptype passive",
"a=candidate:44 1 TCP 847252479 136.25.139.210 9 typ srflx raddr 172.16.0.200 rport 9 tcptype active",
"a=candidate:43 1 UDP 1679821823 136.25.139.210 53294 typ srflx raddr 172.16.0.200 rport 53294",
"a=candidate:42 1 TCP 843056127 136.25.139.210 63005 typ srflx raddr 172.16.0.219 rport 63005 tcptype passive",
"a=candidate:41 1 TCP 847250431 136.25.139.210 9 typ srflx raddr 172.16.0.219 rport 9 tcptype active",
"a=candidate:40 1 UDP 1679819775 136.25.139.210 52739 typ srflx raddr 172.16.0.219 rport 52739",
"a=candidate:39 1 TCP 1010830591 fdaf:837d:9166:1:c5e:8697:8db:11f0 63014 typ host tcptype passive",
"a=candidate:38 1 TCP 1015024895 fdaf:837d:9166:1:c5e:8697:8db:11f0 9 typ host tcptype active",
"a=candidate:37 1 UDP 2015366399 fdaf:837d:9166:1:c5e:8697:8db:11f0 63866 typ host",
"a=candidate:36 1 TCP 1010830335 172.16.0.200 63013 typ host tcptype passive",
"a=candidate:35 1 TCP 1015024639 172.16.0.200 9 typ host tcptype active",
"a=candidate:34 1 UDP 2015366143 172.16.0.200 53294 typ host",
"a=candidate:33 1 TCP 1010830079 fe80::bd:61c4:4e8a:3591 63012 typ host tcptype passive",
"a=candidate:32 1 TCP 1015024383 fe80::bd:61c4:4e8a:3591 9 typ host tcptype active",
"a=candidate:31 1 UDP 2015365887 fe80::bd:61c4:4e8a:3591 54380 typ host",
"a=candidate:30 1 TCP 1010829823 fe80::783a:9539:35ae:9506 63011 typ host tcptype passive",
"a=candidate:29 1 TCP 1015024127 fe80::783a:9539:35ae:9506 9 typ host tcptype active",
"a=candidate:28 1 UDP 2015365631 fe80::783a:9539:35ae:9506 63477 typ host",
"a=candidate:27 1 TCP 1010829567 fe80::a992:17ee:7625:a13a 63010 typ host tcptype passive",
"a=candidate:26 1 TCP 1015023871 fe80::a992:17ee:7625:a13a 9 typ host tcptype active",
"a=candidate:25 1 UDP 2015365375 fe80::a992:17ee:7625:a13a 55264 typ host",
"a=candidate:24 1 TCP 1010829311 fe80::137e:bdc0:6934:145f 63009 typ host tcptype passive",
"a=candidate:23 1 TCP 1015023615 fe80::137e:bdc0:6934:145f 9 typ host tcptype active",
"a=candidate:22 1 UDP 2015365119 fe80::137e:bdc0:6934:145f 60474 typ host",
"a=candidate:21 1 TCP 1010829055 fe80::27f4:74ea:db3e:3532 63008 typ host tcptype passive",
"a=candidate:20 1 TCP 1015023359 fe80::27f4:74ea:db3e:3532 9 typ host tcptype active",
"a=candidate:19 1 UDP 2015364863 fe80::27f4:74ea:db3e:3532 62012 typ host",
"a=candidate:18 1 TCP 1010828543 fe80::acf1:e7ff:fede:5862 63007 typ host tcptype passive",
"a=candidate:17 1 TCP 1015022847 fe80::acf1:e7ff:fede:5862 9 typ host tcptype active",
"a=candidate:16 1 UDP 2015364351 fe80::acf1:e7ff:fede:5862 55569 typ host",
"a=candidate:15 1 TCP 1010828543 fe80::acf1:e7ff:fede:5862 63006 typ host tcptype passive",
"a=candidate:14 1 TCP 1015022847 fe80::acf1:e7ff:fede:5862 9 typ host tcptype active",
"a=candidate:13 1 UDP 2015364351 fe80::acf1:e7ff:fede:5862 49430 typ host",
"a=candidate:12 1 TCP 1010828287 172.16.0.219 63005 typ host tcptype passive",
"a=candidate:11 1 TCP 1015022591 172.16.0.219 9 typ host tcptype active",
"a=candidate:10 1 UDP 2015364095 172.16.0.219 52739 typ host",
"a=candidate:9 1 TCP 1010828031 fdaf:837d:9166:1:14c9:37e7:f32:1c05 63004 typ host tcptype passive",
"a=candidate:8 1 TCP 1015022335 fdaf:837d:9166:1:14c9:37e7:f32:1c05 9 typ host tcptype active",
"a=candidate:7 1 UDP 2015363839 fdaf:837d:9166:1:14c9:37e7:f32:1c05 51773 typ host",
"a=candidate:6 1 TCP 1010827775 fe80::143b:5976:b048:cacf 63003 typ host tcptype passive",
"a=candidate:5 1 TCP 1015022079 fe80::143b:5976:b048:cacf 9 typ host tcptype active",
"a=candidate:4 1 UDP 2015363583 fe80::143b:5976:b048:cacf 56898 typ host",
...],
dtls_fingerprint: {:sha256,
"36:41:EC:C9:9A:09:45:CB:83:78:08:7B:4D:E2:94:15:4E:DB:96:3C:46:85:E0:F1:EA:41:A5:41:7F:7D:DB:7D"},
filter_codecs: &Membrane.WebRTC.SDP.filter_mappings/1,
ice: %{
pwd: "IajOWw6k9TyzsLttkqsjke",
restarting?: false,
ufrag: "wa+K",
waiting_restart?: false
},
inbound_tracks: %{
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 " => %Membrane.WebRTC.Track{
encoding: :VP8,
fmtp: nil,
id: "0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 ",
mid: "1",
name: "0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 -video-101ae44a-60b5-4cca-b707-d4d24d7f7032",
rtp_mapping: %ExSDP.Attribute.RTPMapping{
clock_rate: 90000,
encoding: "VP8",
params: nil,
payload_type: 96
},
ssrc: 1646399729,
status: :linked,
stream_id: "101ae44a-60b5-4cca-b707-d4d24d7f7032",
type: :video
},
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 " => %Membrane.WebRTC.Track{
encoding: :OPUS,
fmtp: %ExSDP.Attribute.FMTP{
apt: nil,
cbr: nil,
level_asymmetry_allowed: nil,
max_br: nil,
max_dpb: nil,
max_fr: nil,
max_fs: nil,
max_mbps: nil,
max_smbps: nil,
maxaveragebitrate: nil,
maxplaybackrate: nil,
minptime: 10,
packetization_mode: nil,
profile_id: nil,
profile_level_id: nil,
pt: 111,
range: nil,
repair_window: nil,
stereo: nil,
usedtx: nil,
useinbandfec: true
},
id: "0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 ",
mid: "0",
name: "0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 -audio-101ae44a-60b5-4cca-b707-d4d24d7f7032",
rtp_mapping: %ExSDP.Attribute.RTPMapping{
clock_rate: 48000,
encoding: "opus",
params: 2,
payload_type: 111
},
ssrc: 2672441444,
status: :linked,
stream_id: "101ae44a-60b5-4cca-b707-d4d24d7f7032",
type: :audio
}
},
outbound_tracks: %{
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 " => %Membrane.WebRTC.Track{
encoding: :OPUS,
fmtp: %ExSDP.Attribute.FMTP{
apt: nil,
cbr: nil,
level_asymmetry_allowed: nil,
max_br: nil,
max_dpb: nil,
max_fr: nil,
max_fs: nil,
max_mbps: nil,
max_smbps: nil,
maxaveragebitrate: nil,
maxplaybackrate: nil,
minptime: 10,
packetization_mode: nil,
profile_id: nil,
profile_level_id: nil,
pt: 111,
range: nil,
repair_window: nil,
stereo: nil,
usedtx: nil,
useinbandfec: true
},
id: "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 ",
mid: "2",
name: "80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 -audio-f72f4a32-31a3-49a8-9380-3300d4be781e",
rtp_mapping: %ExSDP.Attribute.RTPMapping{
clock_rate: 48000,
encoding: "opus",
params: 2,
payload_type: 111
},
ssrc: 1342114200,
status: :linked,
stream_id: "f72f4a32-31a3-49a8-9380-3300d4be781e",
type: :audio
},
"80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd " => %Membrane.WebRTC.Track{
encoding: :VP8,
fmtp: nil,
id: "80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd ",
mid: "3",
name: "80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd -video-f72f4a32-31a3-49a8-9380-3300d4be781e",
rtp_mapping: %ExSDP.Attribute.RTPMapping{
clock_rate: 90000,
encoding: "VP8",
params: nil,
payload_type: 96
},
ssrc: 3992177227,
status: :linked,
stream_id: "f72f4a32-31a3-49a8-9380-3300d4be781e",
type: :video
}
},
ssrc_to_track_id: %{
1646399729 => "0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 ",
2672441444 => "0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "
},
video_codecs: []
},
linking_buffer: %{},
links: [
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [
options: [encoding: :OPUS, clock_rate: 48000, payload_type: 111]
],
pad_ref: {Membrane.Pad, :rtp_output, 1342114200},
pad_spec: {Membrane.Pad, :rtp_output, 1342114200},
pid: #PID<0.1485.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: :ice_funnel,
pad_props: [],
pad_ref: {Membrane.Pad, :input,
#Reference<0.2858565386.3600023563.30891>},
pad_spec: :input,
pid: #PID<0.1484.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [
options: [encoding: :VP8, clock_rate: 90000, payload_type: 96]
],
pad_ref: {Membrane.Pad, :rtp_output, 3992177227},
pad_spec: {Membrane.Pad, :rtp_output, 3992177227},
pid: #PID<0.1485.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: :ice_funnel,
pad_props: [],
pad_ref: {Membrane.Pad, :input,
#Reference<0.2858565386.3600023563.30866>},
pad_spec: :input,
pid: #PID<0.1484.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [
options: [
encoding: :VP8,
packet_filters: [],
extensions: [],
clock_rate: 90000
]
],
pad_ref: {Membrane.Pad, :output, 1646399729},
pad_spec: {Membrane.Pad, :output, 1646399729},
pid: #PID<0.1485.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: {:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "},
pad_props: [],
pad_ref: :input,
pad_spec: :input,
pid: #PID<0.1510.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [
options: [
encoding: :OPUS,
packet_filters: [],
extensions: [vad: Membrane.RTP.VAD],
clock_rate: 48000
]
],
pad_ref: {Membrane.Pad, :output, 2672441444},
pad_spec: {Membrane.Pad, :output, 2672441444},
pid: #PID<0.1485.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: {:track_filter,
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "},
pad_props: [],
pad_ref: :input,
pad_spec: :input,
pid: #PID<0.1500.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :ice_funnel,
pad_props: [],
pad_ref: :output,
pad_spec: :output,
pid: #PID<0.1484.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: :ice,
pad_props: [],
pad_ref: {Membrane.Pad, :input, 1},
pad_spec: {Membrane.Pad, :input, 1},
pid: #PID<0.1476.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :ice,
pad_props: [],
pad_ref: {Membrane.Pad, :output, 1},
pad_spec: {Membrane.Pad, :output, 1},
pid: #PID<0.1476.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [],
pad_ref: {Membrane.Pad, :rtp_input,
#Reference<0.2858565386.3600023553.35374>},
pad_spec: {Membrane.Pad, :rtp_input,
#Reference<0.2858565386.3600023553.35374>},
pid: #PID<0.1485.0>
}
},
%Membrane.Core.Parent.Link{
from: %Membrane.Core.Parent.Link.Endpoint{
child: :rtp,
pad_props: [],
pad_ref: {Membrane.Pad, :rtcp_output,
#Reference<0.2858565386.3600023553.35374>},
pad_spec: {Membrane.Pad, :rtcp_output,
#Reference<0.2858565386.3600023553.35374>},
pid: #PID<0.1485.0>
},
to: %Membrane.Core.Parent.Link.Endpoint{
child: :ice_funnel,
pad_props: [],
pad_ref: {Membrane.Pad, :input,
#Reference<0.2858565386.3600023553.35468>},
pad_spec: :input,
pid: #PID<0.1484.0>
}
}
],
module: Membrane.WebRTC.EndpointBin,
name: {:endpoint, "0c920133-55a6-45a3-9087-9ef9307d906a"},
pads: %{
data: %{
{Membrane.Pad, :input,
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: nil,
demand_unit: :buffers,
direction: :input,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :input,
options: %{encoding: :OPUS, track_enabled: true},
other_demand_unit: nil,
other_ref: {Membrane.Pad, :copy,
#Reference<0.2858565386.3600023563.30881>},
pid: #PID<0.1587.0>,
ref: {Membrane.Pad, :input,
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "},
start_of_stream?: false,
sticky_messages: []
},
{Membrane.Pad, :input,
"80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: nil,
demand_unit: :buffers,
direction: :input,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :input,
options: %{encoding: :VP8, track_enabled: true},
other_demand_unit: nil,
other_ref: {Membrane.Pad, :copy,
#Reference<0.2858565386.3600023563.30837>},
pid: #PID<0.1572.0>,
ref: {Membrane.Pad, :input,
"80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd "},
start_of_stream?: false,
sticky_messages: []
},
{Membrane.Pad, :output,
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: 0,
demand_unit: nil,
direction: :output,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :output,
options: %{extensions: [], packet_filters: [], track_enabled: true},
other_demand_unit: :buffers,
other_ref: :input,
pid: #PID<0.1508.0>,
ref: {Membrane.Pad, :output,
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "},
start_of_stream?: false,
sticky_messages: nil
},
{Membrane.Pad, :output,
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: 0,
demand_unit: nil,
direction: :output,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :output,
options: %{
extensions: [vad: Membrane.RTP.VAD],
packet_filters: [],
track_enabled: true
},
other_demand_unit: :buffers,
other_ref: :input,
pid: #PID<0.1498.0>,
ref: {Membrane.Pad, :output,
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "},
start_of_stream?: false,
sticky_messages: nil
},
{Membrane.Pad, {:private, :input},
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: 0,
demand_unit: nil,
direction: :output,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :input,
options: %{},
other_demand_unit: :buffers,
other_ref: :input,
pid: #PID<0.1597.0>,
ref: {Membrane.Pad, {:private, :input},
"80942349-2d9d-48f2-b20e-f5d1aabbb057:c8beb6b4-5c3c-4c8f-8521-43c32490e172 "},
start_of_stream?: false,
sticky_messages: nil
},
{Membrane.Pad, {:private, :input},
"80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: 0,
demand_unit: nil,
direction: :output,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :input,
options: %{},
other_demand_unit: :buffers,
other_ref: :input,
pid: #PID<0.1581.0>,
ref: {Membrane.Pad, {:private, :input},
"80942349-2d9d-48f2-b20e-f5d1aabbb057:efd2c3a7-a215-48fc-b374-657ffdba68cd "},
start_of_stream?: false,
sticky_messages: nil
},
{Membrane.Pad, {:private, :output},
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: nil,
demand_unit: :buffers,
direction: :input,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :output,
options: %{},
other_demand_unit: nil,
other_ref: :output,
pid: #PID<0.1510.0>,
ref: {Membrane.Pad, {:private, :output},
"0c920133-55a6-45a3-9087-9ef9307d906a:60fe9231-04d5-46ac-9b0d-76aebd6d6fd3 "},
start_of_stream?: false,
sticky_messages: []
},
{Membrane.Pad, {:private, :output},
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "} => %Membrane.Pad.Data{
accepted_caps: :any,
availability: :on_request,
caps: nil,
demand: nil,
demand_unit: :buffers,
direction: :input,
end_of_stream?: false,
input_buf: nil,
mode: :pull,
name: :output,
options: %{},
other_demand_unit: nil,
other_ref: :output,
pid: #PID<0.1500.0>,
ref: {Membrane.Pad, {:private, :output},
"0c920133-55a6-45a3-9087-9ef9307d906a:a955f43f-f1c9-4d87-a7ef-14121ec562a5 "},
start_of_stream?: false,
sticky_messages: []
}
},
dynamic_currently_linking: [],
info: %{
:input => %{
accepted_caps: :any,
availability: :on_request,
demand_unit: :buffers,
direction: :input,
mode: :pull,
name: :input,
options: [
encoding: [spec: ":OPUS | :H264", description: "Track encoding"],
track_enabled: [
spec: "boolean()",
default: true,
description: "Enable or disable track"
]
]
},
:output => %{
accepted_caps: :any,
availability: :on_request,
direction: :output,
mode: :pull,
name: :output,
options: [
track_enabled: [
spec: "boolean()",
default: true,
description: "Enable or disable track"
],
packet_filters: [
spec: "[Membrane.RTP.SessionBin.packet_filter_t()]",
default: [],
description: "List of packet filters that will be applied to the SessionBin's output pad"
],
extensions: [
spec: "[Membrane.RTP.SessionBin.extension_t()]",
default: [],
description: "List of tuples representing rtp extensions"
]
]
},
{:private, :input} => %{
accepted_caps: :any,
availability: :on_request,
direction: :output,
mode: :pull,
name: :input,
options: []
},
{:private, :output} => %{
accepted_caps: :any,
availability: :on_request,
demand_unit: :buffers,
direction: :input,
mode: :pull,
name: :output,
options: []
}
}
},
playback: %Membrane.Core.Playback{
async_state_change: false,
pending_state: nil,
state: :playing,
target_state: :playing
},
synchronization: %{
clock: nil,
clock_provider: %{
choice: :auto,
clock: #PID<0.1451.0>,
provider: Membrane.Parent
},
clock_proxy: #PID<0.1475.0>,
latency: 0,
parent_clock: #PID<0.1451.0>,
stream_sync: :membrane_no_sync,
timers: %{}
},
watcher: #PID<0.1450.0>
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment