1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package record
- import (
- "go.uber.org/zap"
- . "m7s.live/engine/v4"
- "m7s.live/engine/v4/codec"
- "m7s.live/engine/v4/track"
- )
- type RawRecorder struct {
- Recorder
- IsAudio bool
- }
- func NewRawRecorder() (r *RawRecorder) {
- r = &RawRecorder{}
- r.Record = RecordPluginConfig.Raw
- return r
- }
- func NewRawAudioRecorder() (r *RawRecorder) {
- r = &RawRecorder{IsAudio: true}
- r.Record = RecordPluginConfig.RawAudio
- return r
- }
- func (r *RawRecorder) Start(streamPath string) error {
- r.ID = streamPath + "/raw"
- if r.IsAudio {
- r.ID += "_audio"
- }
- return r.start(r, streamPath, SUBTYPE_RAW)
- }
- func (r *RawRecorder) Close() (err error) {
- if r.File != nil {
- err = r.File.Close()
- }
- return
- }
- func (r *RawRecorder) OnEvent(event any) {
- switch v := event.(type) {
- case FileWr:
- r.SetIO(v)
- case *RawRecorder:
- r.Recorder.OnEvent(event)
- case *track.Video:
- if r.IsAudio {
- break
- }
- if r.Ext == "." {
- if v.CodecID == codec.CodecID_H264 {
- r.Ext = ".h264"
- } else {
- r.Ext = ".h265"
- }
- }
- r.AddTrack(v)
- case *track.Audio:
- if !r.IsAudio {
- break
- }
- if r.Ext == "." {
- switch v.CodecID {
- case codec.CodecID_AAC:
- r.Ext = ".aac"
- case codec.CodecID_PCMA:
- r.Ext = ".pcma"
- case codec.CodecID_PCMU:
- r.Ext = ".pcmu"
- }
- }
- r.AddTrack(v)
- case AudioFrame:
- r.Recorder.OnEvent(event)
- if _, err := v.WriteRawTo(r); err != nil {
- r.Stop(zap.Error(err))
- }
- case VideoFrame:
- r.Recorder.OnEvent(event)
- if _, err := v.WriteAnnexBTo(r); err != nil {
- r.Stop(zap.Error(err))
- }
- default:
- r.IO.OnEvent(v)
- }
- }
|