Skip to content

Commit 6e27c54

Browse files
author
Datanoise
committed
fix: disable WebRTC burst and add signal level monitoring to player
1 parent 9cbe957 commit 6e27c54

4 files changed

Lines changed: 28 additions & 5 deletions

File tree

relay/transcode.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (tm *TranscoderManager) performTranscode(ctx context.Context, inst *Transco
130130
// 2. Decode (assuming MP3 input for now as standard)
131131
decoder, err := mp3.NewDecoder(reader)
132132
if err != nil {
133-
logrus.WithError(err).Error("Failed to initialize decoder")
133+
logrus.WithError(err).Errorf("Transcoder %s: Failed to initialize decoder for input %s", inst.Config.Name, inst.Config.InputMount)
134134
return
135135
}
136136

relay/webrtc.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,15 @@ func (wm *WebRTCManager) streamToTrack(pc *webrtc.PeerConnection, track *webrtc.
9999
})
100100

101101
id := fmt.Sprintf("webrtc-%d", time.Now().UnixNano())
102-
offset, signal := stream.Subscribe(id, 64*1024)
102+
// For WebRTC we start at the current head (no burst)
103+
offset, signal := stream.Subscribe(id, 0)
103104
defer stream.Unsubscribe(id)
104105

105106
// Seek to next "OggS" magic
106107
syncBuf := make([]byte, 16384)
107108
foundSync := false
108109
var searched int64 = 0
109-
for !foundSync && searched < 512*1024 { // Safeguard: stop after 512KB
110+
for !foundSync && searched < 512*1024 {
110111
select {
111112
case <-ctx.Done():
112113
return
@@ -148,6 +149,8 @@ func (wm *WebRTCManager) streamToTrack(pc *webrtc.PeerConnection, track *webrtc.
148149
return
149150
}
150151

152+
logrus.Infof("WebRTC: Beginning packet transmission for %s", stream.MountName)
153+
sentCount := 0
151154
for {
152155
packet, err := opusReader.ReadAudioPacket()
153156
if err != nil {
@@ -163,5 +166,9 @@ func (wm *WebRTCManager) streamToTrack(pc *webrtc.PeerConnection, track *webrtc.
163166
}); err != nil {
164167
return
165168
}
169+
sentCount++
170+
if sentCount%100 == 0 {
171+
logrus.Debugf("WebRTC: Sent 100 packets to %s", stream.MountName)
172+
}
166173
}
167174
}

server/server.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1824,7 +1824,9 @@ func (s *Server) handleWebRTCOffer(w http.ResponseWriter, r *http.Request) {
18241824

18251825
answer, err := s.WebRTCM.HandleOffer(mount, offer)
18261826
if err != nil {
1827-
http.Error(w, err.Error(), http.StatusInternalServerError)
1827+
w.Header().Set("Content-Type", "application/json")
1828+
w.WriteHeader(http.StatusBadRequest)
1829+
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
18281830
return
18291831
}
18301832

server/templates/webrtc_player.html

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ <h1>{{.Stream.Name}}</h1>
150150
});
151151

152152
if (!response.ok) {
153-
const err = await response.text();
153+
const data = await response.json();
154+
const err = data.error || "Unknown signaling error";
154155
stateEl.textContent = "Error: " + err;
155156
log('ERROR', `Signaling failed: ${err}`);
156157
btn.disabled = false;
@@ -174,17 +175,30 @@ <h1>{{.Stream.Name}}</h1>
174175
const bufferLength = analyzer.frequencyBinCount;
175176
const dataArray = new Uint8Array(bufferLength);
176177

178+
let lastLevelReport = 0;
179+
177180
function draw() {
178181
requestAnimationFrame(draw);
179182
analyzer.getByteFrequencyData(dataArray);
180183
cctx.clearRect(0, 0, canvas.width, canvas.height);
184+
185+
let sum = 0;
181186
const barWidth = (canvas.width / bufferLength) * 2.5;
182187
let x = 0;
183188
for (let i = 0; i < bufferLength; i++) {
184189
const barHeight = dataArray[i] / 2;
185190
cctx.fillStyle = '#38bdf8';
186191
cctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);
187192
x += barWidth + 1;
193+
sum += dataArray[i];
194+
}
195+
196+
// Report signal level every 2 seconds
197+
const avg = sum / bufferLength;
198+
const now = Date.now();
199+
if (now - lastLevelReport > 2000) {
200+
log('AUDIO', `Signal Level: ${Math.round(avg)}`);
201+
lastLevelReport = now;
188202
}
189203
}
190204
draw();

0 commit comments

Comments
 (0)