diff --git a/internal/mp4/ws.go b/internal/mp4/ws.go index 08d7da02..5b3f2eb5 100644 --- a/internal/mp4/ws.go +++ b/internal/mp4/ws.go @@ -5,10 +5,8 @@ import ( "github.com/AlexxIT/go2rtc/internal/api" "github.com/AlexxIT/go2rtc/internal/api/ws" "github.com/AlexxIT/go2rtc/internal/streams" - "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/mp4" "github.com/AlexxIT/go2rtc/pkg/tcp" - "strings" ) func handlerWSMSE(tr *ws.Transport, msg *ws.Message) error { @@ -25,7 +23,7 @@ func handlerWSMSE(tr *ws.Transport, msg *ws.Message) error { if codecs := msg.String(); codecs != "" { log.Trace().Str("codecs", codecs).Msgf("[mp4] new WS/MSE consumer") - cons.Medias = parseMedias(codecs, true) + cons.Medias = mp4.ParseCodecs(codecs, true) } cons.Listen(func(msg any) { @@ -73,7 +71,7 @@ func handlerWSMP4(tr *ws.Transport, msg *ws.Message) error { if codecs := msg.String(); codecs != "" { log.Trace().Str("codecs", codecs).Msgf("[mp4] new WS/MP4 consumer") - cons.Medias = parseMedias(codecs, false) + cons.Medias = mp4.ParseCodecs(codecs, false) } cons.Listen(func(msg any) { @@ -95,51 +93,3 @@ func handlerWSMP4(tr *ws.Transport, msg *ws.Message) error { return nil } - -func parseMedias(codecs string, parseAudio bool) (medias []*core.Media) { - var videos []*core.Codec - var audios []*core.Codec - - for _, name := range strings.Split(codecs, ",") { - switch name { - case mp4.MimeH264: - codec := &core.Codec{Name: core.CodecH264} - videos = append(videos, codec) - case mp4.MimeH265: - codec := &core.Codec{Name: core.CodecH265} - videos = append(videos, codec) - case mp4.MimeAAC: - codec := &core.Codec{Name: core.CodecAAC} - audios = append(audios, codec) - case mp4.MimeFlac: - audios = append(audios, - &core.Codec{Name: core.CodecPCMA}, - &core.Codec{Name: core.CodecPCMU}, - &core.Codec{Name: core.CodecPCM}, - ) - case mp4.MimeOpus: - codec := &core.Codec{Name: core.CodecOpus} - audios = append(audios, codec) - } - } - - if videos != nil { - media := &core.Media{ - Kind: core.KindVideo, - Direction: core.DirectionSendonly, - Codecs: videos, - } - medias = append(medias, media) - } - - if audios != nil && parseAudio { - media := &core.Media{ - Kind: core.KindAudio, - Direction: core.DirectionSendonly, - Codecs: audios, - } - medias = append(medias, media) - } - - return -} diff --git a/pkg/mp4/helpers.go b/pkg/mp4/helpers.go index 174dc48d..fc2a9cf9 100644 --- a/pkg/mp4/helpers.go +++ b/pkg/mp4/helpers.go @@ -1,6 +1,9 @@ package mp4 -import "github.com/AlexxIT/go2rtc/pkg/core" +import ( + "github.com/AlexxIT/go2rtc/pkg/core" + "strings" +) // ParseQuery - like usual parse, but with mp4 param handler func ParseQuery(query map[string][]string) []*core.Media { @@ -48,6 +51,54 @@ func ParseQuery(query map[string][]string) []*core.Media { return core.ParseQuery(query) } +func ParseCodecs(codecs string, parseAudio bool) (medias []*core.Media) { + var videos []*core.Codec + var audios []*core.Codec + + for _, name := range strings.Split(codecs, ",") { + switch name { + case MimeH264: + codec := &core.Codec{Name: core.CodecH264} + videos = append(videos, codec) + case MimeH265: + codec := &core.Codec{Name: core.CodecH265} + videos = append(videos, codec) + case MimeAAC: + codec := &core.Codec{Name: core.CodecAAC} + audios = append(audios, codec) + case MimeFlac: + audios = append(audios, + &core.Codec{Name: core.CodecPCMA}, + &core.Codec{Name: core.CodecPCMU}, + &core.Codec{Name: core.CodecPCM}, + ) + case MimeOpus: + codec := &core.Codec{Name: core.CodecOpus} + audios = append(audios, codec) + } + } + + if videos != nil { + media := &core.Media{ + Kind: core.KindVideo, + Direction: core.DirectionSendonly, + Codecs: videos, + } + medias = append(medias, media) + } + + if audios != nil && parseAudio { + media := &core.Media{ + Kind: core.KindAudio, + Direction: core.DirectionSendonly, + Codecs: audios, + } + medias = append(medias, media) + } + + return +} + const ( stateNone byte = iota stateInit