|
|
|
@ -13,10 +13,79 @@ import (
|
|
|
|
|
"github.com/q191201771/naza/pkg/nazalog"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// rfc3550
|
|
|
|
|
// -------------------------------------------
|
|
|
|
|
// rfc3550 6.4.1 SR: Sender Report RTCP Packet
|
|
|
|
|
// -------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// 0 1 2 3
|
|
|
|
|
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// header |V=2|P| RC | PT=SR=200 | length |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | SSRC of sender |
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// sender | NTP timestamp, most significant word |
|
|
|
|
|
// info +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | NTP timestamp, least significant word |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | RTP timestamp |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | sender's packet count |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | sender's octet count |
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// report | SSRC_1 (SSRC of first source) |
|
|
|
|
|
// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// 1 | fraction lost | cumulative number of packets lost |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | extended highest sequence number received |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | interarrival jitter |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | last SR (LSR) |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | delay since last SR (DLSR) |
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// report | SSRC_2 (SSRC of second source) |
|
|
|
|
|
// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// 2 : ... :
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// | profile-specific extensions |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
|
|
|
|
|
// ---------------------------------------------
|
|
|
|
|
// rfc3550 6.4.2 RR: Receiver Report RTCP Packet
|
|
|
|
|
// ---------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// 0 1 2 3
|
|
|
|
|
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// header |V=2|P| RC | PT=RR=201 | length |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | SSRC of packet sender |
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// report | SSRC_1 (SSRC of first source) |
|
|
|
|
|
// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// 1 | fraction lost | cumulative number of packets lost |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | extended highest sequence number received |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | interarrival jitter |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | last SR (LSR) |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// | delay since last SR (DLSR) |
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// report | SSRC_2 (SSRC of second source) |
|
|
|
|
|
// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
// 2 : ... :
|
|
|
|
|
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
|
|
|
// | profile-specific extensions |
|
|
|
|
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
PacketTypeSR = 200 // Sender Report
|
|
|
|
|
RTCPPacketTypeSR = 200 // Sender Report
|
|
|
|
|
RTCPPacketTypeRR = 201 // Receiver Report
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type RTCPHeader struct {
|
|
|
|
@ -43,10 +112,10 @@ func parseRTCPPacket(b []byte) {
|
|
|
|
|
h.countOrFormat = b[0] & 0x1F
|
|
|
|
|
h.packetType = b[1]
|
|
|
|
|
h.length = bele.BEUint16(b[2:])
|
|
|
|
|
nazalog.Debugf("%+v", h)
|
|
|
|
|
//nazalog.Debugf("%+v", h)
|
|
|
|
|
|
|
|
|
|
switch h.packetType {
|
|
|
|
|
case PacketTypeSR:
|
|
|
|
|
case RTCPPacketTypeSR:
|
|
|
|
|
parseSR(b)
|
|
|
|
|
default:
|
|
|
|
|
nazalog.Warnf("unknown packet type. type=%d", h.packetType)
|
|
|
|
@ -62,5 +131,5 @@ func parseSR(b []byte) {
|
|
|
|
|
s.ts = bele.BEUint32(b[16:])
|
|
|
|
|
s.pktCnt = bele.BEUint32(b[20:])
|
|
|
|
|
s.octetCnt = bele.BEUint32(b[24:])
|
|
|
|
|
nazalog.Debugf("%+v", s)
|
|
|
|
|
//nazalog.Debugf("%+v", s)
|
|
|
|
|
}
|
|
|
|
|