New logic to write .insit files.
This commit is contained in:
parent
1efd15ddc7
commit
a53bf0c150
@ -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,55 +712,56 @@ 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()
|
||||
fileChanged := false
|
||||
for {
|
||||
if marker {
|
||||
file.Close()
|
||||
|
||||
err = currentMpegtsMuxer.Initialize()
|
||||
if err != nil {
|
||||
log.Printf("[%v-%v]: init muxer error: %v\n", videoFormat, audioFormat, err)
|
||||
return
|
||||
file, err = os.Create(fn.SetNumNTime("insit"))
|
||||
if err != nil {
|
||||
cam.Error("creating file error:", zap.Error(err))
|
||||
logger.Log.Error("creating file error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
seg = storage.Segment{
|
||||
Date: strconv.FormatInt(time.Now().Unix(), 10),
|
||||
Duration: strconv.Itoa(period),
|
||||
Packet: storage.InterleavedPacket{},
|
||||
}
|
||||
|
||||
// Write StreamID.
|
||||
if err := binary.Write(file, binary.LittleEndian, int32(len(cutURI))); err != nil {
|
||||
cam.Error("write StreamID length error:", zap.Error(err))
|
||||
logger.Log.Error("write StreamID length error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if _, err := file.Write([]byte(cutURI)); err != nil {
|
||||
cam.Error("write StreamID error:", zap.Error(err))
|
||||
logger.Log.Error("write StreamID error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// Write header of the file.
|
||||
err = storage.WriteHeader(file, seg)
|
||||
if err != nil {
|
||||
cam.Error("write header error:", zap.Error(err))
|
||||
logger.Log.Error("write header error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
cam.Info("new file for recording created")
|
||||
log.Println("new file for recording created")
|
||||
|
||||
fileChanged = true
|
||||
break
|
||||
}
|
||||
*/
|
||||
|
||||
file.Close()
|
||||
|
||||
file, err = os.Create(fn.SetNumNTime("insit"))
|
||||
if err != nil {
|
||||
cam.Error("creating file error:", zap.Error(err))
|
||||
logger.Log.Error("creating file error:", zap.Error(err))
|
||||
return
|
||||
if fileChanged {
|
||||
fileChanged = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
seg = storage.Segment{
|
||||
Date: strconv.FormatInt(time.Now().Unix(), 10),
|
||||
Duration: strconv.Itoa(period),
|
||||
Packet: storage.InterleavedPacket{},
|
||||
}
|
||||
|
||||
// Write StreamID.
|
||||
if err := binary.Write(file, binary.LittleEndian, int32(len(cutURI))); err != nil {
|
||||
cam.Error("write StreamID length error:", zap.Error(err))
|
||||
logger.Log.Error("write StreamID length error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if _, err := file.Write([]byte(cutURI)); err != nil {
|
||||
cam.Error("write StreamID error:", zap.Error(err))
|
||||
logger.Log.Error("write StreamID error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// Write header of the file.
|
||||
err = storage.WriteHeader(file, seg)
|
||||
if err != nil {
|
||||
cam.Error("write header error:", zap.Error(err))
|
||||
logger.Log.Error("write header error:", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
cam.Info("new file for recording created")
|
||||
log.Println("new file for recording created")
|
||||
}
|
||||
}()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user