mirror of
https://github.com/flavioribeiro/donut.git
synced 2025-09-27 03:15:54 +08:00
88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
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
|
|
// }
|