mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-10-07 17:21:34 +08:00
Fix RTSP JPEG processing
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user