more smart handling of another packat index (audio, as example)

This commit is contained in:
Dimitrii Lopanov 2020-06-26 08:41:55 +03:00
parent 0435cfa11a
commit 4f6b86b297

View File

@ -14,8 +14,9 @@ import (
var CodecTypes = []av.CodecType{av.H264, av.AAC} 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() {