Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
2.2 kB · 107 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108package media
import ( "bytes" "context" "fmt" "io" "os" "testing"
"github.com/go-gst/go-gst/gst" "github.com/go-gst/go-gst/gst/app" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" "stream.place/streamplace/pkg/log")
func TestWriterNewSample(t *testing.T) { withNoGSTLeaks(t, func() { filePath := getFixture("5sec.mp4") fileInfo, err := os.Stat(filePath) require.NoError(t, err) fileSize := fileInfo.Size() t.Logf("Test file size: %d bytes", fileSize) g, ctx := errgroup.WithContext(context.Background()) // ctx = log.WithDebugValue(ctx, map[string]map[string]int{"func": {"TestWriterNewSample": 9}}) for i := 0; i < streamplaceTestCount; i++ { g.Go(func() error { bs := bytes.Buffer{} err := writerNewSampleInner(ctx, i, &bs) if err != nil { return err } if bs.Len() != int(fileSize) { return fmt.Errorf("expected %d bytes, got %d", fileSize, bs.Len()) } return nil }) } err = g.Wait() require.NoError(t, err) })}
func writerNewSampleInner(ctx context.Context, i int, w io.Writer) error { ctx = log.WithLogValues(ctx, "func", "TestWriterNewSample") ctx, cancel := context.WithCancel(ctx) defer cancel()
pipeline, err := gst.NewPipeline(fmt.Sprintf("TestWriterNewSample-%d", i)) if err != nil { return err }
fileSrc, err := gst.NewElementWithProperties("filesrc", map[string]any{ "location": getFixture("5sec.mp4"), }) if err != nil { return err } err = pipeline.Add(fileSrc) if err != nil { return err }
var busErr error go func() { busErr = HandleBusMessages(ctx, pipeline) cancel() }()
appSink, err := gst.NewElementWithProperties("appsink", map[string]any{ "name": fmt.Sprintf("TestWriterNewSample-appsink-%d", i), "sync": false, }) if err != nil { return err } err = pipeline.Add(appSink) if err != nil { return err }
sink := app.SinkFromElement(appSink) sink.SetCallbacks(&app.SinkCallbacks{ NewSampleFunc: WriterNewSample(ctx, w), })
err = fileSrc.Link(appSink) if err != nil { return err }
err = pipeline.SetState(gst.StatePlaying) if err != nil { return err }
<-ctx.Done()
err = pipeline.SetState(gst.StateNull) if err != nil { return err }
return busErr}