54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package srs
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"sync-live/gen"
|
|
)
|
|
|
|
// Provider 暴露 SRS 后端能力(本地 docker 默认可达)。
|
|
type Provider struct {
|
|
baseURL string
|
|
app string
|
|
secret string
|
|
candidate string
|
|
}
|
|
|
|
func NewProvider(baseURL, app, secret, candidate string) *Provider {
|
|
return &Provider{baseURL: baseURL, app: app, secret: secret, candidate: candidate}
|
|
}
|
|
|
|
func (p *Provider) Name() string { return "srs" }
|
|
func (p *Provider) Primary() bool { return false }
|
|
func (p *Provider) Configured() bool { return true }
|
|
|
|
func (p *Provider) Kind() string { return "srs-hls" }
|
|
|
|
func (p *Provider) Forward(ctx context.Context, room, stream string) (*ForwardResult, error) {
|
|
if stream == "" {
|
|
return nil, fmt.Errorf("stream required")
|
|
}
|
|
url := fmt.Sprintf("/live/%s.m3u8", stream)
|
|
return &ForwardResult{Kind: "srs-hls", URL: url, Status: "ready"}, nil
|
|
}
|
|
|
|
type ForwardResult struct {
|
|
Kind string
|
|
URL string
|
|
Status string
|
|
}
|
|
func (p *Provider) BaseURL() string { return p.baseURL }
|
|
func (p *Provider) App() string { return p.app }
|
|
func (p *Provider) Secret() string { return p.secret }
|
|
func (p *Provider) Candidate() string { return p.candidate }
|
|
|
|
func (p *Provider) BackendInfo() *gen.BackendInfo {
|
|
return &gen.BackendInfo{
|
|
Kind: gen.BackendKind_BACKEND_KIND_SRS,
|
|
Name: "SRS",
|
|
Configured: true,
|
|
Primary: false,
|
|
}
|
|
}
|