| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // Package interceptor contains the Interceptor interface, with some useful interceptors that should be safe to use
- // in most cases.
- package interceptor
- import (
- "io"
- "github.com/pion/rtcp"
- "github.com/pion/rtp"
- )
- // Factory provides an interface for constructing interceptors
- type Factory interface {
- NewInterceptor(id string) (Interceptor, error)
- }
- // Interceptor can be used to add functionality to you PeerConnections by modifying any incoming/outgoing rtp/rtcp
- // packets, or sending your own packets as needed.
- type Interceptor interface {
- // BindRTCPReader lets you modify any incoming RTCP packets. It is called once per sender/receiver, however this might
- // change in the future. The returned method will be called once per packet batch.
- BindRTCPReader(reader RTCPReader) RTCPReader
- // BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method
- // will be called once per packet batch.
- BindRTCPWriter(writer RTCPWriter) RTCPWriter
- // BindLocalStream lets you modify any outgoing RTP packets. It is called once for per LocalStream. The returned method
- // will be called once per rtp packet.
- BindLocalStream(info *StreamInfo, writer RTPWriter) RTPWriter
- // UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track.
- UnbindLocalStream(info *StreamInfo)
- // BindRemoteStream lets you modify any incoming RTP packets. It is called once for per RemoteStream. The returned method
- // will be called once per rtp packet.
- BindRemoteStream(info *StreamInfo, reader RTPReader) RTPReader
- // UnbindRemoteStream is called when the Stream is removed. It can be used to clean up any data related to that track.
- UnbindRemoteStream(info *StreamInfo)
- io.Closer
- }
- // RTPWriter is used by Interceptor.BindLocalStream.
- type RTPWriter interface {
- // Write a rtp packet
- Write(header *rtp.Header, payload []byte, attributes Attributes) (int, error)
- }
- // RTPReader is used by Interceptor.BindRemoteStream.
- type RTPReader interface {
- // Read a rtp packet
- Read([]byte, Attributes) (int, Attributes, error)
- }
- // RTCPWriter is used by Interceptor.BindRTCPWriter.
- type RTCPWriter interface {
- // Write a batch of rtcp packets
- Write(pkts []rtcp.Packet, attributes Attributes) (int, error)
- }
- // RTCPReader is used by Interceptor.BindRTCPReader.
- type RTCPReader interface {
- // Read a batch of rtcp packets
- Read([]byte, Attributes) (int, Attributes, error)
- }
- // RTPWriterFunc is an adapter for RTPWrite interface
- type RTPWriterFunc func(header *rtp.Header, payload []byte, attributes Attributes) (int, error)
- // RTPReaderFunc is an adapter for RTPReader interface
- type RTPReaderFunc func([]byte, Attributes) (int, Attributes, error)
- // RTCPWriterFunc is an adapter for RTCPWriter interface
- type RTCPWriterFunc func(pkts []rtcp.Packet, attributes Attributes) (int, error)
- // RTCPReaderFunc is an adapter for RTCPReader interface
- type RTCPReaderFunc func([]byte, Attributes) (int, Attributes, error)
- // Write a rtp packet
- func (f RTPWriterFunc) Write(header *rtp.Header, payload []byte, attributes Attributes) (int, error) {
- return f(header, payload, attributes)
- }
- // Read a rtp packet
- func (f RTPReaderFunc) Read(b []byte, a Attributes) (int, Attributes, error) {
- return f(b, a)
- }
- // Write a batch of rtcp packets
- func (f RTCPWriterFunc) Write(pkts []rtcp.Packet, attributes Attributes) (int, error) {
- return f(pkts, attributes)
- }
- // Read a batch of rtcp packets
- func (f RTCPReaderFunc) Read(b []byte, a Attributes) (int, Attributes, error) {
- return f(b, a)
- }
|