mirror of
https://github.com/pion/webrtc.git
synced 2025-10-31 02:36:46 +08:00
RTCP Reception mechanism
Add a channel to the RTCTrack object to recieve incoming RTCP packets with. Relates to #119
This commit is contained in:
committed by
Max Hawkins
parent
bc89ee0fcb
commit
de31bb3c60
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user