spec = [
# Part of pipeline which saves to FLV file
# child(:muxer, Membrane.MP4.Muxer.ISOM)
child(:muxer, Membrane.FLV.Muxer)
|> child(:sink, %Membrane.File.Sink{location: output_file}),
# Part of pipeline which reads from file and prepare video for muxing
child(:source, %Membrane.File.Source{location: video_track_file})
|> child(:deserializer_video, Membrane.Stream.Deserializer)
|> child(:rtp_video, %Membrane.RTP.DepayloaderBin{
depayloader: Membrane.RTP.H264.Depayloader,
clock_rate: 90_000
})
|> child(:parser_video, %Membrane.H264.Parser{
generate_best_effort_timestamps: %{framerate: {0, 1}},
output_stream_structure: :avc1
})
|> via_in(Pad.ref(:video, 0))
|> get_child(:muxer),
# Part of pipeline which reads from file and prepare audio for muxing
child(:source_audio, %Membrane.File.Source{location: audio_track_file})
|> child(:deserializer_audio, Membrane.Stream.Deserializer)
|> child(:rtp_audio, %Membrane.RTP.DepayloaderBin{
depayloader: Membrane.RTP.Opus.Depayloader,
clock_rate: 48_000
})
|> child(:opus_decoder, Membrane.Opus.Decoder)
|> child(:aac_encoder, Membrane.AAC.FDK.Encoder)
|> child(:aac_parser, %Membrane.AAC.Parser{
out_encapsulation: :none,
output_config: :audio_specific_config
})
|> via_in(Pad.ref(:audio, 0))
|> get_child(:muxer)
]
spec = [
# Part of pipeline which saves to FLV file
# child(:muxer, Membrane.MP4.Muxer.ISOM)
child(:muxer, Membrane.FLV.Muxer)
|> child(:sink, %Membrane.File.Sink{location: output_file}),
# Part of pipeline which reads from file and prepare video for muxing
child(:source, %Membrane.File.Source{location: video_track_file})
|> child(:deserializer_video, Membrane.Stream.Deserializer)
|> child(:rtp_video, %Membrane.RTP.DepayloaderBin{
depayloader: Membrane.RTP.H264.Depayloader,
clock_rate: 90_000
})
|> child(:parser_video, %Membrane.H264.Parser{
generate_best_effort_timestamps: %{framerate: {0, 1}},
output_stream_structure: :avc1
})
|> via_in(Pad.ref(:video, 0))
|> get_child(:muxer),
# Part of pipeline which reads from file and prepare audio for muxing
child(:source_audio, %Membrane.File.Source{location: audio_track_file})
|> child(:deserializer_audio, Membrane.Stream.Deserializer)
|> child(:rtp_audio, %Membrane.RTP.DepayloaderBin{
depayloader: Membrane.RTP.Opus.Depayloader,
clock_rate: 48_000
})
|> child(:opus_decoder, Membrane.Opus.Decoder)
|> child(:aac_encoder, Membrane.AAC.FDK.Encoder)
|> child(:aac_parser, %Membrane.AAC.Parser{
out_encapsulation: :none,
output_config: :audio_specific_config
})
|> via_in(Pad.ref(:audio, 0))
|> get_child(:muxer)
]