Fix RTSP JPEG processing

This commit is contained in:
Alexey Khit
2022-12-09 00:22:08 +03:00
parent 07f3972794
commit c9dd0e37e4
2 changed files with 13 additions and 13 deletions

View File

@@ -138,9 +138,9 @@ var chm_ac_symbols = []byte{
0xf9, 0xfa, 0xf9, 0xfa,
} }
func MakeHeaders(t byte, w, h uint16, lqt, cqt []byte) []byte { func MakeHeaders(p []byte, t byte, w, h uint16, lqt, cqt []byte) []byte {
// Appendix A from https://www.rfc-editor.org/rfc/rfc2435 // Appendix A from https://www.rfc-editor.org/rfc/rfc2435
p := []byte{0xFF, 0xD8} p = append(p, 0xFF, 0xD8)
p = MakeQuantHeader(p, lqt, 0) p = MakeQuantHeader(p, lqt, 0)
p = MakeQuantHeader(p, cqt, 1) p = MakeQuantHeader(p, cqt, 1)

View File

@@ -6,7 +6,7 @@ import (
) )
func RTPDepay(track *streamer.Track) streamer.WrapperFunc { func RTPDepay(track *streamer.Track) streamer.WrapperFunc {
var header, payload []byte buf := make([]byte, 0, 512*1024) // 512K
return func(push streamer.WriterFunc) streamer.WriterFunc { return func(push streamer.WriterFunc) streamer.WriterFunc {
return func(packet *rtp.Packet) error { return func(packet *rtp.Packet) error {
@@ -25,7 +25,7 @@ func RTPDepay(track *streamer.Track) streamer.WrapperFunc {
b = b[8:] b = b[8:]
} }
if header == nil { if len(buf) == 0 {
var lqt, cqt []byte var lqt, cqt []byte
// 3.1.8. Quantization Table header // 3.1.8. Quantization Table header
@@ -49,26 +49,26 @@ func RTPDepay(track *streamer.Track) streamer.WrapperFunc {
} }
//fmt.Printf("t: %d, q: %d, w: %d, h: %d\n", t, q, w, h) //fmt.Printf("t: %d, q: %d, w: %d, h: %d\n", t, q, w, h)
header = MakeHeaders(t, w, h, lqt, cqt) buf = MakeHeaders(buf, t, w, h, lqt, cqt)
} }
// 3.1.9. JPEG Payload // 3.1.9. JPEG Payload
payload = append(payload, b...) buf = append(buf, b...)
if !packet.Marker { if !packet.Marker {
return nil return nil
} }
b = append(header, payload...) if end := buf[len(buf)-2:]; end[0] != 0xFF && end[1] != 0xD9 {
if end := b[len(b)-2:]; end[0] != 0xFF && end[1] != 0xD9 { buf = append(buf, 0xFF, 0xD9)
b = append(b, 0xFF, 0xD9)
} }
header = nil clone := *packet
payload = nil clone.Payload = buf
packet.Payload = b buf = buf[:0] // clear buffer
return push(packet)
return push(&clone)
} }
} }
} }