[ child( {:rtsp_source_tcp_receiver, live_stream_id}, %Beamcaster.Media.RTSP.TCPReceiver{ conn_tcp_socket: state.conn_tcp_socket, request_handler_pid: state.request_handler_pid } ) |> child(:rtsp_filter, %Beamcaster.Media.RTSP.TCPDecapsulator{ rtsp_session: state.request_handler_pid }) |> via_in(Pad.ref(:rtp_input, make_ref())) |> child(:rtsp_session_bin, %Membrane.RTP.SessionBin{ fmt_mapping: fmt_mapping }) ] ... pipeline |> child(:rtsp_audio_adts_parser, %Membrane.AAC.Parser{ samples_per_frame: 1024, out_encapsulation: :ADTS, audio_specific_config: audio_fmtp_config }) |> child(:audio_timestamper, %Beamcaster.Media.RTSP.Timestamper{ stream_type: :audio, base_time: 0 }) |> child(:aac_timestamp_debug, %Membrane.Debug.Filter{ handle_buffer: fn buffer -> IO.puts("Audio buffer PTS: #{inspect(buffer.pts)}, DTS: #{inspect(buffer.dts)}") {[buffer: {:output, buffer}], nil} end }) |> child(:source_bin_audio_tee, Membrane.Tee.Parallel) ... [ child(:sink_tee_audio, Membrane.Tee.Parallel), get_child(:source_bin_audio_tee) |> get_child(:sink_tee_audio) ] ... [ get_child(:sink_tee_audio) |> via_in(Pad.ref(:input, :audio), options: [ encoding: :AAC, segment_duration: segment_duration(), partial_segment_duration: fragment_duration() ] ) |> get_child(format) ] ... child( :hls_sink, %Membrane.HTTPAdaptiveStream.SinkBin{ manifest_module: Membrane.HTTPAdaptiveStream.HLS, persist?: fetch_persist(:hls_sink), target_window_duration: fetch_target_window_duration(:hls_sink), hls_mode: :separate_av, mode: :live, storage: storage(:hls_sink, path, stream_id) }, get_if_exists: true )