rename isom to aacparser
This commit is contained in:
parent
a5ec0acea0
commit
dfd71d04bf
@ -1,10 +1,9 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"fmt"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ieeeCrc32Tbl = []uint32{
|
var ieeeCrc32Tbl = []uint32{
|
||||||
@ -101,4 +100,3 @@ func (self *Crc32Writer) Write(b []byte) (n int, err error) {
|
|||||||
self.Crc32 = updateIeeeCrc32(self.Crc32, b)
|
self.Crc32 = updateIeeeCrc32(self.Crc32, b)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -11,4 +10,3 @@ func TestChecksum(t *testing.T) {
|
|||||||
crc := updateIeeeCrc32(0xffffffff, b)
|
crc := updateIeeeCrc32(0xffffffff, b)
|
||||||
t.Logf("%x", crc)
|
t.Logf("%x", crc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
demuxer.go
20
demuxer.go
@ -1,11 +1,10 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/nareix/mp4/isom"
|
"github.com/nareix/codec/aacparser"
|
||||||
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Demuxer struct {
|
type Demuxer struct {
|
||||||
@ -33,7 +32,7 @@ func (self *Demuxer) ReadHeader() (err error) {
|
|||||||
for {
|
for {
|
||||||
if self.pmt != nil {
|
if self.pmt != nil {
|
||||||
n := 0
|
n := 0
|
||||||
for _, track := range(self.Tracks) {
|
for _, track := range self.Tracks {
|
||||||
if track.payloadReady {
|
if track.payloadReady {
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
@ -58,7 +57,7 @@ func (self *Demuxer) ReadSample() (track *Track, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
for _, _track := range(self.Tracks) {
|
for _, _track := range self.Tracks {
|
||||||
if _track.payloadReady {
|
if _track.payloadReady {
|
||||||
track = _track
|
track = _track
|
||||||
return
|
return
|
||||||
@ -87,13 +86,13 @@ func (self *Demuxer) readPacket() (err error) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if self.pmt == nil {
|
if self.pmt == nil {
|
||||||
for _, entry := range(self.pat.Entries) {
|
for _, entry := range self.pat.Entries {
|
||||||
if entry.ProgramMapPID == header.PID {
|
if entry.ProgramMapPID == header.PID {
|
||||||
self.pmt = new(PMT)
|
self.pmt = new(PMT)
|
||||||
if *self.pmt, err = ReadPMT(bytes.NewReader(payload)); err != nil {
|
if *self.pmt, err = ReadPMT(bytes.NewReader(payload)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, info := range(self.pmt.ElementaryStreamInfos) {
|
for _, info := range self.pmt.ElementaryStreamInfos {
|
||||||
track := &Track{}
|
track := &Track{}
|
||||||
|
|
||||||
track.demuxer = self
|
track.demuxer = self
|
||||||
@ -113,7 +112,7 @@ func (self *Demuxer) readPacket() (err error) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
for _, track := range(self.Tracks) {
|
for _, track := range self.Tracks {
|
||||||
if header.PID == track.pid {
|
if header.PID == track.pid {
|
||||||
if err = track.appendPacket(header, payload); err != nil {
|
if err = track.appendPacket(header, payload); err != nil {
|
||||||
return
|
return
|
||||||
@ -126,7 +125,7 @@ func (self *Demuxer) readPacket() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Track) GetMPEG4AudioConfig() isom.MPEG4AudioConfig {
|
func (self *Track) GetMPEG4AudioConfig() aacparser.MPEG4AudioConfig {
|
||||||
return self.mpeg4AudioConfig
|
return self.mpeg4AudioConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +153,7 @@ func (self *Track) appendPayload() (err error) {
|
|||||||
|
|
||||||
if self.Type == AAC {
|
if self.Type == AAC {
|
||||||
if !self.mpeg4AudioConfig.IsValid() {
|
if !self.mpeg4AudioConfig.IsValid() {
|
||||||
if self.mpeg4AudioConfig, _, _, _, err = isom.ReadADTSFrame(self.payload); err != nil {
|
if self.mpeg4AudioConfig, _, _, _, err = aacparser.ReadADTSFrame(self.payload); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.mpeg4AudioConfig = self.mpeg4AudioConfig.Complete()
|
self.mpeg4AudioConfig = self.mpeg4AudioConfig.Complete()
|
||||||
@ -200,4 +199,3 @@ func (self *Track) appendPacket(header TSHeader, payload []byte) (err error) {
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"os"
|
|
||||||
"io"
|
|
||||||
ts "../"
|
ts "../"
|
||||||
"fmt"
|
"bytes"
|
||||||
"encoding/hex"
|
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
"runtime/pprof"
|
"encoding/hex"
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"runtime/pprof"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GobAllSamples struct {
|
type GobAllSamples struct {
|
||||||
@ -157,7 +156,7 @@ func readSamples(filename string, ch chan Sample) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range(pat.Entries) {
|
for _, entry := range pat.Entries {
|
||||||
if entry.ProgramMapPID == header.PID {
|
if entry.ProgramMapPID == header.PID {
|
||||||
//fmt.Println("matchs", entry)
|
//fmt.Println("matchs", entry)
|
||||||
if pmt, err = ts.ReadPMT(pr); err != nil {
|
if pmt, err = ts.ReadPMT(pr); err != nil {
|
||||||
@ -167,7 +166,7 @@ func readSamples(filename string, ch chan Sample) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, info = range(pmt.ElementaryStreamInfos) {
|
for _, info = range pmt.ElementaryStreamInfos {
|
||||||
if info.ElementaryPID == header.PID {
|
if info.ElementaryPID == header.PID {
|
||||||
onStreamPayload()
|
onStreamPayload()
|
||||||
}
|
}
|
||||||
@ -395,4 +394,3 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
muxer.go
14
muxer.go
@ -1,12 +1,11 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"github.com/nareix/mp4/isom"
|
|
||||||
"github.com/nareix/codec/h264parser"
|
"github.com/nareix/codec/h264parser"
|
||||||
|
"github.com/nareix/codec/aacparser"
|
||||||
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Muxer struct {
|
type Muxer struct {
|
||||||
@ -87,7 +86,7 @@ func (self *Muxer) WriteHeader() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// about to remove
|
// about to remove
|
||||||
for _, track := range(self.Tracks) {
|
for _, track := range self.Tracks {
|
||||||
track.spsHasWritten = false
|
track.spsHasWritten = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +105,7 @@ func (self *Track) TimeScale() int64 {
|
|||||||
return self.timeScale
|
return self.timeScale
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Track) SetMPEG4AudioConfig(config isom.MPEG4AudioConfig) {
|
func (self *Track) SetMPEG4AudioConfig(config aacparser.MPEG4AudioConfig) {
|
||||||
self.mpeg4AudioConfig = config
|
self.mpeg4AudioConfig = config
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,8 +128,8 @@ func (self *Track) WriteSample(pts int64, dts int64, isKeyFrame bool, data []byt
|
|||||||
|
|
||||||
if self.Type == AAC {
|
if self.Type == AAC {
|
||||||
|
|
||||||
if !isom.IsADTSFrame(data) {
|
if !aacparser.IsADTSFrame(data) {
|
||||||
data = append(isom.MakeADTSHeader(self.mpeg4AudioConfig, 1024, len(data)), data...)
|
data = append(aacparser.MakeADTSHeader(self.mpeg4AudioConfig, 1024, len(data)), data...)
|
||||||
}
|
}
|
||||||
if false {
|
if false {
|
||||||
fmt.Printf("WriteSample=%x\n", data[:5])
|
fmt.Printf("WriteSample=%x\n", data[:5])
|
||||||
@ -252,4 +251,3 @@ func (self *Track) WriteADTSAACFrame(duration int, frame []byte) (err error) {
|
|||||||
self.incPTS(duration)
|
self.incPTS(duration)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -212,7 +211,6 @@ func ReadPSI(r io.Reader) (self PSI, lr *io.LimitedReader, cr *Crc32Reader, err
|
|||||||
fmt.Printf("psi: pointer=%d\n", pointer)
|
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
|
||||||
@ -684,4 +682,3 @@ func ReadPESHeader(r io.Reader) (res *PESHeader, err error) {
|
|||||||
res = self
|
res = self
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
track.go
6
track.go
@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"github.com/nareix/mp4/isom"
|
"github.com/nareix/codec/aacparser"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Track struct {
|
type Track struct {
|
||||||
@ -16,7 +15,7 @@ type Track struct {
|
|||||||
PTS int64
|
PTS int64
|
||||||
timeScale int64
|
timeScale int64
|
||||||
|
|
||||||
mpeg4AudioConfig isom.MPEG4AudioConfig
|
mpeg4AudioConfig aacparser.MPEG4AudioConfig
|
||||||
buf bytes.Buffer
|
buf bytes.Buffer
|
||||||
payload []byte
|
payload []byte
|
||||||
peshdr *PESHeader
|
peshdr *PESHeader
|
||||||
@ -36,4 +35,3 @@ const (
|
|||||||
H264 = 1
|
H264 = 1
|
||||||
AAC = 2
|
AAC = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
2
ts.go
2
ts.go
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -116,4 +115,3 @@ func (self FieldsDumper) String() (res string) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -8,4 +7,3 @@ import (
|
|||||||
func TestPESTsConv(t *testing.T) {
|
func TestPESTsConv(t *testing.T) {
|
||||||
t.Logf("%x", PESTsToUInt(0x123))
|
t.Logf("%x", PESTsToUInt(0x123))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
vecio.go
10
vecio.go
@ -1,13 +1,12 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"net"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"unsafe"
|
"io"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
type iovec struct {
|
type iovec struct {
|
||||||
@ -134,4 +133,3 @@ func newVecWriter(w io.Writer) (vecw *vecWriter) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"bytes"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var DebugWriter = false
|
var DebugWriter = false
|
||||||
@ -701,4 +700,3 @@ func (self *SimpleH264Writer) WriteNALU(sync bool, duration int, nalu []byte) (e
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
|
|
||||||
package ts
|
package ts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
|
||||||
"encoding/hex"
|
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/hex"
|
||||||
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWriteTSHeader(t *testing.T) {
|
func TestWriteTSHeader(t *testing.T) {
|
||||||
@ -16,4 +15,3 @@ func TestWriteTSHeader(t *testing.T) {
|
|||||||
w.Write([]byte{'h', 'e', 'l', 'o'}[:], false)
|
w.Write([]byte{'h', 'e', 'l', 'o'}[:], false)
|
||||||
t.Logf("\n%s", hex.Dump(bw.Bytes()))
|
t.Logf("\n%s", hex.Dump(bw.Bytes()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user