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,
}
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
p := []byte{0xFF, 0xD8}
p = append(p, 0xFF, 0xD8)
p = MakeQuantHeader(p, lqt, 0)
p = MakeQuantHeader(p, cqt, 1)

View File

@@ -6,7 +6,7 @@ import (
)
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(packet *rtp.Packet) error {
@@ -25,7 +25,7 @@ func RTPDepay(track *streamer.Track) streamer.WrapperFunc {
b = b[8:]
}
if header == nil {
if len(buf) == 0 {
var lqt, cqt []byte
// 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)
header = MakeHeaders(t, w, h, lqt, cqt)
buf = MakeHeaders(buf, t, w, h, lqt, cqt)
}
// 3.1.9. JPEG Payload
payload = append(payload, b...)
buf = append(buf, b...)
if !packet.Marker {
return nil
}
b = append(header, payload...)
if end := b[len(b)-2:]; end[0] != 0xFF && end[1] != 0xD9 {
b = append(b, 0xFF, 0xD9)
if end := buf[len(buf)-2:]; end[0] != 0xFF && end[1] != 0xD9 {
buf = append(buf, 0xFF, 0xD9)
}
header = nil
payload = nil
clone := *packet
clone.Payload = buf
packet.Payload = b
return push(packet)
buf = buf[:0] // clear buffer
return push(&clone)
}
}
}