Skip to content

Commit a1aab58

Browse files
committed
Send TWCC feedbacks when we don't send any packets
1 parent c8ad127 commit a1aab58

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

examples/save_to_file/lib/save_to_file/peer_handler.ex

+7-2
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,12 @@ defmodule SaveToFile.PeerHandler do
158158
{:ok, state}
159159
end
160160

161+
defp handle_webrtc_msg({:rtp, _id, %{payload: <<>>}}, state) do
162+
# we're ignoring packets with padding only, as these are most likely used
163+
# for network bandwidth probing
164+
{:ok, state}
165+
end
166+
161167
defp handle_webrtc_msg({:rtp, id, packet}, %{video_track_id: id} = state) do
162168
state =
163169
case VP8Depayloader.write(state.video_depayloader, packet) do
@@ -183,8 +189,7 @@ defmodule SaveToFile.PeerHandler do
183189
opus_packet = OpusDepayloader.depayload(packet)
184190
{:ok, audio_writer} = Ogg.Writer.write_packet(state.audio_writer, opus_packet)
185191

186-
state = %{state | audio_writer: audio_writer}
187-
{:ok, state}
192+
{:ok, %{state | audio_writer: audio_writer}}
188193
end
189194

190195
defp handle_webrtc_msg(_msg, state), do: {:ok, state}

lib/ex_webrtc/peer_connection.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -880,9 +880,8 @@ defmodule ExWebRTC.PeerConnection do
880880
@impl true
881881
def handle_info(:send_twcc_feedback, %{twcc_recorder: twcc_recorder} = state) do
882882
Process.send_after(self(), :send_twcc_feedback, @twcc_interval)
883-
%TWCCRecorder{sender_ssrc: sender_ssrc, media_ssrc: media_ssrc} = twcc_recorder
884883

885-
if sender_ssrc != nil and media_ssrc != nil do
884+
if twcc_recorder.media_ssrc != nil do
886885
{twcc_recorder, feedbacks} = TWCCRecorder.get_feedback(twcc_recorder)
887886

888887
for feedback <- feedbacks do

lib/ex_webrtc/peer_connection/twcc_recorder.ex

+4-2
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ defmodule ExWebRTC.PeerConnection.TWCCRecorder do
4646
@max_ref_time 0xFFFFFF
4747
@breakpoint 0x7FFF
4848

49+
@default_sender_ssrc 1
50+
4951
@type t() :: %__MODULE__{
5052
media_ssrc: non_neg_integer(),
51-
sender_ssrc: non_neg_integer(),
53+
sender_ssrc: non_neg_integer() | nil,
5254
base_seq_no: non_neg_integer() | nil,
5355
start_seq_no: non_neg_integer() | nil,
5456
end_seq_no: non_neg_integer() | nil,
@@ -206,7 +208,7 @@ defmodule ExWebRTC.PeerConnection.TWCCRecorder do
206208
# Pion also caps max number of not_received packets at the beginning
207209
feedback = %CC{
208210
media_ssrc: media_ssrc,
209-
sender_ssrc: sender_ssrc,
211+
sender_ssrc: sender_ssrc || @default_sender_ssrc,
210212
fb_pkt_count: fb_pkt_count &&& @max_fb_pkt_count,
211213
base_sequence_number: base_seq_no &&& @max_seq_no,
212214
packet_status_count: new_base - base_seq_no,

0 commit comments

Comments
 (0)