Commit Diff


commit - 7c79b0547941d5c8539ca8c8206cefdf0f4f74aa
commit + cb9f53840ce84710f2da783c0f4efc3a96479ba2
blob - 63c2de52e09c900b8dd7f33d74fb475c0fd7b2f5
blob + 029ceca35b82657bd756542a6ef0674e036f7a4f
--- mpegts/codec.go
+++ mpegts/codec.go
@@ -2,10 +2,14 @@ package mpegts
 
 import (
 	"encoding/binary"
+	"errors"
 	"fmt"
 	"io"
 )
 
+var ErrLongPacket = errors.New("long packet")
+var ErrShortPacket = errors.New("short packet")
+
 func Unmarshal(buf []byte, p *Packet) error {
 	if len(buf) != PacketSize {
 		return fmt.Errorf("need exactly %d bytes, have %d", PacketSize, len(buf))
@@ -253,8 +257,10 @@ func Encode(w io.Writer, p *Packet) error {
 	if p.Payload != nil {
 		buf = append(buf, p.Payload...)
 	}
-	if len(buf) != PacketSize {
-		return fmt.Errorf("bad encoded packet length %d", len(buf))
+	if len(buf) > PacketSize {
+		return fmt.Errorf("%w: %d bytes", ErrLongPacket, len(buf))
+	} else if len(buf) < PacketSize {
+		return fmt.Errorf("%w: %d bytes", ErrShortPacket, len(buf))
 	}
 	_, err := w.Write(buf)
 	return err