more smart handling of another packat index (audio, as example)
This commit is contained in:
parent
0435cfa11a
commit
4f6b86b297
@ -15,7 +15,8 @@ var CodecTypes = []av.CodecType{av.H264, av.AAC}
|
|||||||
|
|
||||||
type Muxer struct {
|
type Muxer struct {
|
||||||
w io.Writer
|
w io.Writer
|
||||||
streams []*Stream
|
streams map[int]*Stream
|
||||||
|
|
||||||
PaddingToMakeCounterCont bool
|
PaddingToMakeCounterCont bool
|
||||||
|
|
||||||
psidata []byte
|
psidata []byte
|
||||||
@ -42,7 +43,7 @@ func NewMuxer(w io.Writer) *Muxer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Muxer) newStream(codec av.CodecData) (err error) {
|
func (self *Muxer) newStream(idx int, codec av.CodecData) (err error) {
|
||||||
ok := false
|
ok := false
|
||||||
for _, c := range CodecTypes {
|
for _, c := range CodecTypes {
|
||||||
if codec.Type() == c {
|
if codec.Type() == c {
|
||||||
@ -55,14 +56,14 @@ func (self *Muxer) newStream(codec av.CodecData) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
pid := uint16(len(self.streams) + 0x100)
|
pid := uint16(idx + 0x100)
|
||||||
stream := &Stream{
|
stream := &Stream{
|
||||||
muxer: self,
|
muxer: self,
|
||||||
CodecData: codec,
|
CodecData: codec,
|
||||||
pid: pid,
|
pid: pid,
|
||||||
tsw: tsio.NewTSWriter(pid),
|
tsw: tsio.NewTSWriter(pid),
|
||||||
}
|
}
|
||||||
self.streams = append(self.streams, stream)
|
self.streams[idx] = stream
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,10 +141,11 @@ func (self *Muxer) WritePATPMT() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *Muxer) WriteHeader(streams []av.CodecData) (err error) {
|
func (self *Muxer) WriteHeader(streams []av.CodecData) (err error) {
|
||||||
self.streams = []*Stream{}
|
self.streams = map[int]*Stream{}
|
||||||
for _, stream := range streams {
|
|
||||||
if err = self.newStream(stream); err != nil {
|
for idx, stream := range streams {
|
||||||
return
|
if err = self.newStream(idx, stream); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,10 +156,14 @@ func (self *Muxer) WriteHeader(streams []av.CodecData) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *Muxer) WritePacket(pkt av.Packet) (err error) {
|
func (self *Muxer) WritePacket(pkt av.Packet) (err error) {
|
||||||
if int(pkt.Idx) >= len(self.streams) {
|
var stream *Stream = nil
|
||||||
return fmt.Errorf("Wrong stream index: %d", pkt.Idx)
|
|
||||||
|
stream, ok := self.streams[int(pkt.Idx)]
|
||||||
|
if !ok {
|
||||||
|
fmt.Printf("Warning, unsupported stream index: %d\n", pkt.Idx)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
stream := self.streams[pkt.Idx]
|
|
||||||
pkt.Time += time.Second
|
pkt.Time += time.Second
|
||||||
|
|
||||||
switch stream.Type() {
|
switch stream.Type() {
|
||||||
|
Loading…
Reference in New Issue
Block a user