recording audio is corrected

This commit is contained in:
Сергей Петров 2025-02-24 10:54:05 +05:00
parent b5c008887d
commit 47191f4be5
3 changed files with 25 additions and 14 deletions

View File

@ -16,6 +16,7 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtph264"
"github.com/gen2brain/aac-go"
"github.com/pion/rtp"
"github.com/zaf/g711"
)
var (
@ -62,6 +63,7 @@ func main() {
g711Format = media.Formats[0].(*format.G711)
}
}
if h264Format == nil || g711Format == nil {
log.Fatalln("Форматы не найдены")
}
@ -71,10 +73,6 @@ func main() {
if err != nil {
log.Fatalln("Ошибка создания декодера H264:", err)
}
decoderG711, err := g711Format.CreateDecoder()
if err != nil {
log.Fatalln("Ошибка создания декодера G711:", err)
}
// Обработка RTP-пакетов: для видео запись NAL-ов с префиксом, для аудио запись PCM-данных.
client.OnPacketRTPAny(func(medi *description.Media, forma format.Format, pkt *rtp.Packet) {
@ -98,18 +96,27 @@ func main() {
}
}
case *format.G711:
samples, err := decoderG711.Decode(pkt)
if err != nil {
log.Printf("Ошибка декодирования G711: %v", err)
return
if strings.Contains(forma.RTPMap(), "PCMA") {
sampleG711a := g711.DecodeAlaw(pkt.Payload)
defer fileMu.Lock()
defer fileMu.Unlock()
if currentAudioFile != nil {
if _, err := currentAudioFile.Write(sampleG711a); err != nil {
log.Printf("Ошибка записи аудио: %v", err)
}
}
} else if strings.Contains(forma.RTPMap(), "PCMU") {
sampleG711u := g711.DecodeUlaw(pkt.Payload)
fileMu.Lock()
defer fileMu.Unlock()
if currentAudioFile != nil {
if _, err := currentAudioFile.Write(samples); err != nil {
if _, err := currentAudioFile.Write(sampleG711u); err != nil {
log.Printf("Ошибка записи аудио: %v", err)
}
}
} else {
log.Println("Аудиокодек не идентифицирован")
}
}
})
@ -128,6 +135,7 @@ func main() {
waitDuration := nextHour.Sub(now)
fmt.Printf("Ожидание до начала записи: %v\n", waitDuration)
time.Sleep(waitDuration)
log.Println("Начало записи фрагмента")
// Создаем начальные файлы
initialTimestamp := time.Now().Format("15-04_02-01-2006")

View File

@ -14,6 +14,7 @@ require (
github.com/pion/randutil v0.1.0 // indirect
github.com/pion/rtcp v1.2.15 // indirect
github.com/pion/sdp/v3 v3.0.10 // indirect
github.com/zaf/g711 v1.4.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/sys v0.29.0 // indirect
)

View File

@ -26,6 +26,8 @@ github.com/youpy/go-wav v0.3.2 h1:NLM8L/7yZ0Bntadw/0h95OyUsen+DQIVf9gay+SUsMU=
github.com/youpy/go-wav v0.3.2/go.mod h1:0FCieAXAeSdcxFfwLpRuEo0PFmAoc+8NU34h7TUvk50=
github.com/zaf/g711 v0.0.0-20190814101024-76a4a538f52b h1:QqixIpc5WFIqTLxB3Hq8qs0qImAgBdq0p6rq2Qdl634=
github.com/zaf/g711 v0.0.0-20190814101024-76a4a538f52b/go.mod h1:T2h1zV50R/q0CVYnsQOQ6L7P4a2ZxH47ixWcMXFGyx8=
github.com/zaf/g711 v1.4.0 h1:XZYkjjiAg9QTBnHqEg37m2I9q3IIDv5JRYXs2N8ma7c=
github.com/zaf/g711 v1.4.0/go.mod h1:eCDXt3dSp/kYYAoooba7ukD/Q75jvAaS4WOMr0l1Roo=
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=