New logic to write .insit files.

This commit is contained in:
Сергей Петров 2025-04-07 17:47:36 +05:00
parent 1efd15ddc7
commit a53bf0c150

View File

@ -20,6 +20,7 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/base"
"github.com/bluenviron/gortsplib/v4/pkg/description"
"github.com/bluenviron/gortsplib/v4/pkg/format"
"github.com/bluenviron/mediacommon/pkg/codecs/h264"
"github.com/bluenviron/mediacommon/v2/pkg/codecs/g711"
"github.com/pion/rtp"
"go.uber.org/zap"
@ -49,7 +50,10 @@ func StartWriter() {
// rtsp processes RTSP protocol.
func rtsp(dir string, period int, link string, number int) error {
// Увеличиваем счетчик при старте обработки камеры
var marker bool
// Calculate the number of active cameras (number of active rtsp functions).
metrics.ActiveCameras.Inc()
defer metrics.ActiveCameras.Dec()
@ -599,6 +603,25 @@ func rtsp(dir string, period int, link string, number int) error {
cam.Warn("process packet error:", zap.Error(err))
}
for _, nalu := range au {
typ := h264.NALUType(nalu[0] & 0x1F)
switch typ {
case h264.NALUTypeSPS:
continue
case h264.NALUTypePPS:
continue
case h264.NALUTypeAccessUnitDelimiter:
continue
case h264.NALUTypeIDR:
marker = true
time.Sleep(time.Millisecond)
}
}
if au != nil {
// Add appropriate lines to the interleaved packet.
seg.Packet.Type = storage.PacketTypeH264
@ -612,6 +635,8 @@ func rtsp(dir string, period int, link string, number int) error {
}
}
marker = false
//// Encode the access unit into MPEG-TS.
//err = currentMpegtsMuxer.WriteH264(pts, au)
//if err != nil {
@ -687,18 +712,9 @@ func rtsp(dir string, period int, link string, number int) error {
// Rotate files.
go func() {
for range ticker.C {
/*
// Logic for rotation files.
currentMpegtsMuxer.Close()
currentMpegtsMuxer.FileName = fn.SetNumNTime()
err = currentMpegtsMuxer.Initialize()
if err != nil {
log.Printf("[%v-%v]: init muxer error: %v\n", videoFormat, audioFormat, err)
return
}
*/
fileChanged := false
for {
if marker {
file.Close()
file, err = os.Create(fn.SetNumNTime("insit"))
@ -736,6 +752,16 @@ func rtsp(dir string, period int, link string, number int) error {
cam.Info("new file for recording created")
log.Println("new file for recording created")
fileChanged = true
break
}
if fileChanged {
fileChanged = false
break
}
}
}
}()