add TrackJPEG

This commit is contained in:
aler9
2022-06-06 12:51:33 +02:00
parent 2fa3148a27
commit 0101ad961c
5 changed files with 77 additions and 9 deletions

View File

@@ -61,17 +61,21 @@ func newTrackFromMediaDescription(md *psdp.MediaDescription) (Track, error) {
switch { switch {
case md.MediaName.Media == "video": case md.MediaName.Media == "video":
if rtpmapPart1 == "H264/90000" { switch {
case len(md.MediaName.Formats) == 1 && md.MediaName.Formats[0] == "26":
return newTrackJPEGFromMediaDescription(control)
case rtpmapPart1 == "H264/90000":
return newTrackH264FromMediaDescription(control, payloadType, md) return newTrackH264FromMediaDescription(control, payloadType, md)
} }
case md.MediaName.Media == "audio": case md.MediaName.Media == "audio":
switch { switch {
case len(md.MediaName.Formats) == 1 && md.MediaName.Formats[0] == "0": case len(md.MediaName.Formats) == 1 && md.MediaName.Formats[0] == "0":
return newTrackPCMUFromMediaDescription(control, rtpmapPart1, md) return newTrackPCMUFromMediaDescription(control, rtpmapPart1)
case len(md.MediaName.Formats) == 1 && md.MediaName.Formats[0] == "8": case len(md.MediaName.Formats) == 1 && md.MediaName.Formats[0] == "8":
return newTrackPCMAFromMediaDescription(control, rtpmapPart1, md) return newTrackPCMAFromMediaDescription(control, rtpmapPart1)
case strings.HasPrefix(strings.ToLower(rtpmapPart1), "mpeg4-generic/"): case strings.HasPrefix(strings.ToLower(rtpmapPart1), "mpeg4-generic/"):
return newTrackAACFromMediaDescription(control, payloadType, md) return newTrackAACFromMediaDescription(control, payloadType, md)

57
track_jpeg.go Normal file
View File

@@ -0,0 +1,57 @@
package gortsplib //nolint:dupl
import (
psdp "github.com/pion/sdp/v3"
)
// TrackJPEG is a JPEG track.
type TrackJPEG struct {
trackBase
}
// NewTrackJPEG allocates a TrackJPEG.
func NewTrackJPEG() *TrackJPEG {
return &TrackJPEG{}
}
func newTrackJPEGFromMediaDescription(
control string) (*TrackJPEG, error,
) {
return &TrackJPEG{
trackBase: trackBase{
control: control,
},
}, nil
}
// ClockRate returns the track clock rate.
func (t *TrackJPEG) ClockRate() int {
return 90000
}
func (t *TrackJPEG) clone() Track {
return &TrackJPEG{
trackBase: t.trackBase,
}
}
// MediaDescription returns the track media description in SDP format.
func (t *TrackJPEG) MediaDescription() *psdp.MediaDescription {
return &psdp.MediaDescription{
MediaName: psdp.MediaName{
Media: "audio",
Protos: []string{"RTP", "AVP"},
Formats: []string{"26"},
},
Attributes: []psdp.Attribute{
{
Key: "rtpmap",
Value: "26 JPEG/90000",
},
{
Key: "control",
Value: t.control,
},
},
}
}

View File

@@ -19,8 +19,7 @@ func NewTrackPCMA() *TrackPCMA {
func newTrackPCMAFromMediaDescription( func newTrackPCMAFromMediaDescription(
control string, control string,
rtpmapPart1 string, rtpmapPart1 string) (*TrackPCMA, error,
md *psdp.MediaDescription) (*TrackPCMA, error,
) { ) {
tmp := strings.Split(rtpmapPart1, "/") tmp := strings.Split(rtpmapPart1, "/")
if len(tmp) >= 3 && tmp[2] != "1" { if len(tmp) >= 3 && tmp[2] != "1" {

View File

@@ -19,8 +19,7 @@ func NewTrackPCMU() *TrackPCMU {
func newTrackPCMUFromMediaDescription( func newTrackPCMUFromMediaDescription(
control string, control string,
rtpmapPart1 string, rtpmapPart1 string) (*TrackPCMU, error,
md *psdp.MediaDescription) (*TrackPCMU, error,
) { ) {
tmp := strings.Split(rtpmapPart1, "/") tmp := strings.Split(rtpmapPart1, "/")
if len(tmp) >= 3 && tmp[2] != "1" { if len(tmp) >= 3 && tmp[2] != "1" {

View File

@@ -31,7 +31,6 @@ func TestTrackNewFromMediaDescription(t *testing.T) {
&psdp.MediaDescription{ &psdp.MediaDescription{
MediaName: psdp.MediaName{ MediaName: psdp.MediaName{
Media: "audio", Media: "audio",
Port: psdp.RangedPort{Value: 49170},
Protos: []string{"RTP", "AVP"}, Protos: []string{"RTP", "AVP"},
Formats: []string{"0"}, Formats: []string{"0"},
}, },
@@ -192,6 +191,17 @@ func TestTrackNewFromMediaDescription(t *testing.T) {
channelCount: 2, channelCount: 2,
}, },
}, },
{
"jpeg",
&psdp.MediaDescription{
MediaName: psdp.MediaName{
Media: "video",
Protos: []string{"RTP", "AVP"},
Formats: []string{"26"},
},
},
&TrackJPEG{},
},
{ {
"h264", "h264",
&psdp.MediaDescription{ &psdp.MediaDescription{
@@ -343,7 +353,6 @@ func TestTrackNewFromMediaDescription(t *testing.T) {
&psdp.MediaDescription{ &psdp.MediaDescription{
MediaName: psdp.MediaName{ MediaName: psdp.MediaName{
Media: "video", Media: "video",
Port: psdp.RangedPort{Value: 0},
Protos: []string{"RTP", "AVP"}, Protos: []string{"RTP", "AVP"},
Formats: []string{"98", "96"}, Formats: []string{"98", "96"},
}, },