Skip to content

Commit 85167cd

Browse files
committed
Correctly generate SSRC for RTPSender
1 parent 9cdab00 commit 85167cd

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

lib/ex_webrtc/peer_connection.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ defmodule ExWebRTC.PeerConnection do
77

88
require Logger
99

10+
import Bitwise
11+
1012
alias __MODULE__.{Configuration, Demuxer}
1113

1214
alias ExWebRTC.{
@@ -777,5 +779,17 @@ defmodule ExWebRTC.PeerConnection do
777779
%{state | conn_state: new_conn_state}
778780
end
779781

782+
defp generate_ssrc(demuxer, rtp_senders) do
783+
rtp_sender_ssrcs = Enum.map(rtp_senders, & &1.ssrc)
784+
ssrcs = Map.keys(demuxer.ssrc_to_mid) ++ rtp_sender_ssrcs
785+
# TODO handle case when all ssrcs are taken
786+
do_generate_ssrc(ssrcs)
787+
end
788+
789+
defp do_generate_ssrc(ssrcs) do
790+
ssrc = Enum.random(0..((1<<<32) - 1))
791+
if ssrc in ssrcs, do: do_generate_ssrc(ssrcs), else: ssrc
792+
end
793+
780794
defp notify(pid, msg), do: send(pid, {:ex_webrtc, self(), msg})
781795
end

0 commit comments

Comments
 (0)