54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package webrtc
|
|
|
|
import (
|
|
"github.com/pion/rtp"
|
|
"github.com/pion/webrtc/v4/pkg/media"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func (t *Track) updateExtension() {
|
|
if t.playoutDelayExtensionID == 0 {
|
|
t.playoutDelayExtensionID = 5
|
|
}
|
|
|
|
if t.playoutDelayExtensionData == nil || len(t.playoutDelayExtensionData) == 0 {
|
|
playoutDelay := &rtp.PlayoutDelayExtension{
|
|
MinDelay: 0,
|
|
MaxDelay: 0,
|
|
}
|
|
playoutDelayExtensionData, err := playoutDelay.Marshal()
|
|
if err == nil {
|
|
t.playoutDelayExtensionData = playoutDelayExtensionData
|
|
}
|
|
}
|
|
}
|
|
|
|
func (t *Track) writeVideoSample(sample media.Sample) error {
|
|
samples := uint32(sample.Duration.Seconds() * 90000)
|
|
packets := t.videoPacketizer.Packetize(sample.Data, samples)
|
|
|
|
for _, p := range packets {
|
|
p.Header.Extension = true
|
|
p.Header.ExtensionProfile = 0xBEDE
|
|
|
|
if err := p.Header.SetExtension(t.playoutDelayExtensionID, t.playoutDelayExtensionData); err != nil {
|
|
log.Errorf("Failed to set extension: %v", err)
|
|
return err
|
|
}
|
|
|
|
if err := t.video.WriteRTP(p); err != nil {
|
|
log.Errorf("failed to write RTP: %v", err)
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (t *Track) writeVideo(sample media.Sample) {
|
|
err := t.writeVideoSample(sample)
|
|
if err != nil {
|
|
log.Errorf("failed to write h264 video: %s", err)
|
|
}
|
|
}
|