mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-09-27 04:36:12 +08:00
42 lines
791 B
Go
42 lines
791 B
Go
package streams
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/AlexxIT/go2rtc/pkg/streamer"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
type Handler func(url string) (streamer.Producer, error)
|
|
|
|
var handlers = map[string]Handler{}
|
|
var handlersMu sync.Mutex
|
|
|
|
func HandleFunc(scheme string, handler Handler) {
|
|
handlersMu.Lock()
|
|
handlers[scheme] = handler
|
|
handlersMu.Unlock()
|
|
}
|
|
|
|
func getHandler(url string) Handler {
|
|
i := strings.IndexByte(url, ':')
|
|
if i <= 0 { // TODO: i < 4 ?
|
|
return nil
|
|
}
|
|
handlersMu.Lock()
|
|
defer handlersMu.Unlock()
|
|
return handlers[url[:i]]
|
|
}
|
|
|
|
func HasProducer(url string) bool {
|
|
return getHandler(url) != nil
|
|
}
|
|
|
|
func GetProducer(url string) (streamer.Producer, error) {
|
|
handler := getHandler(url)
|
|
if handler == nil {
|
|
return nil, fmt.Errorf("unsupported scheme: %s", url)
|
|
}
|
|
return handler(url)
|
|
}
|