tidy up rtmp

This commit is contained in:
aler9 2021-04-03 10:52:59 +02:00
parent 8acfb5b2b1
commit 3bf0777ee0
3 changed files with 33 additions and 35 deletions

View file

@ -251,7 +251,7 @@ func (c *Client) runRead() {
}
c.conn.NetConn().SetWriteDeadline(time.Now().Add(c.writeTimeout))
rtmputils.WriteMetadata(c.conn, videoTrack, audioTrack)
c.conn.WriteMetadata(videoTrack, audioTrack)
if videoTrack != nil {
codec := h264.Codec{
@ -435,7 +435,7 @@ func (c *Client) runPublish() {
defer close(setupDone)
err = func() error {
c.conn.NetConn().SetReadDeadline(time.Now().Add(c.readTimeout))
videoTrack, audioTrack, err = rtmputils.ReadMetadata(c.conn)
videoTrack, audioTrack, err = c.conn.ReadMetadata()
if err != nil {
return err
}

View file

@ -14,39 +14,37 @@ const (
codecAAC = 10
)
func readMetadata(conn *Conn) (flvio.AMFMap, error) {
pkt, err := conn.ReadPacket()
if err != nil {
return nil, err
}
if pkt.Type != av.Metadata {
return nil, fmt.Errorf("first packet must be metadata")
}
arr, err := flvio.ParseAMFVals(pkt.Data, false)
if err != nil {
return nil, err
}
if len(arr) != 1 {
return nil, fmt.Errorf("invalid metadata")
}
ma, ok := arr[0].(flvio.AMFMap)
if !ok {
return nil, fmt.Errorf("invalid metadata")
}
return ma, nil
}
// ReadMetadata extracts track informations from a RTMP connection that is publishing.
func ReadMetadata(conn *Conn) (*gortsplib.Track, *gortsplib.Track, error) {
// ReadMetadata extracts track informations from a connection that is publishing.
func (conn *Conn) ReadMetadata() (*gortsplib.Track, *gortsplib.Track, error) {
var videoTrack *gortsplib.Track
var audioTrack *gortsplib.Track
md, err := readMetadata(conn)
md, err := func() (flvio.AMFMap, error) {
pkt, err := conn.ReadPacket()
if err != nil {
return nil, err
}
if pkt.Type != av.Metadata {
return nil, fmt.Errorf("first packet must be metadata")
}
arr, err := flvio.ParseAMFVals(pkt.Data, false)
if err != nil {
return nil, err
}
if len(arr) != 1 {
return nil, fmt.Errorf("invalid metadata")
}
ma, ok := arr[0].(flvio.AMFMap)
if !ok {
return nil, fmt.Errorf("invalid metadata")
}
return ma, nil
}()
if err != nil {
return nil, nil, err
}
@ -158,8 +156,8 @@ func ReadMetadata(conn *Conn) (*gortsplib.Track, *gortsplib.Track, error) {
}
}
// WriteMetadata writes track informations to a RTMP connection that is reading.
func WriteMetadata(conn *Conn, videoTrack *gortsplib.Track, audioTrack *gortsplib.Track) error {
// WriteMetadata writes track informations to a connection that is reading.
func (conn *Conn) WriteMetadata(videoTrack *gortsplib.Track, audioTrack *gortsplib.Track) error {
return conn.WritePacket(av.Packet{
Type: av.Metadata,
Data: flvio.FillAMF0ValMalloc(flvio.AMFMap{

View file

@ -138,7 +138,7 @@ func (s *Source) runInner() bool {
go func() {
defer close(metadataDone)
conn.NetConn().SetReadDeadline(time.Now().Add(s.readTimeout))
videoTrack, audioTrack, err = rtmputils.ReadMetadata(conn)
videoTrack, audioTrack, err = conn.ReadMetadata()
}()
select {