diff options
Diffstat (limited to 'vendor/github.com/pion/interceptor')
29 files changed, 0 insertions, 1756 deletions
diff --git a/vendor/github.com/pion/interceptor/.gitignore b/vendor/github.com/pion/interceptor/.gitignore deleted file mode 100644 index 83db74b..0000000 --- a/vendor/github.com/pion/interceptor/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -### JetBrains IDE ### -##################### -.idea/ - -### Emacs Temporary Files ### -############################# -*~ - -### Folders ### -############### -bin/ -vendor/ -node_modules/ - -### Files ### -############# -*.ivf -*.ogg -tags -cover.out -*.sw[poe] -*.wasm -examples/sfu-ws/cert.pem -examples/sfu-ws/key.pem diff --git a/vendor/github.com/pion/interceptor/.golangci.yml b/vendor/github.com/pion/interceptor/.golangci.yml deleted file mode 100644 index d6162c9..0000000 --- a/vendor/github.com/pion/interceptor/.golangci.yml +++ /dev/null @@ -1,89 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - misspell: - locale: US - exhaustive: - default-signifies-exhaustive: true - gomodguard: - blocked: - modules: - - github.com/pkg/errors: - recommendations: - - errors - -linters: - enable: - - asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers - - bodyclose # checks whether HTTP response body is closed successfully - - deadcode # Finds unused code - - depguard # Go linter that checks if package imports are in a list of acceptable packages - - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) - - dupl # Tool for code clone detection - - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases - - exhaustive # check exhaustiveness of enum switch statements - - exportloopref # checks for pointers to enclosing loop variables - - gci # Gci control golang package import order and make it always deterministic. - - gochecknoglobals # Checks that no globals are present in Go code - - gochecknoinits # Checks that no init functions are present in Go code - - gocognit # Computes and checks the cognitive complexity of functions - - goconst # Finds repeated strings that could be replaced by a constant - - gocritic # The most opinionated Go source code linter - - godox # Tool for detection of FIXME, TODO and other comment keywords - - goerr113 # Golang linter to check the errors handling expressions - - gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification - - gofumpt # Gofumpt checks whether code was gofumpt-ed. - - goheader # Checks is file header matches to pattern - - goimports # Goimports does everything that gofmt does. Additionally it checks unused imports - - golint # Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes - - gomodguard # Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations. - - goprintffuncname # Checks that printf-like functions are named with `f` at the end - - gosec # Inspects source code for security problems - - gosimple # Linter for Go source code that specializes in simplifying a code - - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string - - ineffassign # Detects when assignments to existing variables are not used - - misspell # Finds commonly misspelled English words in comments - - nakedret # Finds naked returns in functions greater than a specified function length - - noctx # noctx finds sending http request without context.Context - - scopelint # Scopelint checks for unpinned variables in go programs - - staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks - - structcheck # Finds unused struct fields - - stylecheck # Stylecheck is a replacement for golint - - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code - - unconvert # Remove unnecessary type conversions - - unparam # Reports unused function parameters - - unused # Checks Go code for unused constants, variables, functions and types - - varcheck # Finds unused global variables and constants - - whitespace # Tool for detection of leading and trailing whitespace - disable: - - funlen # Tool for detection of long functions - - gocyclo # Computes and checks the cyclomatic complexity of functions - - godot # Check if comments end in a period - - gomnd # An analyzer to detect magic numbers. - - lll # Reports long lines - - maligned # Tool to detect Go structs that would take less memory if their fields were sorted - - nestif # Reports deeply nested if statements - - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity - - nolintlint # Reports ill-formed or insufficient nolint directives - - prealloc # Finds slice declarations that could potentially be preallocated - - rowserrcheck # checks whether Err of rows is checked successfully - - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. - - testpackage # linter that makes you use a separate _test package - - wsl # Whitespace Linter - Forces you to use empty lines! - -issues: - exclude-use-default: false - exclude-rules: - # Allow complex tests, better to be self contained - - path: _test\.go - linters: - - gocognit - - # Allow complex main function in examples - - path: examples - text: "of func `main` is high" - linters: - - gocognit - -run: - skip-dirs-use-default: false diff --git a/vendor/github.com/pion/interceptor/LICENSE b/vendor/github.com/pion/interceptor/LICENSE deleted file mode 100644 index ab60297..0000000 --- a/vendor/github.com/pion/interceptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/pion/interceptor/README.md b/vendor/github.com/pion/interceptor/README.md deleted file mode 100644 index 007c340..0000000 --- a/vendor/github.com/pion/interceptor/README.md +++ /dev/null @@ -1,81 +0,0 @@ -<h1 align="center"> - <br> - Pion Interceptor - <br> -</h1> -<h4 align="center">RTCP and RTCP processors for building real time communications</h4> -<p align="center"> - <a href="https://pion.ly"><img src="https://img.shields.io/badge/pion-interceptor-gray.svg?longCache=true&colorB=brightgreen" alt="Pion Interceptor"></a> - <a href="https://pion.ly/slack"><img src="https://img.shields.io/badge/join-us%20on%20slack-gray.svg?longCache=true&logo=slack&colorB=brightgreen" alt="Slack Widget"></a> - <br> - <a href="https://pkg.go.dev/github.com/pion/interceptor"><img src="https://godoc.org/github.com/pion/interceptor?status.svg" alt="GoDoc"></a> - <a href="https://codecov.io/gh/pion/interceptor"><img src="https://codecov.io/gh/pion/interceptor/branch/master/graph/badge.svg" alt="Coverage Status"></a> - <a href="https://goreportcard.com/report/github.com/pion/interceptor"><img src="https://goreportcard.com/badge/github.com/pion/interceptor" alt="Go Report Card"></a> - <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a> -</p> -<br> - -Interceptor is a framework for building RTP/RTCP communication software. This framework defines -a interface that each interceptor must satisfy. These interceptors are then run sequentially. We -also then provide common interceptors that will be useful for building RTC software. - -This package was built for [pion/webrtc](https://github.com/pion/webrtc), but we designed it to be consumable -by anyone. With the following tenets in mind. - -* Useful defaults. Each interceptor will be configured to give you a good default experience. -* Unblock unique use cases. New use cases are what is driving WebRTC, we want to empower them. -* Encourage modification. Add your own interceptors without forking. Mixing with the ones we provide. -* Empower learning. This code base should be useful to read and learn even if you aren't using Pion. - -#### Current Interceptors -* NACK Generator/Responder - -#### Planned Interceptors -* [Sender and Receiver Reports](https://tools.ietf.org/html/rfc3550#section-6.4) - - Bandwidth Estimation from Receiver Reports -* [Transport Wide Congestion Control Feedback](https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01) - - [NADA](https://tools.ietf.org/html/rfc8698) - - [Google Congestion Control](https://tools.ietf.org/html/draft-ietf-rmcat-gcc-02) -* JitterBuffer, re-order packets and wait for arrival -* [FlexFec](https://tools.ietf.org/html/draft-ietf-payload-flexible-fec-scheme-20) -* [webrtc-stats](https://www.w3.org/TR/webrtc-stats/) compliant statistics generation - -### Interceptor Public API -The public interface is defined in [interceptor.go](https://github.com/pion/interceptor/blob/master/interceptor.go). -The methods you need to satisy are broken up into 4 groups. - -* `BindRTCPWriter` and `BindRTCPReader` allow you to inspect/modify RTCP traffic. -* `BindLocalStream` and `BindRemoteStream` notify you of a new SSRC stream and allow you to inspect/modify. -* `UnbindLocalStream` and `UnbindRemoteStream` notify you when a SSRC stream has been removed -* `Close` called when the interceptor is closed. - -Interceptors also pass Attributes between each other. These are a collection of key/value pairs and are useful for storing metadata -or caching. - -[noop.go](https://github.com/pion/interceptor/blob/master/noop.go) is an interceptor that satisfies this interface, but does nothing. -You can embed this interceptor as a starting point so you only need to define exactly what you need. - -[chain.go]( https://github.com/pion/interceptor/blob/master/chain.go) is used to combine multiple interceptors into one. They are called -sequentially as the packet moves through them. - -### Examples -The [examples](https://github.com/pion/interceptor/blob/master/examples) directory provides some basic examples. If you need more please file an issue! -You should also look in [pion/webrtc](https://github.com/pion/webrtc) for real world examples. - -### Community -Pion has an active community on the [Golang Slack](https://invite.slack.golangbridge.org/). Sign up and join the **#pion** channel for discussions and support. You can also use [Pion mailing list](https://groups.google.com/forum/#!forum/pion). - -We are always looking to support **your projects**. Please reach out if you have something to build! - -If you need commercial support or don't want to use public methods you can contact us at [team@pion.ly](mailto:team@pion.ly) - -### Contributing -Check out the **[contributing wiki](https://github.com/pion/webrtc/wiki/Contributing)** to join the group of amazing people making this project possible: - -* [Adam Kiss](https://github.com/masterada) - *Original Author* -* [Sean DuBois](https://github.com/sean-der) - *Original Author* -* [Atsushi Watanabe](https://github.com/at-wat) -* [Alessandro Ros](https://github.com/aler9) - -### License -MIT License - see [LICENSE](LICENSE) for full text diff --git a/vendor/github.com/pion/interceptor/chain.go b/vendor/github.com/pion/interceptor/chain.go deleted file mode 100644 index d53c307..0000000 --- a/vendor/github.com/pion/interceptor/chain.go +++ /dev/null @@ -1,75 +0,0 @@ -package interceptor - -// Chain is an interceptor that runs all child interceptors in order. -type Chain struct { - interceptors []Interceptor -} - -// NewChain returns a new Chain interceptor. -func NewChain(interceptors []Interceptor) *Chain { - return &Chain{interceptors: interceptors} -} - -// 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. -func (i *Chain) BindRTCPReader(reader RTCPReader) RTCPReader { - for _, interceptor := range i.interceptors { - reader = interceptor.BindRTCPReader(reader) - } - - return reader -} - -// BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method -// will be called once per packet batch. -func (i *Chain) BindRTCPWriter(writer RTCPWriter) RTCPWriter { - for _, interceptor := range i.interceptors { - writer = interceptor.BindRTCPWriter(writer) - } - - return writer -} - -// 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. -func (i *Chain) BindLocalStream(ctx *StreamInfo, writer RTPWriter) RTPWriter { - for _, interceptor := range i.interceptors { - writer = interceptor.BindLocalStream(ctx, writer) - } - - return writer -} - -// UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (i *Chain) UnbindLocalStream(ctx *StreamInfo) { - for _, interceptor := range i.interceptors { - interceptor.UnbindLocalStream(ctx) - } -} - -// 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. -func (i *Chain) BindRemoteStream(ctx *StreamInfo, reader RTPReader) RTPReader { - for _, interceptor := range i.interceptors { - reader = interceptor.BindRemoteStream(ctx, reader) - } - - return reader -} - -// UnbindRemoteStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (i *Chain) UnbindRemoteStream(ctx *StreamInfo) { - for _, interceptor := range i.interceptors { - interceptor.UnbindRemoteStream(ctx) - } -} - -// Close closes the Interceptor, cleaning up any data if necessary. -func (i *Chain) Close() error { - var errs []error - for _, interceptor := range i.interceptors { - errs = append(errs, interceptor.Close()) - } - - return flattenErrs(errs) -} diff --git a/vendor/github.com/pion/interceptor/codecov.yml b/vendor/github.com/pion/interceptor/codecov.yml deleted file mode 100644 index 085200a..0000000 --- a/vendor/github.com/pion/interceptor/codecov.yml +++ /dev/null @@ -1,20 +0,0 @@ -# -# DO NOT EDIT THIS FILE -# -# It is automatically copied from https://github.com/pion/.goassets repository. -# - -coverage: - status: - project: - default: - # Allow decreasing 2% of total coverage to avoid noise. - threshold: 2% - patch: - default: - target: 70% - only_pulls: true - -ignore: - - "examples/*" - - "examples/**/*" diff --git a/vendor/github.com/pion/interceptor/errors.go b/vendor/github.com/pion/interceptor/errors.go deleted file mode 100644 index 45e1252..0000000 --- a/vendor/github.com/pion/interceptor/errors.go +++ /dev/null @@ -1,51 +0,0 @@ -package interceptor - -import ( - "errors" - "strings" -) - -func flattenErrs(errs []error) error { - errs2 := []error{} - for _, e := range errs { - if e != nil { - errs2 = append(errs2, e) - } - } - if len(errs2) == 0 { - return nil - } - return multiError(errs2) -} - -type multiError []error - -func (me multiError) Error() string { - var errstrings []string - - for _, err := range me { - if err != nil { - errstrings = append(errstrings, err.Error()) - } - } - - if len(errstrings) == 0 { - return "multiError must contain multiple error but is empty" - } - - return strings.Join(errstrings, "\n") -} - -func (me multiError) Is(err error) bool { - for _, e := range me { - if errors.Is(e, err) { - return true - } - if me2, ok := e.(multiError); ok { - if me2.Is(err) { - return true - } - } - } - return false -} diff --git a/vendor/github.com/pion/interceptor/go.mod b/vendor/github.com/pion/interceptor/go.mod deleted file mode 100644 index 1370bc9..0000000 --- a/vendor/github.com/pion/interceptor/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/pion/interceptor - -go 1.15 - -require ( - github.com/pion/logging v0.2.2 - github.com/pion/rtcp v1.2.6 - github.com/pion/rtp v1.6.2 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/pion/interceptor/go.sum b/vendor/github.com/pion/interceptor/go.sum deleted file mode 100644 index 104d018..0000000 --- a/vendor/github.com/pion/interceptor/go.sum +++ /dev/null @@ -1,21 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.6 h1:1zvwBbyd0TeEuuWftrd/4d++m+/kZSeiguxU61LFWpo= -github.com/pion/rtcp v1.2.6/go.mod h1:52rMNPWFsjr39z9B9MhnkqhPLoeHTv1aN63o/42bWE0= -github.com/pion/rtp v1.6.2 h1:iGBerLX6JiDjB9NXuaPzHyxHFG9JsIEdgwTC0lp5n/U= -github.com/pion/rtp v1.6.2/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/pion/interceptor/interceptor.go b/vendor/github.com/pion/interceptor/interceptor.go deleted file mode 100644 index 2d1b97e..0000000 --- a/vendor/github.com/pion/interceptor/interceptor.go +++ /dev/null @@ -1,108 +0,0 @@ -// 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" -) - -// 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) -} - -// Attributes are a generic key/value store used by interceptors -type Attributes map[interface{}]interface{} - -// 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) -} - -// Get returns the attribute associated with key. -func (a Attributes) Get(key interface{}) interface{} { - return a[key] -} - -// Set sets the attribute associated with key to the given value. -func (a Attributes) Set(key interface{}, val interface{}) { - a[key] = val -} diff --git a/vendor/github.com/pion/interceptor/noop.go b/vendor/github.com/pion/interceptor/noop.go deleted file mode 100644 index 2dc4e8e..0000000 --- a/vendor/github.com/pion/interceptor/noop.go +++ /dev/null @@ -1,40 +0,0 @@ -package interceptor - -// NoOp is an Interceptor that does not modify any packets. It can embedded in other interceptors, so it's -// possible to implement only a subset of the methods. -type NoOp struct{} - -// 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. -func (i *NoOp) BindRTCPReader(reader RTCPReader) RTCPReader { - return reader -} - -// BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method -// will be called once per packet batch. -func (i *NoOp) BindRTCPWriter(writer RTCPWriter) RTCPWriter { - return writer -} - -// 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. -func (i *NoOp) BindLocalStream(_ *StreamInfo, writer RTPWriter) RTPWriter { - return writer -} - -// UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (i *NoOp) UnbindLocalStream(_ *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. -func (i *NoOp) BindRemoteStream(_ *StreamInfo, reader RTPReader) RTPReader { - return reader -} - -// UnbindRemoteStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (i *NoOp) UnbindRemoteStream(_ *StreamInfo) {} - -// Close closes the Interceptor, cleaning up any data if necessary. -func (i *NoOp) Close() error { - return nil -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/errors.go b/vendor/github.com/pion/interceptor/pkg/nack/errors.go deleted file mode 100644 index bbfc773..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/errors.go +++ /dev/null @@ -1,6 +0,0 @@ -package nack - -import "errors" - -// ErrInvalidSize is returned by newReceiveLog/newSendBuffer, when an incorrect buffer size is supplied. -var ErrInvalidSize = errors.New("invalid buffer size") diff --git a/vendor/github.com/pion/interceptor/pkg/nack/generator_interceptor.go b/vendor/github.com/pion/interceptor/pkg/nack/generator_interceptor.go deleted file mode 100644 index 447a949..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/generator_interceptor.go +++ /dev/null @@ -1,162 +0,0 @@ -package nack - -import ( - "math/rand" - "sync" - "time" - - "github.com/pion/interceptor" - "github.com/pion/logging" - "github.com/pion/rtcp" - "github.com/pion/rtp" -) - -// GeneratorInterceptor interceptor generates nack feedback messages. -type GeneratorInterceptor struct { - interceptor.NoOp - size uint16 - skipLastN uint16 - interval time.Duration - m sync.Mutex - wg sync.WaitGroup - close chan struct{} - log logging.LeveledLogger - - receiveLogs map[uint32]*receiveLog - receiveLogsMu sync.Mutex -} - -// NewGeneratorInterceptor returns a new GeneratorInterceptor interceptor -func NewGeneratorInterceptor(opts ...GeneratorOption) (*GeneratorInterceptor, error) { - r := &GeneratorInterceptor{ - size: 8192, - skipLastN: 0, - interval: time.Millisecond * 100, - receiveLogs: map[uint32]*receiveLog{}, - close: make(chan struct{}), - log: logging.NewDefaultLoggerFactory().NewLogger("nack_generator"), - } - - for _, opt := range opts { - if err := opt(r); err != nil { - return nil, err - } - } - - if _, err := newReceiveLog(r.size); err != nil { - return nil, err - } - - return r, nil -} - -// BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method -// will be called once per packet batch. -func (n *GeneratorInterceptor) BindRTCPWriter(writer interceptor.RTCPWriter) interceptor.RTCPWriter { - n.m.Lock() - defer n.m.Unlock() - - if n.isClosed() { - return writer - } - - n.wg.Add(1) - - go n.loop(writer) - - return writer -} - -// 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. -func (n *GeneratorInterceptor) BindRemoteStream(info *interceptor.StreamInfo, reader interceptor.RTPReader) interceptor.RTPReader { - if !streamSupportNack(info) { - return reader - } - - // error is already checked in NewGeneratorInterceptor - receiveLog, _ := newReceiveLog(n.size) - n.receiveLogsMu.Lock() - n.receiveLogs[info.SSRC] = receiveLog - n.receiveLogsMu.Unlock() - - return interceptor.RTPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) { - i, attr, err := reader.Read(b, a) - if err != nil { - return 0, nil, err - } - - pkt := rtp.Packet{} - if err = pkt.Unmarshal(b[:i]); err != nil { - return 0, nil, err - } - receiveLog.add(pkt.Header.SequenceNumber) - - return i, attr, nil - }) -} - -// UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (n *GeneratorInterceptor) UnbindLocalStream(info *interceptor.StreamInfo) { - n.receiveLogsMu.Lock() - delete(n.receiveLogs, info.SSRC) - n.receiveLogsMu.Unlock() -} - -// Close closes the interceptor -func (n *GeneratorInterceptor) Close() error { - defer n.wg.Wait() - n.m.Lock() - defer n.m.Unlock() - - if !n.isClosed() { - close(n.close) - } - - return nil -} - -func (n *GeneratorInterceptor) loop(rtcpWriter interceptor.RTCPWriter) { - defer n.wg.Done() - - senderSSRC := rand.Uint32() // #nosec - - ticker := time.NewTicker(n.interval) - for { - select { - case <-ticker.C: - func() { - n.receiveLogsMu.Lock() - defer n.receiveLogsMu.Unlock() - - for ssrc, receiveLog := range n.receiveLogs { - missing := receiveLog.missingSeqNumbers(n.skipLastN) - if len(missing) == 0 { - continue - } - - nack := &rtcp.TransportLayerNack{ - SenderSSRC: senderSSRC, - MediaSSRC: ssrc, - Nacks: rtcp.NackPairsFromSequenceNumbers(missing), - } - - if _, err := rtcpWriter.Write([]rtcp.Packet{nack}, interceptor.Attributes{}); err != nil { - n.log.Warnf("failed sending nack: %+v", err) - } - } - }() - case <-n.close: - return - } - } -} - -func (n *GeneratorInterceptor) isClosed() bool { - select { - case <-n.close: - return true - default: - return false - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/generator_option.go b/vendor/github.com/pion/interceptor/pkg/nack/generator_option.go deleted file mode 100644 index 092f5db..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/generator_option.go +++ /dev/null @@ -1,44 +0,0 @@ -package nack - -import ( - "time" - - "github.com/pion/logging" -) - -// GeneratorOption can be used to configure GeneratorInterceptor -type GeneratorOption func(r *GeneratorInterceptor) error - -// GeneratorSize sets the size of the interceptor. -// Size must be one of: 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 -func GeneratorSize(size uint16) GeneratorOption { - return func(r *GeneratorInterceptor) error { - r.size = size - return nil - } -} - -// GeneratorSkipLastN sets the number of packets (n-1 packets before the last received packets) to ignore when generating -// nack requests. -func GeneratorSkipLastN(skipLastN uint16) GeneratorOption { - return func(r *GeneratorInterceptor) error { - r.skipLastN = skipLastN - return nil - } -} - -// GeneratorLog sets a logger for the interceptor -func GeneratorLog(log logging.LeveledLogger) GeneratorOption { - return func(r *GeneratorInterceptor) error { - r.log = log - return nil - } -} - -// GeneratorInterval sets the nack send interval for the interceptor -func GeneratorInterval(interval time.Duration) GeneratorOption { - return func(r *GeneratorInterceptor) error { - r.interval = interval - return nil - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/nack.go b/vendor/github.com/pion/interceptor/pkg/nack/nack.go deleted file mode 100644 index a658e7f..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/nack.go +++ /dev/null @@ -1,14 +0,0 @@ -// Package nack provides interceptors to implement sending and receiving negative acknowledgements -package nack - -import "github.com/pion/interceptor" - -func streamSupportNack(info *interceptor.StreamInfo) bool { - for _, fb := range info.RTCPFeedback { - if fb.Type == "nack" && fb.Parameter == "" { - return true - } - } - - return false -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/receive_log.go b/vendor/github.com/pion/interceptor/pkg/nack/receive_log.go deleted file mode 100644 index 8107f59..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/receive_log.go +++ /dev/null @@ -1,134 +0,0 @@ -package nack - -import ( - "fmt" - "sync" -) - -type receiveLog struct { - packets []uint64 - size uint16 - end uint16 - started bool - lastConsecutive uint16 - m sync.RWMutex -} - -func newReceiveLog(size uint16) (*receiveLog, error) { - allowedSizes := make([]uint16, 0) - correctSize := false - for i := 6; i < 16; i++ { - if size == 1<<i { - correctSize = true - break - } - allowedSizes = append(allowedSizes, 1<<i) - } - - if !correctSize { - return nil, fmt.Errorf("%w: %d is not a valid size, allowed sizes: %v", ErrInvalidSize, size, allowedSizes) - } - - return &receiveLog{ - packets: make([]uint64, size/64), - size: size, - }, nil -} - -func (s *receiveLog) add(seq uint16) { - s.m.Lock() - defer s.m.Unlock() - - if !s.started { - s.setReceived(seq) - s.end = seq - s.started = true - s.lastConsecutive = seq - return - } - - diff := seq - s.end - switch { - case diff == 0: - return - case diff < uint16SizeHalf: - // this means a positive diff, in other words seq > end (with counting for rollovers) - for i := s.end + 1; i != seq; i++ { - // clear packets between end and seq (these may contain packets from a "size" ago) - s.delReceived(i) - } - s.end = seq - - if s.lastConsecutive+1 == seq { - s.lastConsecutive = seq - } else if seq-s.lastConsecutive > s.size { - s.lastConsecutive = seq - s.size - s.fixLastConsecutive() // there might be valid packets at the beginning of the buffer now - } - case s.lastConsecutive+1 == seq: - // negative diff, seq < end (with counting for rollovers) - s.lastConsecutive = seq - s.fixLastConsecutive() // there might be other valid packets after seq - } - - s.setReceived(seq) -} - -func (s *receiveLog) get(seq uint16) bool { - s.m.RLock() - defer s.m.RUnlock() - - diff := s.end - seq - if diff >= uint16SizeHalf { - return false - } - - if diff >= s.size { - return false - } - - return s.getReceived(seq) -} - -func (s *receiveLog) missingSeqNumbers(skipLastN uint16) []uint16 { - s.m.RLock() - defer s.m.RUnlock() - - until := s.end - skipLastN - if until-s.lastConsecutive >= uint16SizeHalf { - // until < s.lastConsecutive (counting for rollover) - return nil - } - - missingPacketSeqNums := make([]uint16, 0) - for i := s.lastConsecutive + 1; i != until+1; i++ { - if !s.getReceived(i) { - missingPacketSeqNums = append(missingPacketSeqNums, i) - } - } - - return missingPacketSeqNums -} - -func (s *receiveLog) setReceived(seq uint16) { - pos := seq % s.size - s.packets[pos/64] |= 1 << (pos % 64) -} - -func (s *receiveLog) delReceived(seq uint16) { - pos := seq % s.size - s.packets[pos/64] &^= 1 << (pos % 64) -} - -func (s *receiveLog) getReceived(seq uint16) bool { - pos := seq % s.size - return (s.packets[pos/64] & (1 << (pos % 64))) != 0 -} - -func (s *receiveLog) fixLastConsecutive() { - i := s.lastConsecutive + 1 - for ; i != s.end+1 && s.getReceived(i); i++ { - // find all consecutive packets - } - s.lastConsecutive = i - 1 -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/responder_interceptor.go b/vendor/github.com/pion/interceptor/pkg/nack/responder_interceptor.go deleted file mode 100644 index 121657e..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/responder_interceptor.go +++ /dev/null @@ -1,119 +0,0 @@ -package nack - -import ( - "sync" - - "github.com/pion/interceptor" - "github.com/pion/logging" - "github.com/pion/rtcp" - "github.com/pion/rtp" -) - -// ResponderInterceptor responds to nack feedback messages -type ResponderInterceptor struct { - interceptor.NoOp - size uint16 - log logging.LeveledLogger - - streams map[uint32]*localStream - streamsMu sync.Mutex -} - -type localStream struct { - sendBuffer *sendBuffer - rtpWriter interceptor.RTPWriter -} - -// NewResponderInterceptor returns a new GeneratorInterceptor interceptor -func NewResponderInterceptor(opts ...ResponderOption) (*ResponderInterceptor, error) { - r := &ResponderInterceptor{ - size: 8192, - log: logging.NewDefaultLoggerFactory().NewLogger("nack_responder"), - streams: map[uint32]*localStream{}, - } - - for _, opt := range opts { - if err := opt(r); err != nil { - return nil, err - } - } - - if _, err := newSendBuffer(r.size); err != nil { - return nil, err - } - - return r, nil -} - -// 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. -func (n *ResponderInterceptor) BindRTCPReader(reader interceptor.RTCPReader) interceptor.RTCPReader { - return interceptor.RTCPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) { - i, attr, err := reader.Read(b, a) - if err != nil { - return 0, nil, err - } - - pkts, err := rtcp.Unmarshal(b[:i]) - if err != nil { - return 0, nil, err - } - for _, rtcpPacket := range pkts { - nack, ok := rtcpPacket.(*rtcp.TransportLayerNack) - if !ok { - continue - } - - go n.resendPackets(nack) - } - - return i, attr, err - }) -} - -// 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. -func (n *ResponderInterceptor) BindLocalStream(info *interceptor.StreamInfo, writer interceptor.RTPWriter) interceptor.RTPWriter { - if !streamSupportNack(info) { - return writer - } - - // error is already checked in NewGeneratorInterceptor - sendBuffer, _ := newSendBuffer(n.size) - n.streamsMu.Lock() - n.streams[info.SSRC] = &localStream{sendBuffer: sendBuffer, rtpWriter: writer} - n.streamsMu.Unlock() - - return interceptor.RTPWriterFunc(func(header *rtp.Header, payload []byte, attributes interceptor.Attributes) (int, error) { - sendBuffer.add(&rtp.Packet{Header: *header, Payload: payload}) - return writer.Write(header, payload, attributes) - }) -} - -// UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (n *ResponderInterceptor) UnbindLocalStream(info *interceptor.StreamInfo) { - n.streamsMu.Lock() - delete(n.streams, info.SSRC) - n.streamsMu.Unlock() -} - -func (n *ResponderInterceptor) resendPackets(nack *rtcp.TransportLayerNack) { - n.streamsMu.Lock() - stream, ok := n.streams[nack.MediaSSRC] - n.streamsMu.Unlock() - if !ok { - return - } - - for i := range nack.Nacks { - nack.Nacks[i].Range(func(seq uint16) bool { - if p := stream.sendBuffer.get(seq); p != nil { - if _, err := stream.rtpWriter.Write(&p.Header, p.Payload, interceptor.Attributes{}); err != nil { - n.log.Warnf("failed resending nacked packet: %+v", err) - } - } - - return true - }) - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/responder_option.go b/vendor/github.com/pion/interceptor/pkg/nack/responder_option.go deleted file mode 100644 index 7ad52c8..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/responder_option.go +++ /dev/null @@ -1,23 +0,0 @@ -package nack - -import "github.com/pion/logging" - -// ResponderOption can be used to configure ResponderInterceptor -type ResponderOption func(s *ResponderInterceptor) error - -// ResponderSize sets the size of the interceptor. -// Size must be one of: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 -func ResponderSize(size uint16) ResponderOption { - return func(r *ResponderInterceptor) error { - r.size = size - return nil - } -} - -// ResponderLog sets a logger for the interceptor -func ResponderLog(log logging.LeveledLogger) ResponderOption { - return func(r *ResponderInterceptor) error { - r.log = log - return nil - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/nack/send_buffer.go b/vendor/github.com/pion/interceptor/pkg/nack/send_buffer.go deleted file mode 100644 index cf3f020..0000000 --- a/vendor/github.com/pion/interceptor/pkg/nack/send_buffer.go +++ /dev/null @@ -1,74 +0,0 @@ -package nack - -import ( - "fmt" - - "github.com/pion/rtp" -) - -const ( - uint16SizeHalf = 1 << 15 -) - -type sendBuffer struct { - packets []*rtp.Packet - size uint16 - lastAdded uint16 - started bool -} - -func newSendBuffer(size uint16) (*sendBuffer, error) { - allowedSizes := make([]uint16, 0) - correctSize := false - for i := 0; i < 16; i++ { - if size == 1<<i { - correctSize = true - break - } - allowedSizes = append(allowedSizes, 1<<i) - } - - if !correctSize { - return nil, fmt.Errorf("%w: %d is not a valid size, allowed sizes: %v", ErrInvalidSize, size, allowedSizes) - } - - return &sendBuffer{ - packets: make([]*rtp.Packet, size), - size: size, - }, nil -} - -func (s *sendBuffer) add(packet *rtp.Packet) { - seq := packet.SequenceNumber - if !s.started { - s.packets[seq%s.size] = packet - s.lastAdded = seq - s.started = true - return - } - - diff := seq - s.lastAdded - if diff == 0 { - return - } else if diff < uint16SizeHalf { - for i := s.lastAdded + 1; i != seq; i++ { - s.packets[i%s.size] = nil - } - } - - s.packets[seq%s.size] = packet - s.lastAdded = seq -} - -func (s *sendBuffer) get(seq uint16) *rtp.Packet { - diff := s.lastAdded - seq - if diff >= uint16SizeHalf { - return nil - } - - if diff >= s.size { - return nil - } - - return s.packets[seq%s.size] -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/receiver_interceptor.go b/vendor/github.com/pion/interceptor/pkg/report/receiver_interceptor.go deleted file mode 100644 index 5235b99..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/receiver_interceptor.go +++ /dev/null @@ -1,166 +0,0 @@ -package report - -import ( - "sync" - "time" - - "github.com/pion/interceptor" - "github.com/pion/logging" - "github.com/pion/rtcp" - "github.com/pion/rtp" -) - -// ReceiverInterceptor interceptor generates receiver reports. -type ReceiverInterceptor struct { - interceptor.NoOp - interval time.Duration - now func() time.Time - streams sync.Map - log logging.LeveledLogger - m sync.Mutex - wg sync.WaitGroup - close chan struct{} -} - -// NewReceiverInterceptor returns a new ReceiverInterceptor interceptor. -func NewReceiverInterceptor(opts ...ReceiverOption) (*ReceiverInterceptor, error) { - r := &ReceiverInterceptor{ - interval: 1 * time.Second, - now: time.Now, - log: logging.NewDefaultLoggerFactory().NewLogger("receiver_interceptor"), - close: make(chan struct{}), - } - - for _, opt := range opts { - if err := opt(r); err != nil { - return nil, err - } - } - - return r, nil -} - -func (r *ReceiverInterceptor) isClosed() bool { - select { - case <-r.close: - return true - default: - return false - } -} - -// Close closes the interceptor. -func (r *ReceiverInterceptor) Close() error { - defer r.wg.Wait() - r.m.Lock() - defer r.m.Unlock() - - if !r.isClosed() { - close(r.close) - } - - return nil -} - -// BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method -// will be called once per packet batch. -func (r *ReceiverInterceptor) BindRTCPWriter(writer interceptor.RTCPWriter) interceptor.RTCPWriter { - r.m.Lock() - defer r.m.Unlock() - - if r.isClosed() { - return writer - } - - r.wg.Add(1) - - go r.loop(writer) - - return writer -} - -func (r *ReceiverInterceptor) loop(rtcpWriter interceptor.RTCPWriter) { - defer r.wg.Done() - - ticker := time.NewTicker(r.interval) - for { - select { - case <-ticker.C: - now := r.now() - r.streams.Range(func(key, value interface{}) bool { - stream := value.(*receiverStream) - - var pkts []rtcp.Packet - - pkts = append(pkts, stream.generateReport(now)) - - if _, err := rtcpWriter.Write(pkts, interceptor.Attributes{}); err != nil { - r.log.Warnf("failed sending: %+v", err) - } - - return true - }) - - case <-r.close: - return - } - } -} - -// 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. -func (r *ReceiverInterceptor) BindRemoteStream(info *interceptor.StreamInfo, reader interceptor.RTPReader) interceptor.RTPReader { - stream := newReceiverStream(info.SSRC, info.ClockRate) - r.streams.Store(info.SSRC, stream) - - return interceptor.RTPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) { - i, attr, err := reader.Read(b, a) - if err != nil { - return 0, nil, err - } - - pkt := rtp.Packet{} - if err = pkt.Unmarshal(b[:i]); err != nil { - return 0, nil, err - } - - stream.processRTP(r.now(), &pkt) - - return i, attr, nil - }) -} - -// UnbindLocalStream is called when the Stream is removed. It can be used to clean up any data related to that track. -func (r *ReceiverInterceptor) UnbindLocalStream(info *interceptor.StreamInfo) { - r.streams.Delete(info.SSRC) -} - -// 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. -func (r *ReceiverInterceptor) BindRTCPReader(reader interceptor.RTCPReader) interceptor.RTCPReader { - return interceptor.RTCPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) { - i, attr, err := reader.Read(b, a) - if err != nil { - return 0, nil, err - } - - pkts, err := rtcp.Unmarshal(b[:i]) - if err != nil { - return 0, nil, err - } - - for _, pkt := range pkts { - if sr, ok := (pkt).(*rtcp.SenderReport); ok { - value, ok := r.streams.Load(sr.SSRC) - if !ok { - continue - } - - stream := value.(*receiverStream) - stream.processSenderReport(r.now(), sr) - } - } - - return i, attr, nil - }) -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/receiver_option.go b/vendor/github.com/pion/interceptor/pkg/report/receiver_option.go deleted file mode 100644 index 0467dc5..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/receiver_option.go +++ /dev/null @@ -1,34 +0,0 @@ -package report - -import ( - "time" - - "github.com/pion/logging" -) - -// ReceiverOption can be used to configure ReceiverInterceptor. -type ReceiverOption func(r *ReceiverInterceptor) error - -// ReceiverLog sets a logger for the interceptor. -func ReceiverLog(log logging.LeveledLogger) ReceiverOption { - return func(r *ReceiverInterceptor) error { - r.log = log - return nil - } -} - -// ReceiverInterval sets send interval for the interceptor. -func ReceiverInterval(interval time.Duration) ReceiverOption { - return func(r *ReceiverInterceptor) error { - r.interval = interval - return nil - } -} - -// ReceiverNow sets an alternative for the time.Now function. -func ReceiverNow(f func() time.Time) ReceiverOption { - return func(r *ReceiverInterceptor) error { - r.now = f - return nil - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/receiver_stream.go b/vendor/github.com/pion/interceptor/pkg/report/receiver_stream.go deleted file mode 100644 index 569715d..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/receiver_stream.go +++ /dev/null @@ -1,159 +0,0 @@ -package report - -import ( - "math/rand" - "sync" - "time" - - "github.com/pion/rtcp" - "github.com/pion/rtp" -) - -type receiverStream struct { - ssrc uint32 - receiverSSRC uint32 - clockRate float64 - - m sync.Mutex - size uint16 - packets []uint64 - started bool - seqnumCycles uint16 - lastSeqnum uint16 - lastReportSeqnum uint16 - lastRTPTimeRTP uint32 - lastRTPTimeTime time.Time - jitter float64 - lastSenderReport uint32 - lastSenderReportTime time.Time - totalLost uint32 -} - -func newReceiverStream(ssrc uint32, clockRate uint32) *receiverStream { - receiverSSRC := rand.Uint32() // #nosec - return &receiverStream{ - ssrc: ssrc, - receiverSSRC: receiverSSRC, - clockRate: float64(clockRate), - size: 128, - packets: make([]uint64, 128), - } -} - -func (stream *receiverStream) processRTP(now time.Time, pkt *rtp.Packet) { - stream.m.Lock() - defer stream.m.Unlock() - - if !stream.started { // first frame - stream.started = true - stream.setReceived(pkt.SequenceNumber) - stream.lastSeqnum = pkt.SequenceNumber - stream.lastReportSeqnum = pkt.SequenceNumber - 1 - stream.lastRTPTimeRTP = pkt.Timestamp - stream.lastRTPTimeTime = now - } else { // following frames - stream.setReceived(pkt.SequenceNumber) - - diff := int32(pkt.SequenceNumber) - int32(stream.lastSeqnum) - if diff > 0 || diff < -0x0FFF { - // overflow - if diff < -0x0FFF { - stream.seqnumCycles++ - } - - // set missing packets as missing - for i := stream.lastSeqnum + 1; i != pkt.SequenceNumber; i++ { - stream.delReceived(i) - } - - stream.lastSeqnum = pkt.SequenceNumber - } - - // compute jitter - // https://tools.ietf.org/html/rfc3550#page-39 - D := now.Sub(stream.lastRTPTimeTime).Seconds()*stream.clockRate - - (float64(pkt.Timestamp) - float64(stream.lastRTPTimeRTP)) - if D < 0 { - D = -D - } - stream.jitter += (D - stream.jitter) / 16 - stream.lastRTPTimeRTP = pkt.Timestamp - stream.lastRTPTimeTime = now - } -} - -func (stream *receiverStream) setReceived(seq uint16) { - pos := seq % stream.size - stream.packets[pos/64] |= 1 << (pos % 64) -} - -func (stream *receiverStream) delReceived(seq uint16) { - pos := seq % stream.size - stream.packets[pos/64] &^= 1 << (pos % 64) -} - -func (stream *receiverStream) getReceived(seq uint16) bool { - pos := seq % stream.size - return (stream.packets[pos/64] & (1 << (pos % 64))) != 0 -} - -func (stream *receiverStream) processSenderReport(now time.Time, sr *rtcp.SenderReport) { - stream.m.Lock() - defer stream.m.Unlock() - - stream.lastSenderReport = uint32(sr.NTPTime >> 16) - stream.lastSenderReportTime = now -} - -func (stream *receiverStream) generateReport(now time.Time) *rtcp.ReceiverReport { - stream.m.Lock() - defer stream.m.Unlock() - - totalSinceReport := stream.lastSeqnum - stream.lastReportSeqnum - totalLostSinceReport := func() uint32 { - if stream.lastSeqnum == stream.lastReportSeqnum { - return 0 - } - - ret := uint32(0) - for i := stream.lastReportSeqnum + 1; i != stream.lastSeqnum; i++ { - if !stream.getReceived(i) { - ret++ - } - } - return ret - }() - stream.totalLost += totalLostSinceReport - - // allow up to 24 bits - if totalLostSinceReport > 0xFFFFFF { - totalLostSinceReport = 0xFFFFFF - } - if stream.totalLost > 0xFFFFFF { - stream.totalLost = 0xFFFFFF - } - - r := &rtcp.ReceiverReport{ - SSRC: stream.receiverSSRC, - Reports: []rtcp.ReceptionReport{ - { - SSRC: stream.ssrc, - LastSequenceNumber: uint32(stream.seqnumCycles)<<16 | uint32(stream.lastSeqnum), - LastSenderReport: stream.lastSenderReport, - FractionLost: uint8(float64(totalLostSinceReport*256) / float64(totalSinceReport)), - TotalLost: stream.totalLost, - Delay: func() uint32 { - if stream.lastSenderReportTime.IsZero() { - return 0 - } - return uint32(now.Sub(stream.lastSenderReportTime).Seconds() * 65536) - }(), - Jitter: uint32(stream.jitter), - }, - }, - } - - stream.lastReportSeqnum = stream.lastSeqnum - - return r -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/report.go b/vendor/github.com/pion/interceptor/pkg/report/report.go deleted file mode 100644 index 0a3034c..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/report.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package report provides interceptors to implement sending sender and receiver reports. -package report diff --git a/vendor/github.com/pion/interceptor/pkg/report/sender_interceptor.go b/vendor/github.com/pion/interceptor/pkg/report/sender_interceptor.go deleted file mode 100644 index e56fd8c..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/sender_interceptor.go +++ /dev/null @@ -1,139 +0,0 @@ -package report - -import ( - "sync" - "time" - - "github.com/pion/interceptor" - "github.com/pion/logging" - "github.com/pion/rtcp" - "github.com/pion/rtp" -) - -func ntpTime(t time.Time) uint64 { - // seconds since 1st January 1900 - s := (float64(t.UnixNano()) / 1000000000) + 2208988800 - - // higher 32 bits are the integer part, lower 32 bits are the fractional part - integerPart := uint32(s) - fractionalPart := uint32((s - float64(integerPart)) * 0xFFFFFFFF) - return uint64(integerPart)<<32 | uint64(fractionalPart) -} - -// SenderInterceptor interceptor generates sender reports. -type SenderInterceptor struct { - interceptor.NoOp - interval time.Duration - now func() time.Time - streams sync.Map - log logging.LeveledLogger - m sync.Mutex - wg sync.WaitGroup - close chan struct{} -} - -// NewSenderInterceptor returns a new SenderInterceptor interceptor. -func NewSenderInterceptor(opts ...SenderOption) (*SenderInterceptor, error) { - s := &SenderInterceptor{ - interval: 1 * time.Second, - now: time.Now, - log: logging.NewDefaultLoggerFactory().NewLogger("sender_interceptor"), - close: make(chan struct{}), - } - - for _, opt := range opts { - if err := opt(s); err != nil { - return nil, err - } - } - - return s, nil -} - -func (s *SenderInterceptor) isClosed() bool { - select { - case <-s.close: - return true - default: - return false - } -} - -// Close closes the interceptor. -func (s *SenderInterceptor) Close() error { - defer s.wg.Wait() - s.m.Lock() - defer s.m.Unlock() - - if !s.isClosed() { - close(s.close) - } - - return nil -} - -// BindRTCPWriter lets you modify any outgoing RTCP packets. It is called once per PeerConnection. The returned method -// will be called once per packet batch. -func (s *SenderInterceptor) BindRTCPWriter(writer interceptor.RTCPWriter) interceptor.RTCPWriter { - s.m.Lock() - defer s.m.Unlock() - - if s.isClosed() { - return writer - } - - s.wg.Add(1) - - go s.loop(writer) - - return writer -} - -func (s *SenderInterceptor) loop(rtcpWriter interceptor.RTCPWriter) { - defer s.wg.Done() - - ticker := time.NewTicker(s.interval) - for { - select { - case <-ticker.C: - now := s.now() - s.streams.Range(func(key, value interface{}) bool { - ssrc := key.(uint32) - stream := value.(*senderStream) - - stream.m.Lock() - defer stream.m.Unlock() - - sr := &rtcp.SenderReport{ - SSRC: ssrc, - NTPTime: ntpTime(now), - RTPTime: stream.lastRTPTimeRTP + uint32(now.Sub(stream.lastRTPTimeTime).Seconds()*stream.clockRate), - PacketCount: stream.packetCount, - OctetCount: stream.octetCount, - } - - if _, err := rtcpWriter.Write([]rtcp.Packet{sr}, interceptor.Attributes{}); err != nil { - s.log.Warnf("failed sending: %+v", err) - } - - return true - }) - - case <-s.close: - return - } - } -} - -// 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. -func (s *SenderInterceptor) BindLocalStream(info *interceptor.StreamInfo, writer interceptor.RTPWriter) interceptor.RTPWriter { - stream := newSenderStream(info.ClockRate) - s.streams.Store(info.SSRC, stream) - - return interceptor.RTPWriterFunc(func(header *rtp.Header, payload []byte, a interceptor.Attributes) (int, error) { - stream.processRTP(s.now(), header, payload) - - return writer.Write(header, payload, a) - }) -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/sender_option.go b/vendor/github.com/pion/interceptor/pkg/report/sender_option.go deleted file mode 100644 index 4cb161a..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/sender_option.go +++ /dev/null @@ -1,34 +0,0 @@ -package report - -import ( - "time" - - "github.com/pion/logging" -) - -// SenderOption can be used to configure SenderInterceptor. -type SenderOption func(r *SenderInterceptor) error - -// SenderLog sets a logger for the interceptor. -func SenderLog(log logging.LeveledLogger) SenderOption { - return func(r *SenderInterceptor) error { - r.log = log - return nil - } -} - -// SenderInterval sets send interval for the interceptor. -func SenderInterval(interval time.Duration) SenderOption { - return func(r *SenderInterceptor) error { - r.interval = interval - return nil - } -} - -// SenderNow sets an alternative for the time.Now function. -func SenderNow(f func() time.Time) SenderOption { - return func(r *SenderInterceptor) error { - r.now = f - return nil - } -} diff --git a/vendor/github.com/pion/interceptor/pkg/report/sender_stream.go b/vendor/github.com/pion/interceptor/pkg/report/sender_stream.go deleted file mode 100644 index 851d70e..0000000 --- a/vendor/github.com/pion/interceptor/pkg/report/sender_stream.go +++ /dev/null @@ -1,37 +0,0 @@ -package report - -import ( - "sync" - "time" - - "github.com/pion/rtp" -) - -type senderStream struct { - clockRate float64 - m sync.Mutex - - // data from rtp packets - lastRTPTimeRTP uint32 - lastRTPTimeTime time.Time - packetCount uint32 - octetCount uint32 -} - -func newSenderStream(clockRate uint32) *senderStream { - return &senderStream{ - clockRate: float64(clockRate), - } -} - -func (stream *senderStream) processRTP(now time.Time, header *rtp.Header, payload []byte) { - stream.m.Lock() - defer stream.m.Unlock() - - // always update time to minimize errors - stream.lastRTPTimeRTP = header.Timestamp - stream.lastRTPTimeTime = now - - stream.packetCount++ - stream.octetCount += uint32(len(payload)) -} diff --git a/vendor/github.com/pion/interceptor/registry.go b/vendor/github.com/pion/interceptor/registry.go deleted file mode 100644 index d3eed3b..0000000 --- a/vendor/github.com/pion/interceptor/registry.go +++ /dev/null @@ -1,20 +0,0 @@ -package interceptor - -// Registry is a collector for interceptors. -type Registry struct { - interceptors []Interceptor -} - -// Add adds a new Interceptor to the registry. -func (i *Registry) Add(icpr Interceptor) { - i.interceptors = append(i.interceptors, icpr) -} - -// Build constructs a single Interceptor from a InterceptorRegistry -func (i *Registry) Build() Interceptor { - if len(i.interceptors) == 0 { - return &NoOp{} - } - - return NewChain(i.interceptors) -} diff --git a/vendor/github.com/pion/interceptor/renovate.json b/vendor/github.com/pion/interceptor/renovate.json deleted file mode 100644 index 4400fd9..0000000 --- a/vendor/github.com/pion/interceptor/renovate.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": [ - "config:base" - ], - "postUpdateOptions": [ - "gomodTidy" - ], - "commitBody": "Generated by renovateBot", - "packageRules": [ - { - "packagePatterns": ["^golang.org/x/"], - "schedule": ["on the first day of the month"] - } - ] -} diff --git a/vendor/github.com/pion/interceptor/streaminfo.go b/vendor/github.com/pion/interceptor/streaminfo.go deleted file mode 100644 index 956fa53..0000000 --- a/vendor/github.com/pion/interceptor/streaminfo.go +++ /dev/null @@ -1,34 +0,0 @@ -package interceptor - -// RTPHeaderExtension represents a negotiated RFC5285 RTP header extension. -type RTPHeaderExtension struct { - URI string - ID int -} - -// StreamInfo is the Context passed when a StreamLocal or StreamRemote has been Binded or Unbinded -type StreamInfo struct { - ID string - Attributes Attributes - SSRC uint32 - PayloadType uint8 - RTPHeaderExtensions []RTPHeaderExtension - MimeType string - ClockRate uint32 - Channels uint16 - SDPFmtpLine string - RTCPFeedback []RTCPFeedback -} - -// RTCPFeedback signals the connection to use additional RTCP packet types. -// https://draft.ortc.org/#dom-rtcrtcpfeedback -type RTCPFeedback struct { - // Type is the type of feedback. - // see: https://draft.ortc.org/#dom-rtcrtcpfeedback - // valid: ack, ccm, nack, goog-remb, transport-cc - Type string - - // The parameter value depends on the type. - // For example, type="nack" parameter="pli" will send Picture Loss Indicator packets. - Parameter string -} |
