diff --git a/pkg/rtmp/client.go b/pkg/rtmp/client.go index 47acd132..2223a093 100644 --- a/pkg/rtmp/client.go +++ b/pkg/rtmp/client.go @@ -22,6 +22,8 @@ type Client struct { conn *rtmp.Conn closed bool + + receive int } func NewClient(uri string) *Client { @@ -94,6 +96,8 @@ func (c *Client) Handle() (err error) { return } + c.receive += len(pkt.Data) + track := c.tracks[int(pkt.Idx)] timestamp := uint32(pkt.Time / time.Duration(track.Codec.ClockRate)) diff --git a/pkg/rtmp/streamer.go b/pkg/rtmp/streamer.go index 7d1aeaa9..b5907192 100644 --- a/pkg/rtmp/streamer.go +++ b/pkg/rtmp/streamer.go @@ -1,7 +1,9 @@ package rtmp import ( + "encoding/json" "github.com/AlexxIT/go2rtc/pkg/streamer" + "strconv" ) func (c *Client) GetMedias() []*streamer.Media { @@ -24,3 +26,21 @@ func (c *Client) Start() error { func (c *Client) Stop() error { return c.Close() } + +func (c *Client) MarshalJSON() ([]byte, error) { + v := map[string]interface{}{ + streamer.JSONReceive: c.receive, + streamer.JSONType: "RTMP client producer", + streamer.JSONRemoteAddr: c.conn.NetConn().RemoteAddr().String(), + "url": c.URI, + } + for i, media := range c.medias { + k := "media:" + strconv.Itoa(i) + v[k] = media.String() + } + for i, track := range c.tracks { + k := "track:" + strconv.Itoa(i) + v[k] = track.String() + } + return json.Marshal(v) +}