mirror of
https://github.com/pion/webrtc.git
synced 2025-10-10 01:20:09 +08:00

Simplifies the API. Unmarshal can now return one Packet value instead of both a packet and a header. Relates to #119
47 lines
924 B
Go
47 lines
924 B
Go
package rtcp
|
|
|
|
// Packet represents an RTCP packet, a protocol used for out-of-band statistics and control information for an RTP session
|
|
type Packet interface {
|
|
Header() Header
|
|
|
|
Marshal() ([]byte, error)
|
|
Unmarshal(rawPacket []byte) error
|
|
}
|
|
|
|
// Unmarshal is a factory a polymorphic RTCP packet, and its header,
|
|
func Unmarshal(rawPacket []byte) (Packet, Header, error) {
|
|
var h Header
|
|
var p Packet
|
|
|
|
err := h.Unmarshal(rawPacket)
|
|
if err != nil {
|
|
return nil, h, err
|
|
}
|
|
|
|
switch h.Type {
|
|
case TypeSenderReport:
|
|
p = new(SenderReport)
|
|
|
|
case TypeReceiverReport:
|
|
p = new(ReceiverReport)
|
|
|
|
case TypeSourceDescription:
|
|
p = new(SourceDescription)
|
|
|
|
case TypeGoodbye:
|
|
p = new(Goodbye)
|
|
|
|
case TypeTransportSpecificFeedback:
|
|
p = new(RapidResynchronizationRequest)
|
|
|
|
case TypePayloadSpecificFeedback:
|
|
p = new(PictureLossIndication)
|
|
|
|
default:
|
|
p = new(RawPacket)
|
|
}
|
|
|
|
err = p.Unmarshal(rawPacket)
|
|
return p, h, err
|
|
}
|