diff --git a/cmd/rtsp/rtsp.go b/cmd/rtsp/rtsp.go index 0936201a..67e9997c 100644 --- a/cmd/rtsp/rtsp.go +++ b/cmd/rtsp/rtsp.go @@ -209,16 +209,27 @@ func initMedias(conn *rtsp.Conn) { for key, value := range conn.URL.Query() { switch key { case streamer.KindVideo, streamer.KindAudio: - for _, value := range value { + for _, name := range value { + name = strings.ToUpper(name) + + // check aliases + switch name { + case "COPY": + name = "" // pass empty codecs list + case "MJPEG": + name = streamer.CodecJPEG + case "AAC": + name = streamer.CodecAAC + } + media := &streamer.Media{ Kind: key, Direction: streamer.DirectionRecvonly, } - switch value { - case "", "copy": // pass empty codecs list - default: - codec := streamer.NewCodec(value) - media.Codecs = append(media.Codecs, codec) + // empty codecs match all codecs + if name != "" { + // empty clock rate and channels match any values + media.Codecs = []*streamer.Codec{{Name: name}} } conn.Medias = append(conn.Medias, media) diff --git a/pkg/streamer/media.go b/pkg/streamer/media.go index 5a6be1bb..c7dd30c3 100644 --- a/pkg/streamer/media.go +++ b/pkg/streamer/media.go @@ -129,22 +129,6 @@ type Codec struct { PayloadType uint8 } -func NewCodec(name string) *Codec { - name = strings.ToUpper(name) - switch name { - case CodecH264, CodecH265, CodecVP8, CodecVP9, CodecAV1, CodecJPEG: - return &Codec{Name: name, ClockRate: 90000} - case CodecPCMU, CodecPCMA: - return &Codec{Name: name, ClockRate: 8000} - case CodecOpus: - return &Codec{Name: name, ClockRate: 48000, Channels: 2} - case "MJPEG": - return &Codec{Name: CodecJPEG, ClockRate: 90000} - } - - panic(fmt.Sprintf("unsupported codec: %s", name)) -} - func (c *Codec) String() string { s := fmt.Sprintf("%d %s/%d", c.PayloadType, c.Name, c.ClockRate) if c.Channels > 0 {