// LoggingInterceptor logs both incoming and outgoing RTP
type LoggingInterceptor struct {
interceptor.NoOp
logger *log.Logger
}
func (l *LoggingInterceptor) BindLocalStream(
info *interceptor.StreamInfo,
writer interceptor.RTPWriter,
) interceptor.RTPWriter {
return interceptor.RTPWriterFunc(
func(header *rtp.Header, payload []byte, attributes interceptor.Attributes) (int, error) {
l.logger.Printf("Sending RTP packet, SSRC=%d, SeqNum=%d",
header.SSRC, header.SequenceNumber)
return writer.Write(header, payload, attributes)
},
)
}
func (l *LoggingInterceptor) BindRemoteStream(
info *interceptor.StreamInfo,
reader interceptor.RTPReader,
) interceptor.RTPReader {
return interceptor.RTPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) {
n, attr, err := reader.Read(b, a)
if err != nil {
return 0, nil, err
}
if attr == nil {
attr = make(interceptor.Attributes)
}
header, _ := attr.GetRTPHeader(b[:n])
l.logger.Printf("Received RTP packet, SSRC=%d, SeqNum=%d",
header.SSRC, header.SequenceNumber)
return n, attr, nil
})
}
// RTCP methods, unbind methods, and Close are all inherited from NoOp