Only set ts in C_RTMP_SendPacket() when prevPacket != nil.

This commit is contained in:
scruzin 2019-01-07 08:44:04 +10:30
parent 3dccec4f35
commit 647f10f212
1 changed files with 15 additions and 11 deletions

View File

@ -444,6 +444,7 @@ func C_ReadN(r *C_RTMP, buf []byte) error {
// int WriteN(RTMP* r, const char* buffer, int n);
// rtmp.c +1502
func C_WriteN(r *C_RTMP, buf []byte) error {
//ToDo: consider using a different timeout for writes than for reads
err := r.Link.conn.SetWriteDeadline(time.Now().Add(time.Second * time.Duration(r.Link.timeout)))
if err != nil {
return err
@ -1366,11 +1367,14 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
hSize += cSize
}
t := uint32(int(packet.m_nTimeStamp) - last)
if t >= 0xffffff {
var ts uint32
if prevPacket != nil {
ts = uint32(int(packet.m_nTimeStamp) - last)
}
if ts >= 0xffffff {
origIdx -= 4
hSize += 4
log.Printf("Larger timestamp than 24-bit: 0x%v", t)
log.Printf("Larger timestamp than 24-bit: 0x%v", ts)
}
headerIdx := origIdx
@ -1399,8 +1403,8 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
}
if packetSize[packet.m_headerType] > 1 {
res := t
if t > 0xffffff {
res := ts
if ts > 0xffffff {
res = 0xffffff
}
C_AMF_EncodeInt24(headBytes[headerIdx:], int32(res))
@ -1419,8 +1423,8 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
headerIdx += n
}
if t >= 0xffffff {
C_AMF_EncodeInt32(headBytes[headerIdx:], int32(t))
if ts >= 0xffffff {
C_AMF_EncodeInt32(headBytes[headerIdx:], int32(ts))
headerIdx += 4 // 32bits
}
@ -1429,7 +1433,7 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
if debugMode {
if r.Link.conn != nil {
log.Printf("C_RTMP_SendPacket: %v=>%v, size=%v", r.Link.conn.LocalAddr(), r.Link.conn.RemoteAddr(), nSize)
log.Printf("C_RTMP_SendPacket: %v->%v, size=%v", r.Link.conn.LocalAddr(), r.Link.conn.RemoteAddr(), nSize)
}
}
@ -1453,7 +1457,7 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
origIdx -= 1 + cSize
hSize = 1 + cSize
if t >= 0xffffff {
if ts >= 0xffffff {
origIdx -= 4
hSize += 4
}
@ -1468,9 +1472,9 @@ func C_RTMP_SendPacket(r *C_RTMP, packet *C_RTMPPacket, queue int) error {
headBytes[origIdx+2] = byte(tmp >> 8)
}
}
if t >= 0xffffff {
if ts >= 0xffffff {
extendedTimestamp := headBytes[origIdx+1+cSize:]
C_AMF_EncodeInt32(extendedTimestamp[:4], int32(t))
C_AMF_EncodeInt32(extendedTimestamp[:4], int32(ts))
}
}
}