package streammiddlewares // import ( // "encoding/json" // "github.com/asticode/go-astits" // "github.com/flavioribeiro/donut/internal/entities" // "github.com/flavioribeiro/donut/internal/mapper" // "go.uber.org/fx" // ) // type eia608Middleware struct{} // type EIA608Response struct { // fx.Out // EIA608Middleware entities.StreamMiddleware `group:"middlewares"` // } // // TODO: migrate to donutparameters.onEvent api // // NewEIA608 creates a new EIA608 middleware // func NewEIA608() EIA608Response { // return EIA608Response{ // EIA608Middleware: &eia608Middleware{}, // } // } // // Act parses and send eia608 data from mpeg-ts to metadata channel // func (*eia608Middleware) Act(mpegTSDemuxData *astits.DemuxerData, sp *entities.StreamParameters) error { // vs := sp.ServerStreamInfo.VideoStreams() // eia608Reader := newEIA608Reader() // for _, v := range vs { // if mpegTSDemuxData.PES != nil && v.Codec == entities.H264 { // captions, err := eia608Reader.parse(mpegTSDemuxData.PES) // if err != nil { // return err // } // if captions != "" { // captionsMsg, err := eia608Reader.buildCaptionsMessage(mpegTSDemuxData.PES.Header.OptionalHeader.PTS, captions) // if err != nil { // return err // } // sp.MetadataTrack.SendText(captionsMsg) // } // } // } // return nil // } // type streamInfoMiddleware struct { // m *mapper.Mapper // } // type StreamInfoResponse struct { // fx.Out // StreamInfoMiddleware entities.StreamMiddleware `group:"middlewares"` // } // // NewStreamInfo creates a new StreamInfo middleware // func NewStreamInfo(m *mapper.Mapper) StreamInfoResponse { // return StreamInfoResponse{ // StreamInfoMiddleware: &streamInfoMiddleware{m: m}, // } // } // // Act parses and send StreamInfo data from mpeg-ts to metadata channel // func (s *streamInfoMiddleware) Act(mpegTSDemuxData *astits.DemuxerData, sp *entities.StreamParameters) error { // var streams []entities.Stream // // TODO: check if it makes sense to move this code to a mapper // if mpegTSDemuxData.PMT != nil { // for _, es := range mpegTSDemuxData.PMT.ElementaryStreams { // streams = append(streams, s.m.FromStreamTypeToEntityStream(es)) // } // } // msgs := s.m.FromStreamInfoToEntityMessages(&entities.StreamInfo{Streams: streams}) // for _, m := range msgs { // msg, err := json.Marshal(m) // if err != nil { // return err // } // sp.MetadataTrack.SendText(string(msg)) // } // return nil // }