recording audio is corrected
This commit is contained in:
parent
b5c008887d
commit
47191f4be5
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/bluenviron/gortsplib/v4/pkg/format/rtph264"
|
"github.com/bluenviron/gortsplib/v4/pkg/format/rtph264"
|
||||||
"github.com/gen2brain/aac-go"
|
"github.com/gen2brain/aac-go"
|
||||||
"github.com/pion/rtp"
|
"github.com/pion/rtp"
|
||||||
|
"github.com/zaf/g711"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -62,6 +63,7 @@ func main() {
|
|||||||
g711Format = media.Formats[0].(*format.G711)
|
g711Format = media.Formats[0].(*format.G711)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if h264Format == nil || g711Format == nil {
|
if h264Format == nil || g711Format == nil {
|
||||||
log.Fatalln("Форматы не найдены")
|
log.Fatalln("Форматы не найдены")
|
||||||
}
|
}
|
||||||
@ -71,10 +73,6 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Ошибка создания декодера H264:", err)
|
log.Fatalln("Ошибка создания декодера H264:", err)
|
||||||
}
|
}
|
||||||
decoderG711, err := g711Format.CreateDecoder()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln("Ошибка создания декодера G711:", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Обработка RTP-пакетов: для видео – запись NAL-ов с префиксом, для аудио – запись PCM-данных.
|
// Обработка RTP-пакетов: для видео – запись NAL-ов с префиксом, для аудио – запись PCM-данных.
|
||||||
client.OnPacketRTPAny(func(medi *description.Media, forma format.Format, pkt *rtp.Packet) {
|
client.OnPacketRTPAny(func(medi *description.Media, forma format.Format, pkt *rtp.Packet) {
|
||||||
@ -98,18 +96,27 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case *format.G711:
|
case *format.G711:
|
||||||
samples, err := decoderG711.Decode(pkt)
|
if strings.Contains(forma.RTPMap(), "PCMA") {
|
||||||
if err != nil {
|
sampleG711a := g711.DecodeAlaw(pkt.Payload)
|
||||||
log.Printf("Ошибка декодирования G711: %v", err)
|
defer fileMu.Lock()
|
||||||
return
|
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()
|
fileMu.Lock()
|
||||||
defer fileMu.Unlock()
|
defer fileMu.Unlock()
|
||||||
if currentAudioFile != nil {
|
if currentAudioFile != nil {
|
||||||
if _, err := currentAudioFile.Write(samples); err != nil {
|
if _, err := currentAudioFile.Write(sampleG711u); err != nil {
|
||||||
log.Printf("Ошибка записи аудио: %v", err)
|
log.Printf("Ошибка записи аудио: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.Println("Аудиокодек не идентифицирован")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -128,6 +135,7 @@ func main() {
|
|||||||
waitDuration := nextHour.Sub(now)
|
waitDuration := nextHour.Sub(now)
|
||||||
fmt.Printf("Ожидание до начала записи: %v\n", waitDuration)
|
fmt.Printf("Ожидание до начала записи: %v\n", waitDuration)
|
||||||
time.Sleep(waitDuration)
|
time.Sleep(waitDuration)
|
||||||
|
log.Println("Начало записи фрагмента")
|
||||||
|
|
||||||
// Создаем начальные файлы
|
// Создаем начальные файлы
|
||||||
initialTimestamp := time.Now().Format("15-04_02-01-2006")
|
initialTimestamp := time.Now().Format("15-04_02-01-2006")
|
||||||
|
@ -14,6 +14,7 @@ require (
|
|||||||
github.com/pion/randutil v0.1.0 // indirect
|
github.com/pion/randutil v0.1.0 // indirect
|
||||||
github.com/pion/rtcp v1.2.15 // indirect
|
github.com/pion/rtcp v1.2.15 // indirect
|
||||||
github.com/pion/sdp/v3 v3.0.10 // 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/net v0.34.0 // indirect
|
||||||
golang.org/x/sys v0.29.0 // indirect
|
golang.org/x/sys v0.29.0 // indirect
|
||||||
)
|
)
|
||||||
|
@ -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/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 h1:QqixIpc5WFIqTLxB3Hq8qs0qImAgBdq0p6rq2Qdl634=
|
||||||
github.com/zaf/g711 v0.0.0-20190814101024-76a4a538f52b/go.mod h1:T2h1zV50R/q0CVYnsQOQ6L7P4a2ZxH47ixWcMXFGyx8=
|
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 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||||
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user