raw muxer annexB h264 h265

This commit is contained in:
deepch
2021-09-30 02:10:08 +03:00
parent a77315fe6e
commit 161a0454da
6 changed files with 89 additions and 5 deletions

46
format/raw/muxer.go Normal file
View File

@@ -0,0 +1,46 @@
package raw
import (
"bytes"
"io"
"github.com/deepch/vdk/codec/h265parser"
"github.com/deepch/vdk/codec/h264parser"
"github.com/deepch/vdk/av"
)
var startCode = []byte{0, 0, 0, 1}
type Muxer struct {
idx int8
w io.WriteSeeker
}
func NewMuxer(v io.WriteSeeker) *Muxer {
return &Muxer{w: v}
}
func (element *Muxer) WriteHeader(streams []av.CodecData) (err error) {
for i, stream := range streams {
switch stream.Type() {
case av.H264:
_, err = element.w.Write(append(startCode, bytes.Join([][]byte{stream.(h264parser.CodecData).SPS(), stream.(h264parser.CodecData).PPS()}, startCode)...))
element.idx = int8(i)
case av.H265:
_, err = element.w.Write(append(startCode, bytes.Join([][]byte{stream.(h265parser.CodecData).SPS(), stream.(h265parser.CodecData).PPS(), stream.(h265parser.CodecData).VPS()}, startCode)...))
element.idx = int8(i)
}
}
return
}
func (element *Muxer) WritePacket(pkt *av.Packet) (err error) {
if pkt.Idx == element.idx {
_, err = element.w.Write(startCode)
if err != nil {
return
}
_, err = element.w.Write(pkt.Data[4:])
}
return
}