mirror of
https://github.com/livekit/livekit.git
synced 2026-04-27 04:15:24 +00:00
1e1aaeb86b
* Separate from ion-sfu changes: 1. extract pkg/buffer, twcc, sfu, relay, stats, logger 2. to solve cycle import, move ion-sfu/pkg/logger to pkg/sfu/logger 3. replace pion/ion-sfu => ./ reason: will change import pion/ion-sfu/pkg/* to livekit-server/pkg/* after this pr merged. Just not change any code in this pr, because it will confused with the separate code from ion-sfu in review. * Move code from ion-sfu to pkg/sfu * fix build error for resovle conflict Co-authored-by: cnderrauber <zengjie9004@gmail.com>
45 lines
714 B
Go
45 lines
714 B
Go
package buffer
|
|
|
|
import (
|
|
"io"
|
|
"sync/atomic"
|
|
)
|
|
|
|
type RTCPReader struct {
|
|
ssrc uint32
|
|
closed atomicBool
|
|
onPacket atomic.Value //func([]byte)
|
|
onClose func()
|
|
}
|
|
|
|
func NewRTCPReader(ssrc uint32) *RTCPReader {
|
|
return &RTCPReader{ssrc: ssrc}
|
|
}
|
|
|
|
func (r *RTCPReader) Write(p []byte) (n int, err error) {
|
|
if r.closed.get() {
|
|
err = io.EOF
|
|
return
|
|
}
|
|
if f, ok := r.onPacket.Load().(func([]byte)); ok {
|
|
f(p)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (r *RTCPReader) OnClose(fn func()) {
|
|
r.onClose = fn
|
|
}
|
|
|
|
func (r *RTCPReader) Close() error {
|
|
r.closed.set(true)
|
|
r.onClose()
|
|
return nil
|
|
}
|
|
|
|
func (r *RTCPReader) OnPacket(f func([]byte)) {
|
|
r.onPacket.Store(f)
|
|
}
|
|
|
|
func (r *RTCPReader) Read(_ []byte) (n int, err error) { return }
|