Add AAC raw codec to MPEG-TS consumer
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
"github.com/AlexxIT/go2rtc/pkg/bits"
|
"github.com/AlexxIT/go2rtc/pkg/bits"
|
||||||
"github.com/AlexxIT/go2rtc/pkg/core"
|
"github.com/AlexxIT/go2rtc/pkg/core"
|
||||||
|
"github.com/pion/rtp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func IsADTS(b []byte) bool {
|
func IsADTS(b []byte) bool {
|
||||||
@@ -109,3 +110,22 @@ func CodecToADTS(codec *core.Codec) []byte {
|
|||||||
|
|
||||||
return wr.Bytes()
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mpegts
|
package mpegts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/AlexxIT/go2rtc/pkg/aac"
|
"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() {
|
if track.Codec.IsRTP() {
|
||||||
sender.Handler = aac.RTPToADTS(track.Codec, sender.Handler)
|
sender.Handler = aac.RTPToADTS(track.Codec, sender.Handler)
|
||||||
} else {
|
} else {
|
||||||
return errors.New("mpegts: aac not supported")
|
sender.Handler = aac.EncodeToADTS(track.Codec, sender.Handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user