Files
webrtc/pkg/rtcp/packet.go
Woodrow Douglass 81ceadeb71 Remove PacketWithHeader type
This simplifies the RTCP interface, and saves a bit of code.
Relates to #119
2018-11-29 12:30:34 -08:00

46 lines
916 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 {
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:
return nil, h, errWrongType
}
err = p.Unmarshal(rawPacket)
return p, h, err
}