commit 6b0812c3f63be957cd5fe011f6f5faa6bdd6244c
parent 20f13bbb764ba43e808a29a70c4b5356a30ca6fe
Author: Oliver Lowe <o@olowe.co>
Date: Fri, 14 Jun 2024 14:07:05 +1000
hlsserve: use mpegts.Scanner
A good example use of Scanner. And exercises our package by decoding
every packet, then re-encoding it.
Diffstat:
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/m3u8/cmd/hlsserve/hlsserve.go b/m3u8/cmd/hlsserve/hlsserve.go
@@ -68,9 +68,10 @@ func removeOld(dir string, maxAge time.Duration) error {
return nil
}
-func dumpMedia(dir string, r io.Reader, ch <-chan time.Time) error {
+func writeSegments(dir string, r io.Reader, ch <-chan time.Time) error {
var segment int
segments := &bytes.Buffer{}
+ sc := mpegts.NewScanner(r)
for {
select {
case <-ch:
@@ -82,9 +83,13 @@ func dumpMedia(dir string, r io.Reader, ch <-chan time.Time) error {
segments.Reset()
segment++
default:
- _, err := io.CopyN(segments, r, int64(maxTSBytes))
- if err != nil {
- return err
+ if sc.Scan() {
+ if err := mpegts.Encode(segments, sc.Packet()); err != nil {
+ return fmt.Errorf("segment %d: encode packet: %w", segment, err)
+ }
+ }
+ if sc.Err() != nil {
+ return fmt.Errorf("segment %d: scan: %w", segment, sc.Err())
}
}
}
@@ -154,8 +159,8 @@ func main() {
go func() {
ticker := time.NewTicker(segmentDuration)
- if err := dumpMedia(cacheDir, conn, ticker.C); err != nil {
- log.Fatalln("dump media:", err)
+ if err := writeSegments(cacheDir, conn, ticker.C); err != nil {
+ log.Fatalln("write segments:", err)
}
}()