Skip to content

Commit

Permalink
Add reset_timestamps option
Browse files Browse the repository at this point in the history
  • Loading branch information
dmorn committed Apr 17, 2024
1 parent 4e913b6 commit 153f10f
Showing 1 changed file with 28 additions and 6 deletions.
34 changes: 28 additions & 6 deletions lib/membrane_rtmp_plugin/rtmp/sink/sink.ex
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ defmodule Membrane.RTMP.Sink do
description: """
A list of tracks, which will be sent. Can be `:audio`, `:video` or both.
"""
],
reset_timestamps: [
spec: boolean(),
default: true,
description: """
If enabled, this feature adjusts the timing of outgoing FLV packets so that they begin from zero.
Leaves it untouched otherwise.
"""
]

@impl true
Expand Down Expand Up @@ -89,7 +97,8 @@ defmodule Membrane.RTMP.Sink do
# remaining pad are simply forwarded to the output.
# Always on if a single track is connected
forward_mode?: single_track?,
video_base_dts: nil
video_base_dts: nil,
reset_timestampts: options.reset_timestamps
})

{[], state}
Expand Down Expand Up @@ -303,15 +312,13 @@ defmodule Membrane.RTMP.Sink do
end

defp write_frame(state, Pad.ref(:video, 0), buffer) do
dts = buffer.dts || buffer.pts
pts = buffer.pts || buffer.dts
{base_dts, state} = Bunch.Map.get_updated!(state, :video_base_dts, &(&1 || dts))
{{dts, pts}, state} = buffer_timings(buffer, state)

case Native.write_video_frame(
state.native,
buffer.payload,
dts - base_dts,
pts - base_dts,
dts,
pts,
buffer.metadata.h264.key_frame?
) do
{:ok, native} ->
Expand All @@ -321,4 +328,19 @@ defmodule Membrane.RTMP.Sink do
raise "writing video frame failed with reason: #{inspect(reason)}"
end
end

defp buffer_timings(buffer, state) do
dts = buffer.dts || buffer.pts
pts = buffer.pts || buffer.dts
correct_timings(dts, pts, state)
end

defp correct_timings(dts, pts, state = %{reset_timestamps: false}) do
{{dts, pts}, state}
end

defp correct_timings(dts, pts, state) do
{base_dts, state} = Bunch.Map.get_updated!(state, :video_base_dts, &(&1 || dts))
{{dts - base_dts, pts - base_dts}, state}
end
end

0 comments on commit 153f10f

Please sign in to comment.