RTCP Reception mechanism

Add a channel to the RTCTrack object to
recieve incoming RTCP packets with.
Relates to #119
This commit is contained in:
Woodrow Douglass
2018-11-26 11:48:45 -05:00
committed by Max Hawkins
parent bc89ee0fcb
commit de31bb3c60
11 changed files with 321 additions and 33 deletions

View File

@@ -5,3 +5,78 @@ type Packet interface {
Marshal() ([]byte, error)
Unmarshal(rawPacket []byte) error
}
type PacketWithHeader struct {
Header
Packet
RawPacket []byte
}
func (p PacketWithHeader) Marshal() ([]byte, error) {
return p.Packet.Marshal()
}
func (p *PacketWithHeader) Unmarshal(rawPacket []byte) error {
p.RawPacket = rawPacket
if err := p.Header.Unmarshal(rawPacket); err != nil {
return err
}
switch p.Header.Type {
case TypeSenderReport:
sr := new(SenderReport)
err := sr.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = sr
} else {
return err
}
case TypeReceiverReport:
rr := new(ReceiverReport)
err := rr.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = rr
} else {
return err
}
case TypeSourceDescription:
sdes := new(SourceDescription)
err := sdes.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = sdes
} else {
return err
}
case TypeGoodbye:
bye := new(Goodbye)
err := bye.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = bye
} else {
return err
}
case TypeTransportSpecificFeedback:
rrr := new(RapidResynchronizationRequest)
err := rrr.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = rrr
} else {
return err
}
case TypePayloadSpecificFeedback:
psfb := new(PictureLossIndication)
err := psfb.Unmarshal(rawPacket)
if (err == nil) {
p.Packet = psfb
} else {
return err
}
default:
return errWrongType
}
return nil
}