mirror of
https://github.com/nestriness/nestri.git
synced 2026-03-17 03:43:07 +02:00
feat: WIP s6-overlay and friends
This commit is contained in:
@@ -3,6 +3,7 @@ package shared
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/pion/rtp"
|
||||
"io"
|
||||
"log/slog"
|
||||
"relay/internal/common"
|
||||
@@ -104,6 +105,17 @@ func (p *Participant) Close() {
|
||||
}
|
||||
|
||||
func (p *Participant) packetWriter() {
|
||||
flags := common.GetFlags()
|
||||
playoutExt := &rtp.PlayoutDelayExtension{
|
||||
MinDelay: uint16(flags.PlayoutDelayMin),
|
||||
MaxDelay: uint16(flags.PlayoutDelayMax),
|
||||
}
|
||||
playoutPayload, err := playoutExt.Marshal()
|
||||
if err != nil {
|
||||
slog.Error("Failed to marshal PlayoutDelayExtension for participant", "participant", p.ID, "err", err)
|
||||
return
|
||||
}
|
||||
|
||||
for pkt := range p.packetQueue {
|
||||
var track *webrtc.TrackLocalStaticRTP
|
||||
|
||||
@@ -114,6 +126,14 @@ func (p *Participant) packetWriter() {
|
||||
track = p.VideoTrack
|
||||
}
|
||||
|
||||
// Use PlayoutDelayExtension for low latency, if set for this track kind
|
||||
if extID, ok := common.GetExtension(track.Kind(), common.ExtensionPlayoutDelay); ok {
|
||||
if err = pkt.packet.SetExtension(extID, playoutPayload); err != nil {
|
||||
slog.Error("Failed to set PlayoutDelayExtension for participant", "participant", p.ID, "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if track != nil {
|
||||
if err := track.WriteRTP(pkt.packet); err != nil && !errors.Is(err, io.ErrClosedPipe) {
|
||||
slog.Error("WriteRTP failed", "participant", p.ID, "kind", pkt.kind, "err", err)
|
||||
|
||||
Reference in New Issue
Block a user