mirror of
				https://github.com/pion/webrtc.git
				synced 2025-10-31 18:52:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			916 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| 
 | |
| }
 | 
