add DisableHeaderPadding option for TSWriter
This commit is contained in:
parent
178e22d8c1
commit
1c7da5485a
@ -167,6 +167,7 @@ func main() {
|
|||||||
w := &ts.TSWriter{
|
w := &ts.TSWriter{
|
||||||
W: file,
|
W: file,
|
||||||
PID: 0,
|
PID: 0,
|
||||||
|
DisableHeaderPadding: true,
|
||||||
}
|
}
|
||||||
pat := ts.PAT{
|
pat := ts.PAT{
|
||||||
Entries: []ts.PATEntry{
|
Entries: []ts.PATEntry{
|
||||||
@ -187,6 +188,7 @@ func main() {
|
|||||||
w := &ts.TSWriter{
|
w := &ts.TSWriter{
|
||||||
W: file,
|
W: file,
|
||||||
PID: 0x1000,
|
PID: 0x1000,
|
||||||
|
DisableHeaderPadding: true,
|
||||||
}
|
}
|
||||||
pmt := ts.PMT{
|
pmt := ts.PMT{
|
||||||
PCRPID: 0x100,
|
PCRPID: 0x100,
|
||||||
|
27
writer.go
27
writer.go
@ -25,12 +25,16 @@ func WriteUInt(w io.Writer, val uint, n int) (err error) {
|
|||||||
return WriteUInt64(w, uint64(val), n)
|
return WriteUInt64(w, uint64(val), n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteRepeatVal(w io.Writer, val byte, n int) (err error) {
|
func makeRepeatValBytes(val byte, n int) []byte {
|
||||||
b := make([]byte, n)
|
b := make([]byte, n)
|
||||||
for i := range b {
|
for i := range b {
|
||||||
b[i] = val
|
b[i] = val
|
||||||
}
|
}
|
||||||
_, err = w.Write(b)
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteRepeatVal(w io.Writer, val byte, n int) (err error) {
|
||||||
|
_, err = w.Write(makeRepeatValBytes(val, n))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +149,7 @@ type TSWriter struct {
|
|||||||
PCR uint64
|
PCR uint64
|
||||||
OPCR uint64
|
OPCR uint64
|
||||||
ContinuityCounter uint
|
ContinuityCounter uint
|
||||||
|
DisableHeaderPadding bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *TSWriter) Write(b []byte, RandomAccessIndicator bool) (err error) {
|
func (self *TSWriter) Write(b []byte, RandomAccessIndicator bool) (err error) {
|
||||||
@ -161,16 +166,26 @@ func (self *TSWriter) Write(b []byte, RandomAccessIndicator bool) (err error) {
|
|||||||
header.RandomAccessIndicator = RandomAccessIndicator
|
header.RandomAccessIndicator = RandomAccessIndicator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
requestLength := len(b)
|
||||||
|
if self.DisableHeaderPadding {
|
||||||
|
requestLength = 188
|
||||||
|
}
|
||||||
|
|
||||||
bw := &bytes.Buffer{}
|
bw := &bytes.Buffer{}
|
||||||
if err = WriteTSHeader(bw, header, len(b)); err != nil {
|
if err = WriteTSHeader(bw, header, requestLength); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
data := b[:188-bw.Len()]
|
dataLen := 188-bw.Len()
|
||||||
b = b[len(data):]
|
if self.DisableHeaderPadding && len(b) < dataLen {
|
||||||
|
b = append(b, makeRepeatValBytes(0xff, dataLen - len(b))...)
|
||||||
|
}
|
||||||
|
|
||||||
|
data := b[:dataLen]
|
||||||
|
b = b[dataLen:]
|
||||||
|
|
||||||
if DebugWriter {
|
if DebugWriter {
|
||||||
fmt.Printf("tsw: datalen=%d blen=%d\n", len(data), len(b))
|
fmt.Printf("tsw: datalen=%d blen=%d\n", dataLen, len(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = self.W.Write(bw.Bytes()); err != nil {
|
if _, err = self.W.Write(bw.Bytes()); err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user