Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v0.7.18 101 lines 1.9 kB view raw
1package rtcrec 2 3import ( 4 "time" 5 6 "github.com/pion/interceptor" 7 "github.com/pion/webrtc/v4" 8) 9 10type RecordingTrackRemote struct { 11 track *webrtc.TrackRemote 12 stream *RecorderStream 13 pc *RecordingPeerConnection 14} 15 16func (t *RecordingTrackRemote) Read(p []byte) (n int, attrs interceptor.Attributes, err error) { 17 n, attrs, err = t.track.Read(p) 18 now := time.Now() 19 b2 := make([]byte, n) 20 copy(b2, p) 21 t.pc.Do(func() { 22 errString := "" 23 if err != nil { 24 errString = err.Error() 25 } 26 t.stream.Event(WebRTCEvent{ 27 TrackRead: &TrackRead{ 28 Data: b2, 29 SSRC: t.track.SSRC(), 30 Count: n, 31 // Attrs: attrs, 32 Err: errString, 33 }, 34 Time: now, 35 }) 36 }) 37 return n, attrs, err 38} 39 40func (t *RecordingTrackRemote) Codec() webrtc.RTPCodecParameters { 41 now := time.Now() 42 codec := t.track.Codec() 43 t.pc.Do(func() { 44 t.stream.Event(WebRTCEvent{ 45 TrackCodec: &TrackCodec{ 46 SSRC: t.track.SSRC(), 47 Codec: codec, 48 }, 49 Time: now, 50 }) 51 }) 52 return codec 53} 54 55func (t *RecordingTrackRemote) ID() string { 56 return t.track.ID() 57} 58 59func (t *RecordingTrackRemote) Kind() webrtc.RTPCodecType { 60 now := time.Now() 61 kind := t.track.Kind() 62 t.pc.Do(func() { 63 t.stream.Event(WebRTCEvent{ 64 TrackKind: &TrackKind{ 65 SSRC: t.track.SSRC(), 66 Kind: kind, 67 }, 68 Time: now, 69 }) 70 }) 71 return kind 72} 73 74func (t *RecordingTrackRemote) PayloadType() webrtc.PayloadType { 75 now := time.Now() 76 payloadType := t.track.PayloadType() 77 t.pc.Do(func() { 78 t.stream.Event(WebRTCEvent{ 79 TrackPayloadType: &TrackPayloadType{ 80 SSRC: t.track.SSRC(), 81 PayloadType: payloadType, 82 }, 83 Time: now, 84 }) 85 }) 86 return payloadType 87} 88 89func (t *RecordingTrackRemote) SSRC() webrtc.SSRC { 90 now := time.Now() 91 ssrc := t.track.SSRC() 92 t.pc.Do(func() { 93 t.stream.Event(WebRTCEvent{ 94 Time: now, 95 TrackSSRC: &TrackSSRC{ 96 SSRC: ssrc, 97 }, 98 }) 99 }) 100 return ssrc 101}