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