mirror of https://bitbucket.org/ausocean/av.git
codec/h265: fixed lexer to get nal header into start of fragment
Now getting the nal header and type from fu header for the first fragment. We can now lex and create HEVC MTS to RTP - working fine. Need to use RTCP now to continue stream.
This commit is contained in:
parent
92d4c5f79a
commit
a2d1b09e92
|
@ -76,6 +76,7 @@ func (l *Lexer) Lex(dst io.Writer, src io.Reader, delay time.Duration) error {
|
||||||
switch err {
|
switch err {
|
||||||
case nil: // Do nothing.
|
case nil: // Do nothing.
|
||||||
case io.EOF:
|
case io.EOF:
|
||||||
|
fmt.Println("done")
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("source read error: %v\n", err)
|
return fmt.Errorf("source read error: %v\n", err)
|
||||||
|
@ -150,6 +151,11 @@ func (l *Lexer) handleFragmentation(d []byte) {
|
||||||
start := d[2]&0x80 != 0
|
start := d[2]&0x80 != 0
|
||||||
end := d[2]&0x40 != 0
|
end := d[2]&0x40 != 0
|
||||||
|
|
||||||
|
var head []byte
|
||||||
|
if start {
|
||||||
|
head = []byte{(d[0] & 0x81) | ((d[2] & 0x3f) << 1), d[1]}
|
||||||
|
}
|
||||||
|
|
||||||
d = d[3:]
|
d = d[3:]
|
||||||
if l.donl {
|
if l.donl {
|
||||||
d = d[2:]
|
d = d[2:]
|
||||||
|
@ -158,7 +164,8 @@ func (l *Lexer) handleFragmentation(d []byte) {
|
||||||
switch {
|
switch {
|
||||||
case start && !end:
|
case start && !end:
|
||||||
l.frag = true
|
l.frag = true
|
||||||
l.writeWithPrefix(d)
|
_d := append(head, d...)
|
||||||
|
l.writeWithPrefix(_d)
|
||||||
case !start && end:
|
case !start && end:
|
||||||
l.frag = false
|
l.frag = false
|
||||||
fallthrough
|
fallthrough
|
||||||
|
|
Loading…
Reference in New Issue