Skip to content

Commit c7122a0

Browse files
committed
Remove code paths that do copy
Copy is already done for encryption in Pion.
1 parent 32addba commit c7122a0

5 files changed

Lines changed: 20 additions & 174 deletions

File tree

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
- [Network Test on Start](#network-test-on-start)
2121
- [Design](#design)
2222

23-
## What is Broadcast Box
23+
## What is Broadcast Box
2424

2525
Broadcast Box lets you broadcast to others in sub-second time. It was designed
2626
to be simple to use and easily modifiable. We wrote Broadcast Box to show off some
@@ -257,8 +257,6 @@ The frontend can be configured by passing these URL Parameters.
257257
| `TCP_MUX_ADDRESS` | Address to serve WebRTC traffic over TCP. |
258258
| `TCP_MUX_FORCE` | Forces WebRTC traffic to use TCP only. |
259259
| `APPEND_CANDIDATE` | Appends ICE candidates not generated by the agent. |
260-
| `WHEP_SESSION_AUDIOCHANNEL_SIZE` | Tunes the AudioChannel size for WHEP sessions. |
261-
| `WHEP_SESSION_VIDEOCHANNEL_SIZE` | Tunes the VideoChannel size for WHEP sessions. |
262260

263261
### STUN/TURN Servers
264262

internal/environment/variables.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,4 @@ const (
6060
LOGGING_NEW_FILE_ON_STARTUP = "LOGGING_NEW_FILE_ON_STARTUP"
6161
LOGGING_API_ENABLED = "LOGGING_API_ENABLED"
6262
LOGGING_API_KEY = "LOGGING_API_KEY"
63-
64-
// WHEP SESSION
65-
WHEP_SESSION_AUDIOCHANNEL_SIZE = "WHEP_SESSION_AUDIOCHANNEL_SIZE"
66-
WHEP_SESSION_VIDEOCHANNEL_SIZE = "WHEP_SESSION_VIDEOCHANNEL_SIZE"
67-
WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS = "WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS"
68-
WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS_TO_CHANNEL = "WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS_TO_CHANNEL"
6963
)

internal/webrtc/sessions/whep/routines.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ package whep
22

33
import (
44
"log"
5-
"os"
6-
"strings"
75
"time"
8-
9-
"github.com/glimesh/broadcast-box/internal/environment"
106
)
117

128
func (whepSession *WhepSession) handleCalculatedValues() {
@@ -30,26 +26,3 @@ func (whepSession *WhepSession) handleCalculatedValues() {
3026
}
3127
}
3228
}
33-
34-
func (whepSession *WhepSession) handleVideoChannel() {
35-
experimentalWhepPacketDeepCloneToChannel := strings.EqualFold(os.Getenv(environment.WHEP_EXPERIMENTAL_DEEPCOPY_PACKETS_TO_CHANNEL), "true")
36-
37-
if !experimentalWhepPacketDeepCloneToChannel {
38-
return
39-
}
40-
41-
for {
42-
select {
43-
case <-whepSession.ActiveContext.Done():
44-
log.Println("WhepSession.HandleVideoChannel.Close")
45-
return
46-
case packet, ok := <-whepSession.VideoChannel:
47-
if !ok {
48-
log.Println("WhepSession.HandleCalculatedValues.PacketError")
49-
return
50-
}
51-
52-
whepSession.SendVideoPacket(packet)
53-
}
54-
}
55-
}

internal/webrtc/sessions/whep/whep.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,14 @@ package whep
33
import (
44
"context"
55
"log"
6-
"os"
7-
"strconv"
86

9-
"github.com/glimesh/broadcast-box/internal/environment"
107
"github.com/glimesh/broadcast-box/internal/webrtc/codecs"
118
"github.com/pion/webrtc/v4"
129
)
1310

1411
// Create and start a new WHEP session
1512
func CreateNewWhep(whepSessionId string, audioTrack *codecs.TrackMultiCodec, audioLayer string, videoTrack *codecs.TrackMultiCodec, videoLayer string, peerConnection *webrtc.PeerConnection) (whepSession *WhepSession) {
1613
log.Println("WhepSession.CreateNewWhep", whepSessionId)
17-
audioChannelSizeStr := os.Getenv(environment.WHEP_SESSION_AUDIOCHANNEL_SIZE)
18-
videoChannelSizeStr := os.Getenv(environment.WHEP_SESSION_VIDEOCHANNEL_SIZE)
19-
20-
audioChannelSize, audioOk := strconv.Atoi(audioChannelSizeStr)
21-
videoChannelSize, videoOk := strconv.Atoi(videoChannelSizeStr)
22-
23-
if audioOk != nil || videoOk != nil {
24-
log.Println("WhepSession.CreateNewWhep.AudioVideoChannelSize: Audio/Video channel sizes must be a valid number")
25-
audioChannelSize = 50
26-
videoChannelSize = 50
27-
}
2814

2915
activeContext, activeContextCancel := context.WithCancel(context.Background())
3016
whepSession = &WhepSession{
@@ -33,8 +19,6 @@ func CreateNewWhep(whepSessionId string, audioTrack *codecs.TrackMultiCodec, aud
3319
VideoTrack: videoTrack,
3420
AudioTimestamp: 5000,
3521
VideoTimestamp: 5000,
36-
AudioChannel: make(chan codecs.TrackPacket, audioChannelSize),
37-
VideoChannel: make(chan codecs.TrackPacket, videoChannelSize),
3822
WhipEventsChannel: make(chan any, 100),
3923
SseEventsChannel: make(chan any, 100),
4024
ConnectionChannel: make(chan any, 100),
@@ -52,8 +36,6 @@ func CreateNewWhep(whepSessionId string, audioTrack *codecs.TrackMultiCodec, aud
5236

5337
// Start WHEP go routines
5438
go whepSession.handleCalculatedValues()
55-
go whepSession.handleVideoChannel()
56-
5739
return whepSession
5840
}
5941

internal/webrtc/sessions/whip/writers.go

Lines changed: 19 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2422
func (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

9778
func (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

Comments
 (0)