@@ -5,12 +5,10 @@ import (
55 "io"
66 "log"
77 "math"
8- "os"
98 "strings"
109 "sync/atomic"
1110 "time"
1211
13- "github.com/glimesh/broadcast-box/internal/environment"
1412 "github.com/glimesh/broadcast-box/internal/webrtc/codecs"
1513 "github.com/glimesh/broadcast-box/internal/webrtc/sessions/whep"
1614 "github.com/pion/rtcp"
@@ -22,7 +20,6 @@ import (
2220)
2321
2422func (whip * WhipSession ) AudioWriter (remoteTrack * webrtc.TrackRemote , streamKey string , peerConnection * webrtc.PeerConnection ) {
25- experimentalWhepPacketDeepClone := strings .EqualFold (os .Getenv (environment .WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS ), "true" )
2623 id := remoteTrack .RID ()
2724
2825 if id == "" {
@@ -64,40 +61,21 @@ func (whip *WhipSession) AudioWriter(remoteTrack *webrtc.TrackRemote, streamKey
6461 sessions = sessionsAny .(map [string ]* whep.WhepSession )
6562 }
6663
67- if experimentalWhepPacketDeepClone {
68- pktClone := * rtpPkt
69- pktClone .Payload = append ([]byte (nil ), rtpPkt .Payload ... )
70- pktClone .Extensions = append ([]rtp.Extension (nil ), rtpPkt .Extensions ... )
71-
72- for _ , whepSession := range sessions {
73- whepSession .SendAudioPacket (codecs.TrackPacket {
74- Layer : id ,
75- Packet : & pktClone ,
76- Codec : codec ,
77- })
78- }
79-
80- } else {
81- packet := codecs.TrackPacket {
82- Layer : id ,
83- Packet : rtpPkt ,
84- Codec : codec ,
85- }
64+ packet := codecs.TrackPacket {
65+ Layer : id ,
66+ Packet : rtpPkt ,
67+ Codec : codec ,
68+ }
8669
87- for _ , whepSession := range sessions {
88- if whepSession .AudioLayerCurrent .Load () == id {
89- whepSession .SendAudioPacket (packet )
90- }
70+ for _ , whepSession := range sessions {
71+ if whepSession .AudioLayerCurrent .Load () == id {
72+ whepSession .SendAudioPacket (packet )
9173 }
9274 }
93-
9475 }
9576}
9677
9778func (whip * WhipSession ) VideoWriter (remoteTrack * webrtc.TrackRemote , streamKey string , peerConnection * webrtc.PeerConnection ) {
98- experimentalWhepPacketDeepClone := strings .EqualFold (os .Getenv (environment .WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS ), "true" )
99- experimentalWhepPacketDeepCloneToChannel := strings .EqualFold (os .Getenv (environment .WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS_TO_CHANNEL ), "true" )
100-
10179 id := remoteTrack .RID ()
10280
10381 if id == "" {
@@ -225,102 +203,23 @@ func (whip *WhipSession) VideoWriter(remoteTrack *webrtc.TrackRemote, streamKey
225203 sessions = sessionsAny .(map [string ]* whep.WhepSession )
226204 }
227205
228- switch {
229- case experimentalWhepPacketDeepClone :
230- sendVideoClonedPacketToWhep (
231- id ,
232- sessions ,
233- rtpPkt ,
234- codec ,
235- isKeyframe ,
236- timeDiff ,
237- sequenceDiff )
238-
239- case experimentalWhepPacketDeepCloneToChannel :
240- sendVideoClonedPacketToWhepChannel (
241- id ,
242- sessions ,
243- rtpPkt ,
244- codec ,
245- isKeyframe ,
246- timeDiff ,
247- sequenceDiff )
248-
249- default :
250- sendVideoSharedPacketToWhep (id ,
251- sessions ,
252- codecs.TrackPacket {
253- Layer : id ,
254- Packet : rtpPkt ,
255- Codec : codec ,
256- IsKeyframe : isKeyframe ,
257- TimeDiff : timeDiff ,
258- SequenceDiff : sequenceDiff ,
259- })
260- }
261- }
262- }
263-
264- func sendVideoClonedPacketToWhepChannel (id string ,
265- sessions map [string ]* whep.WhepSession ,
266- rtpPkt * rtp.Packet ,
267- codec codecs.TrackCodeType ,
268- isKeyframe bool ,
269- timeDiff int64 ,
270- sequenceDiff int ) {
271- for _ , whepSession := range sessions {
272- if whepSession .IsSessionClosed .Load () || whepSession .VideoLayerCurrent .Load () != id {
273- continue
274- }
275-
276- pkt := codecs.TrackPacket {
277- Layer : id ,
278- Codec : codec ,
279- IsKeyframe : isKeyframe ,
280- TimeDiff : timeDiff ,
281- SequenceDiff : sequenceDiff ,
282- }
283- // Packet deep copy pr. listener
284- pktClone := * rtpPkt
285- pktClone .Payload = append ([]byte (nil ), rtpPkt .Payload ... )
286- pktClone .Extensions = append ([]rtp.Extension (nil ), rtpPkt .Extensions ... )
287- pkt .Packet = & pktClone
288-
289- select {
290- case <- whepSession .ActiveContext .Done ():
291- continue
292- case whepSession .VideoChannel <- pkt :
293- default : // Drop
294- whepSession .VideoPacketsDropped .Add (1 )
295- whepSession .IsWaitingForKeyframe .Store (true )
296- }
297- }
298- }
299-
300- func sendVideoSharedPacketToWhep (id string , sessions map [string ]* whep.WhepSession , packet codecs.TrackPacket ) {
301- for _ , whepSession := range sessions {
302- if whepSession .VideoLayerCurrent .Load () == id {
303- whepSession .SendVideoPacket (packet )
304- }
305- }
306- }
307-
308- func sendVideoClonedPacketToWhep (id string , sessions map [string ]* whep.WhepSession , rtpPkt * rtp.Packet , codec codecs.TrackCodeType , isKeyframe bool , timeDiff int64 , sequenceDiff int ) {
309- for _ , whepSession := range sessions {
310- if whepSession .VideoLayerCurrent .Load () == id {
311- // Packet deep copy pr. listener
312- pktClone := * rtpPkt
313- pktClone .Payload = append ([]byte (nil ), rtpPkt .Payload ... )
314- pktClone .Extensions = append ([]rtp.Extension (nil ), rtpPkt .Extensions ... )
315-
316- whepSession .SendVideoPacket (codecs.TrackPacket {
206+ sendVideoPacketToWhep (id ,
207+ sessions ,
208+ codecs.TrackPacket {
317209 Layer : id ,
318- Packet : & pktClone ,
210+ Packet : rtpPkt ,
319211 Codec : codec ,
320212 IsKeyframe : isKeyframe ,
321213 TimeDiff : timeDiff ,
322214 SequenceDiff : sequenceDiff ,
323215 })
216+ }
217+ }
218+
219+ func sendVideoPacketToWhep (id string , sessions map [string ]* whep.WhepSession , packet codecs.TrackPacket ) {
220+ for _ , whepSession := range sessions {
221+ if whepSession .VideoLayerCurrent .Load () == id {
222+ whepSession .SendVideoPacket (packet )
324223 }
325224 }
326225}
0 commit comments