2025-03-18 10:20:12 +05:00

38 lines
804 B
Go

package rtsp
import (
"bytes"
"fmt"
"github.com/bluenviron/mediacommon/v2/pkg/codecs/g711"
"github.com/gen2brain/aac-go"
)
// ConvertG711ToAAC converts PCM to AAC.
func ConvertG711ToAAC(g711Samples []byte, mulaw bool) ([]byte, error) {
var pcmSamples []byte
if mulaw {
pcmSamples = g711.DecodeMulaw(g711Samples)
} else {
pcmSamples = g711.DecodeAlaw(g711Samples)
}
var buf bytes.Buffer
opts := &aac.Options{
SampleRate: 8000, // Исходная частота G711
NumChannels: 1,
}
enc, err := aac.NewEncoder(&buf, opts)
if err != nil {
return nil, fmt.Errorf("error creating encoder: %v", err)
}
defer enc.Close()
r := bytes.NewReader(pcmSamples)
if err := enc.Encode(r); err != nil {
return nil, fmt.Errorf("error encoding: %v", err)
}
return buf.Bytes(), nil
}