and the video comes into chat

This commit is contained in:
Dmitry Sergeev
2026-08-22 14:59:54 +03:00
parent 32f7dea31c
commit 84572fb88c
11 changed files with 554 additions and 13 deletions
+61
View File
@@ -0,0 +1,61 @@
package main
import (
"flag"
"fmt"
"log"
"mxl-player/internal/source"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
domain := flag.String("domain", "/dev/shm/mxl", "MXL domain")
flowID := flag.String("flow", "5fbec3b1-1b0f-417d-9059-8b94a47197ed", "Flow UUID")
timeout := flag.Duration("timeout", 200*time.Millisecond, "Per-grain read timeout")
count := flag.Int("count", 10, "Stop after N grains (0 = run forever)")
flag.Parse()
src, err := source.Open(*domain, *flowID)
if err != nil {
log.Fatal(err)
}
defer src.Close()
fmt.Printf("format=%s rate=%d/%d stride=%d grainCount=%d\n",
src.Format(),
src.Rate().Num,
src.Rate().Den,
src.Stride(),
src.GrainCount())
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
grains := 0
for {
select {
case <-stop:
fmt.Printf("\nstopping: %d grains read\n", grains)
return
default:
}
f, err := src.Next(*timeout)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
lines := uint32(0)
if src.Stride() > 0 {
lines = f.Size / src.Stride()
}
fmt.Printf("idx=%d size=%d (%dx%d, %d lines) invalid=%v\n",
f.Index, f.Size, f.Width, f.Height, lines, f.Invalid)
grains++
if *count > 0 && grains >= *count {
fmt.Printf("done: %d grains read\n", grains)
return
}
}
}