mirror of
				https://github.com/AlexxIT/go2rtc.git
				synced 2025-10-31 11:46:26 +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)
 | |
| }
 | 
