diff --git a/pkg/aac/adts.go b/pkg/aac/adts.go index 4753c27b..483dcf4f 100644 --- a/pkg/aac/adts.go +++ b/pkg/aac/adts.go @@ -5,6 +5,7 @@ import ( "github.com/AlexxIT/go2rtc/pkg/bits" "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/pion/rtp" ) func IsADTS(b []byte) bool { @@ -109,3 +110,22 @@ func CodecToADTS(codec *core.Codec) []byte { return wr.Bytes() } + +func EncodeToADTS(codec *core.Codec, handler core.HandlerFunc) core.HandlerFunc { + adts := CodecToADTS(codec) + + return func(packet *rtp.Packet) { + if !IsADTS(packet.Payload) { + b := make([]byte, ADTSHeaderSize+len(packet.Payload)) + copy(b, adts) + copy(b[ADTSHeaderSize:], packet.Payload) + WriteADTSSize(b, uint16(len(b))) + + clone := *packet + clone.Payload = b + handler(&clone) + } else { + handler(packet) + } + } +} diff --git a/pkg/mpegts/consumer.go b/pkg/mpegts/consumer.go index b9be0c88..ad124397 100644 --- a/pkg/mpegts/consumer.go +++ b/pkg/mpegts/consumer.go @@ -1,7 +1,6 @@ package mpegts import ( - "errors" "io" "github.com/AlexxIT/go2rtc/pkg/aac" @@ -93,7 +92,7 @@ func (c *Consumer) AddTrack(media *core.Media, codec *core.Codec, track *core.Re if track.Codec.IsRTP() { sender.Handler = aac.RTPToADTS(track.Codec, sender.Handler) } else { - return errors.New("mpegts: aac not supported") + sender.Handler = aac.EncodeToADTS(track.Codec, sender.Handler) } }