Add OR to RTSP Server codecs filter
This commit is contained in:
+7
-9
@@ -164,7 +164,13 @@ func tcpHandler(conn *rtsp.Conn) {
|
|||||||
|
|
||||||
conn.SessionName = app.UserAgent
|
conn.SessionName = app.UserAgent
|
||||||
|
|
||||||
initMedias(conn)
|
conn.Medias = streamer.ParseQuery(conn.URL.Query())
|
||||||
|
if conn.Medias == nil {
|
||||||
|
conn.Medias = []*streamer.Media{
|
||||||
|
{Kind: streamer.KindVideo, Direction: streamer.DirectionRecvonly},
|
||||||
|
{Kind: streamer.KindAudio, Direction: streamer.DirectionRecvonly},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := stream.AddConsumer(conn); err != nil {
|
if err := stream.AddConsumer(conn); err != nil {
|
||||||
log.Warn().Err(err).Str("stream", name).Msg("[rtsp]")
|
log.Warn().Err(err).Str("stream", name).Msg("[rtsp]")
|
||||||
@@ -261,12 +267,4 @@ func initMedias(conn *rtsp.Conn) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set default media candidates if query is empty
|
|
||||||
if conn.Medias == nil {
|
|
||||||
conn.Medias = []*streamer.Media{
|
|
||||||
{Kind: streamer.KindVideo, Direction: streamer.DirectionRecvonly},
|
|
||||||
{Kind: streamer.KindAudio, Direction: streamer.DirectionRecvonly},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-3
@@ -33,7 +33,7 @@ const (
|
|||||||
CodecAAC = "MPEG4-GENERIC"
|
CodecAAC = "MPEG4-GENERIC"
|
||||||
CodecOpus = "OPUS" // payloadType: 111
|
CodecOpus = "OPUS" // payloadType: 111
|
||||||
CodecG722 = "G722"
|
CodecG722 = "G722"
|
||||||
CodecMPA = "MPA" // payload: 14
|
CodecMP3 = "MPA" // payload: 14, aka MPEG-1 Layer III
|
||||||
|
|
||||||
CodecELD = "ELD" // AAC-ELD
|
CodecELD = "ELD" // AAC-ELD
|
||||||
)
|
)
|
||||||
@@ -44,7 +44,7 @@ func GetKind(name string) string {
|
|||||||
switch name {
|
switch name {
|
||||||
case CodecH264, CodecH265, CodecVP8, CodecVP9, CodecAV1, CodecJPEG:
|
case CodecH264, CodecH265, CodecVP8, CodecVP9, CodecAV1, CodecJPEG:
|
||||||
return KindVideo
|
return KindVideo
|
||||||
case CodecPCMU, CodecPCMA, CodecAAC, CodecOpus, CodecG722, CodecMPA, CodecELD:
|
case CodecPCMU, CodecPCMA, CodecAAC, CodecOpus, CodecG722, CodecMP3, CodecELD:
|
||||||
return KindAudio
|
return KindAudio
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
@@ -286,7 +286,7 @@ func UnmarshalCodec(md *sdp.MediaDescription, payloadType string) *Codec {
|
|||||||
c.Name = CodecPCMA
|
c.Name = CodecPCMA
|
||||||
c.ClockRate = 8000
|
c.ClockRate = 8000
|
||||||
case "14":
|
case "14":
|
||||||
c.Name = CodecMPA
|
c.Name = CodecMP3
|
||||||
c.ClockRate = 44100
|
c.ClockRate = 44100
|
||||||
case "26":
|
case "26":
|
||||||
c.Name = CodecJPEG
|
c.Name = CodecJPEG
|
||||||
@@ -299,6 +299,44 @@ func UnmarshalCodec(md *sdp.MediaDescription, payloadType string) *Codec {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParseQuery(query map[string][]string) (medias []*Media) {
|
||||||
|
// set media candidates from query list
|
||||||
|
for key, values := range query {
|
||||||
|
switch key {
|
||||||
|
case KindVideo, KindAudio:
|
||||||
|
for _, value := range values {
|
||||||
|
media := &Media{Kind: key, Direction: DirectionRecvonly}
|
||||||
|
|
||||||
|
for _, name := range strings.Split(value, ",") {
|
||||||
|
if name == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
name = strings.ToUpper(name)
|
||||||
|
|
||||||
|
// check aliases
|
||||||
|
switch name {
|
||||||
|
case "COPY":
|
||||||
|
name = "" // pass empty codecs list
|
||||||
|
case "MJPEG":
|
||||||
|
name = CodecJPEG
|
||||||
|
case "AAC":
|
||||||
|
name = CodecAAC
|
||||||
|
case "MP3":
|
||||||
|
name = CodecMP3
|
||||||
|
}
|
||||||
|
|
||||||
|
media.Codecs = append(media.Codecs, &Codec{Name: name})
|
||||||
|
}
|
||||||
|
|
||||||
|
medias = append(medias, media)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func atoi(s string) (i int) {
|
func atoi(s string) (i int) {
|
||||||
i, _ = strconv.Atoi(s)
|
i, _ = strconv.Atoi(s)
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user