add error to NewTrackH264; simplify NewTrackAac

This commit is contained in:
aler9
2020-10-03 23:42:58 +02:00
parent 51964ed4c0
commit 63ddab9da5
6 changed files with 42 additions and 9 deletions

View File

@@ -238,7 +238,8 @@ func TestConnClientPublishUDP(t *testing.T) {
_, err = conn.Options(u) _, err = conn.Options(u)
require.NoError(t, err) require.NoError(t, err)
track := NewTrackH264(0, sps, pps) track, err := NewTrackH264(0, sps, pps)
require.NoError(t, err)
_, err = conn.Announce(u, Tracks{track}) _, err = conn.Announce(u, Tracks{track})
require.NoError(t, err) require.NoError(t, err)
@@ -316,7 +317,8 @@ func TestConnClientPublishTCP(t *testing.T) {
_, err = conn.Options(u) _, err = conn.Options(u)
require.NoError(t, err) require.NoError(t, err)
track := NewTrackH264(0, sps, pps) track, err := NewTrackH264(0, sps, pps)
require.NoError(t, err)
_, err = conn.Announce(u, Tracks{track}) _, err = conn.Announce(u, Tracks{track})
require.NoError(t, err) require.NoError(t, err)

View File

@@ -94,7 +94,10 @@ func main() {
} }
// create a H264 track // create a H264 track
track := gortsplib.NewTrackH264(0, sps, pps) track, err := gortsplib.NewTrackH264(0, sps, pps)
if err != nil {
panic(err)
}
// announce the track // announce the track
_, err = conn.Announce(u, gortsplib.Tracks{track}) _, err = conn.Announce(u, gortsplib.Tracks{track})

View File

@@ -94,7 +94,10 @@ func main() {
} }
// create a H264 track // create a H264 track
track := gortsplib.NewTrackH264(0, sps, pps) track, err := gortsplib.NewTrackH264(0, sps, pps)
if err != nil {
panic(err)
}
// announce the track // announce the track
_, err = conn.Announce(u, gortsplib.Tracks{track}) _, err = conn.Announce(u, gortsplib.Tracks{track})

1
go.mod
View File

@@ -4,6 +4,7 @@ go 1.12
require ( require (
github.com/aler9/sdp-dirty/v3 v3.0.0-20200919115950-f1abc664f625 github.com/aler9/sdp-dirty/v3 v3.0.0-20200919115950-f1abc664f625
github.com/notedit/rtmp v0.0.2
github.com/pion/rtcp v1.2.3 github.com/pion/rtcp v1.2.3
github.com/pion/rtp v1.6.0 github.com/pion/rtp v1.6.0
github.com/stretchr/testify v1.6.1 github.com/stretchr/testify v1.6.1

2
go.sum
View File

@@ -2,6 +2,8 @@ github.com/aler9/sdp-dirty/v3 v3.0.0-20200919115950-f1abc664f625 h1:A3upkpYzceQT
github.com/aler9/sdp-dirty/v3 v3.0.0-20200919115950-f1abc664f625/go.mod h1:5bO/aUQr9m3OasDatNNcVqKAgs7r5hgGXmszWHaC6mI= github.com/aler9/sdp-dirty/v3 v3.0.0-20200919115950-f1abc664f625/go.mod h1:5bO/aUQr9m3OasDatNNcVqKAgs7r5hgGXmszWHaC6mI=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/notedit/rtmp v0.0.2 h1:5+to4yezKATiJgnrcETu9LbV5G/QsWkOV9Ts2M/p33w=
github.com/notedit/rtmp v0.0.2/go.mod h1:vzuE21rowz+lT1NGsWbreIvYulgBpCGnQyeTyFblUHc=
github.com/pion/randutil v0.0.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/randutil v0.0.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=

View File

@@ -3,10 +3,12 @@ package gortsplib
import ( import (
"encoding/base64" "encoding/base64"
"encoding/hex" "encoding/hex"
"fmt"
"strconv" "strconv"
"strings" "strings"
"github.com/aler9/sdp-dirty/v3" "github.com/aler9/sdp-dirty/v3"
"github.com/notedit/rtmp/codec/aac"
) )
// Track is a track available in a certain URL. // Track is a track available in a certain URL.
@@ -19,7 +21,7 @@ type Track struct {
} }
// NewTrackH264 initializes an H264 track. // NewTrackH264 initializes an H264 track.
func NewTrackH264(id int, sps []byte, pps []byte) *Track { func NewTrackH264(id int, sps []byte, pps []byte) (*Track, error) {
spropParameterSets := base64.StdEncoding.EncodeToString(sps) + spropParameterSets := base64.StdEncoding.EncodeToString(sps) +
"," + base64.StdEncoding.EncodeToString(pps) "," + base64.StdEncoding.EncodeToString(pps)
profileLevelId := strings.ToUpper(hex.EncodeToString(sps[1:4])) profileLevelId := strings.ToUpper(hex.EncodeToString(sps[1:4]))
@@ -45,11 +47,31 @@ func NewTrackH264(id int, sps []byte, pps []byte) *Track {
}, },
}, },
}, },
} }, nil
} }
// NewTrackAac initializes an AAC track. // NewTrackAac initializes an AAC track.
func NewTrackAac(id int, sampleRate int, channelCount int, config []byte) *Track { func NewTrackAac(id int, config []byte) (*Track, error) {
codec, err := aac.FromMPEG4AudioConfigBytes(config)
if err != nil {
return nil, err
}
channelCount, err := func() (int, error) {
switch codec.Config.ChannelLayout {
case aac.CH_MONO:
return 1, nil
case aac.CH_STEREO:
return 2, nil
}
return 0, fmt.Errorf("unsupported channel count: %v", codec.Config.ChannelLayout)
}()
if err != nil {
return nil, err
}
return &Track{ return &Track{
Id: id, Id: id,
Media: &sdp.MediaDescription{ Media: &sdp.MediaDescription{
@@ -61,7 +83,7 @@ func NewTrackAac(id int, sampleRate int, channelCount int, config []byte) *Track
Attributes: []sdp.Attribute{ Attributes: []sdp.Attribute{
{ {
Key: "rtpmap", Key: "rtpmap",
Value: "97 MPEG4-GENERIC/" + strconv.FormatInt(int64(sampleRate), 10) + Value: "97 MPEG4-GENERIC/" + strconv.FormatInt(int64(codec.Config.SampleRate), 10) +
"/" + strconv.FormatInt(int64(channelCount), 10), "/" + strconv.FormatInt(int64(channelCount), 10),
}, },
{ {
@@ -75,7 +97,7 @@ func NewTrackAac(id int, sampleRate int, channelCount int, config []byte) *Track
}, },
}, },
}, },
} }, nil
} }
// Tracks is a list of tracks. // Tracks is a list of tracks.