add/remove debug

This commit is contained in:
nareix 2015-12-08 20:33:51 +08:00
parent ff9f22f46d
commit 59d52825d6
3 changed files with 56 additions and 14 deletions

View File

@ -1,4 +1,4 @@
./avconv -loglevel debug -y -i /tmp/tiny2.mov \ avconv -loglevel debug -y -i /tmp/tiny2.mov \
-bsf h264_mp4toannexb -acodec copy -vcodec copy -strict experimental /tmp/out.ts 2>&1 -bsf h264_mp4toannexb -an -vcodec copy -strict experimental /tmp/out.ts 2>&1

View File

@ -13,7 +13,8 @@ import (
type Stream struct { type Stream struct {
PID uint PID uint
Header *ts.PESHeader PESHeader *ts.PESHeader
FirstTSHeader ts.TSHeader
Title string Title string
Data bytes.Buffer Data bytes.Buffer
Type uint Type uint
@ -26,6 +27,7 @@ type Sample struct {
PTS uint64 PTS uint64
DTS uint64 DTS uint64
Data []byte Data []byte
RandomAccessIndicator bool
} }
func readSamples(filename string, ch chan Sample) { func readSamples(filename string, ch chan Sample) {
@ -68,7 +70,7 @@ func readSamples(filename string, ch chan Sample) {
return return
} }
debugStream := true debugStream := false
onStreamPayload := func() (err error) { onStreamPayload := func() (err error) {
stream := findOrCreateStream(header.PID) stream := findOrCreateStream(header.PID)
@ -77,10 +79,10 @@ func readSamples(filename string, ch chan Sample) {
if header.PayloadUnitStart { if header.PayloadUnitStart {
stream.Data = bytes.Buffer{} stream.Data = bytes.Buffer{}
if stream.Header, err = ts.ReadPESHeader(lr); err != nil { if stream.PESHeader, err = ts.ReadPESHeader(lr); err != nil {
return return
} }
stream.PCR = header.PCR stream.FirstTSHeader = header
} }
if _, err = io.CopyN(&stream.Data, lr, lr.N); err != nil { if _, err = io.CopyN(&stream.Data, lr, lr.N); err != nil {
@ -88,10 +90,10 @@ func readSamples(filename string, ch chan Sample) {
} }
if debugStream { if debugStream {
fmt.Printf("stream: %d/%d\n", stream.Data.Len(), stream.Header.DataLength) fmt.Printf("stream: %d/%d\n", stream.Data.Len(), stream.PESHeader.DataLength)
} }
if stream.Data.Len() == int(stream.Header.DataLength) { if stream.Data.Len() == int(stream.PESHeader.DataLength) {
if debug { if debug {
fmt.Println(stream.Type, stream.Title, stream.Data.Len(), "total") fmt.Println(stream.Type, stream.Title, stream.Data.Len(), "total")
fmt.Println(hex.Dump(stream.Data.Bytes())) fmt.Println(hex.Dump(stream.Data.Bytes()))
@ -99,9 +101,10 @@ func readSamples(filename string, ch chan Sample) {
ch <- Sample{ ch <- Sample{
Type: stream.Type, Type: stream.Type,
Data: stream.Data.Bytes(), Data: stream.Data.Bytes(),
PTS: stream.Header.PTS, PTS: stream.PESHeader.PTS,
DTS: stream.Header.DTS, DTS: stream.PESHeader.DTS,
PCR: stream.PCR, PCR: stream.FirstTSHeader.PCR,
RandomAccessIndicator: stream.FirstTSHeader.RandomAccessIndicator,
} }
} }
return return
@ -219,7 +222,7 @@ func main() {
if err = ts.WritePES(bw, pes, bytes.NewReader(sample.Data)); err != nil { if err = ts.WritePES(bw, pes, bytes.NewReader(sample.Data)); err != nil {
return return
} }
if err = w.Write(bw.Bytes(), false); err != nil { if err = w.Write(bw.Bytes(), sample.RandomAccessIndicator); err != nil {
return return
} }
return return
@ -243,7 +246,7 @@ func main() {
if true { if true {
fmt.Println("sample: ", len(sample.Data), fmt.Println("sample: ", len(sample.Data),
"PCR", sample.PCR, "PTS", sample.PTS, "PCR", sample.PCR, "PTS", sample.PTS,
"DTS", sample.DTS, "DTS", sample.DTS, "sync", sample.RandomAccessIndicator,
) )
//fmt.Print(hex.Dump(sample.Data)) //fmt.Print(hex.Dump(sample.Data))
} }

View File

@ -121,6 +121,11 @@ func ReadTSHeader(r io.Reader) (self TSHeader, err error) {
}) })
} }
// random_access_indicator
if flags & 0x40 != 0 {
self.RandomAccessIndicator = true
}
// PCR // PCR
if flags & 0x10 != 0 { if flags & 0x10 != 0 {
var v uint64 var v uint64
@ -201,6 +206,12 @@ func ReadPSI(r io.Reader) (self PSI, lr *io.LimitedReader, cr *Crc32Reader, err
if pointer, err = ReadUInt(r, 1); err != nil { if pointer, err = ReadUInt(r, 1); err != nil {
return return
} }
if DebugReader {
fmt.Printf("psi: pointer=%d\n", pointer)
}
if pointer != 0 { if pointer != 0 {
if err = ReadDummy(r, int(pointer)); err != nil { if err = ReadDummy(r, int(pointer)); err != nil {
return return
@ -360,13 +371,41 @@ func ReadPMT(r io.Reader) (self PMT, err error) {
} }
info.ElementaryPID = flags & 0x1fff info.ElementaryPID = flags & 0x1fff
if DebugReader {
fmt.Printf("pmt: info1 %s\n", FieldsDumper{
Fields: []struct{
Length int
Desc string
}{
{3, "reserved"},
{13, "elementary_pid"},
},
Val: flags,
Length: 16,
})
}
// Reserved(6) // Reserved(6)
// ES Info length length(10) // ES Info length(10)
if flags, err = ReadUInt(lr, 2); err != nil { if flags, err = ReadUInt(lr, 2); err != nil {
return return
} }
length = flags & 0x3ff length = flags & 0x3ff
if DebugReader {
fmt.Printf("pmt: info2 %s\n", FieldsDumper{
Fields: []struct{
Length int
Desc string
}{
{6, "reserved"},
{10, "es_info_length"},
},
Val: flags,
Length: 16,
})
}
if length > 0 { if length > 0 {
lr := &io.LimitedReader{R: lr, N: int64(length)} lr := &io.LimitedReader{R: lr, N: int64(length)}
if info.Descriptors, err = readDescs(lr); err != nil { if info.Descriptors, err = readDescs(lr); err != nil {