golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
// Package test contains test utilities. |
|
package test |
|
|
|
import ( |
|
"context" |
|
|
|
"github.com/bluenviron/mediamtx/internal/asyncwriter" |
|
"github.com/bluenviron/mediamtx/internal/conf" |
|
"github.com/bluenviron/mediamtx/internal/defs" |
|
"github.com/bluenviron/mediamtx/internal/logger" |
|
"github.com/bluenviron/mediamtx/internal/stream" |
|
"github.com/bluenviron/mediamtx/internal/unit" |
|
) |
|
|
|
// SourceTester is a static source tester. |
|
type SourceTester struct { |
|
ctx context.Context |
|
ctxCancel func() |
|
stream *stream.Stream |
|
writer *asyncwriter.Writer |
|
|
|
Unit chan unit.Unit |
|
done chan struct{} |
|
} |
|
|
|
// NewSourceTester allocates a SourceTester. |
|
func NewSourceTester(createFunc func(defs.StaticSourceParent) defs.StaticSource, conf *conf.Path) *SourceTester { |
|
ctx, ctxCancel := context.WithCancel(context.Background()) |
|
|
|
t := &SourceTester{ |
|
ctx: ctx, |
|
ctxCancel: ctxCancel, |
|
Unit: make(chan unit.Unit), |
|
done: make(chan struct{}), |
|
} |
|
|
|
s := createFunc(t) |
|
|
|
go func() { |
|
s.Run(defs.StaticSourceRunParams{ //nolint:errcheck |
|
Context: ctx, |
|
Conf: conf, |
|
}) |
|
close(t.done) |
|
}() |
|
|
|
return t |
|
} |
|
|
|
// Close closes the tester. |
|
func (t *SourceTester) Close() { |
|
t.ctxCancel() |
|
t.writer.Stop() |
|
t.stream.Close() |
|
<-t.done |
|
} |
|
|
|
// Log implements StaticSourceParent. |
|
func (t *SourceTester) Log(_ logger.Level, _ string, _ ...interface{}) { |
|
} |
|
|
|
// SetReady implements StaticSourceParent. |
|
func (t *SourceTester) SetReady(req defs.PathSourceStaticSetReadyReq) defs.PathSourceStaticSetReadyRes { |
|
t.stream, _ = stream.New( |
|
1460, |
|
req.Desc, |
|
req.GenerateRTPPackets, |
|
t, |
|
) |
|
|
|
t.writer = asyncwriter.New(2048, t) |
|
|
|
t.stream.AddReader(t.writer, req.Desc.Medias[0], req.Desc.Medias[0].Formats[0], func(u unit.Unit) error { |
|
t.Unit <- u |
|
close(t.Unit) |
|
return nil |
|
}) |
|
t.writer.Start() |
|
|
|
return defs.PathSourceStaticSetReadyRes{ |
|
Stream: t.stream, |
|
} |
|
} |
|
|
|
// SetNotReady implements StaticSourceParent. |
|
func (t *SourceTester) SetNotReady(_ defs.PathSourceStaticSetNotReadyReq) { |
|
}
|
|
|