Live video on the AT Protocol
1package rtcrec
2
3import (
4 "time"
5
6 "github.com/pion/interceptor"
7 "github.com/pion/rtcp"
8 "github.com/pion/webrtc/v4"
9)
10
11type PeerConnection interface {
12 AddTransceiverFromKind(kind webrtc.RTPCodecType, init ...webrtc.RTPTransceiverInit) (RTPTransceiver, error)
13 Close() error
14 SetRemoteDescription(description webrtc.SessionDescription) error
15 CreateAnswer(options *webrtc.AnswerOptions) (webrtc.SessionDescription, error)
16 SetLocalDescription(description webrtc.SessionDescription) error
17 OnICEConnectionStateChange(func(webrtc.ICEConnectionState))
18 OnConnectionStateChange(func(webrtc.PeerConnectionState))
19 OnTrack(func(TrackRemote, RTPReceiver))
20 // OnDataChannel(func(*webrtc.DataChannel))
21 // OnNegotiationNeeded(func())
22 WriteRTCP(pkts []rtcp.Packet) error
23 ICEGatheringState() webrtc.ICEGatheringState
24 LocalDescription() *webrtc.SessionDescription
25}
26
27type RTPTransceiver interface {
28}
29
30type TrackRemote interface {
31 Read(p []byte) (n int, attrs interceptor.Attributes, err error)
32 Kind() webrtc.RTPCodecType
33 PayloadType() webrtc.PayloadType
34 Codec() webrtc.RTPCodecParameters
35 SSRC() webrtc.SSRC
36}
37
38type RTPReceiver interface {
39}
40
41func GatheringCompletePromise(pc PeerConnection) <-chan struct{} {
42 recorder, ok := pc.(*RecordingPeerConnection)
43 if ok {
44 return webrtc.GatheringCompletePromise(recorder.pionpc)
45 }
46 _, ok = pc.(*ReplayPeerConnection)
47 if ok {
48 ch := make(chan struct{})
49 go func() {
50 <-time.After(100 * time.Millisecond)
51 ch <- struct{}{}
52 }()
53 return ch
54 }
55 panic("unknown peer connection type")
56}