diff --git a/rtmp/rtmp.go b/rtmp/rtmp.go index cb77eea8..87802781 100644 --- a/rtmp/rtmp.go +++ b/rtmp/rtmp.go @@ -1079,16 +1079,12 @@ func C_EncodeInt32LE(dst []byte, v int32) int32 { // rtmp.c +3550 func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { var hbuf [RTMP_MAX_HEADER_SIZE]byte - var header *byte - header = (*byte)(unsafe.Pointer(&hbuf[0])) - var nSize, hSize, nToRead, nChunk int32 - var extendedTimestamp int32 + header := (*byte)(unsafe.Pointer(&hbuf[0])) if C_ReadN(r, hbuf[:1]) != 1 { log.Println("C_RTMP_ReadPacket: failed to read RTMP packet header!") return false } - packet.m_headerType = (hbuf[0] & 0xc0) >> 6 packet.m_nChannel = int32(hbuf[0] & 0x3f) header = (*byte)(incBytePtr(unsafe.Pointer(header), 1)) @@ -1114,8 +1110,6 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { header = (*byte)(incBytePtr(unsafe.Pointer(header), 2)) } - nSize = int32(packetSize[packet.m_headerType]) - if packet.m_nChannel >= r.m_channelsAllocatedIn { n := packet.m_nChannel + 10 timestamp := append(r.m_channelTimestamp, make([]int32, 10)...) @@ -1139,6 +1133,7 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { r.m_channelsAllocatedIn = n } + nSize := packetSize[packet.m_headerType] switch { case nSize == RTMP_LARGE_HEADER_SIZE: packet.m_hasAbsTimestamp = true @@ -1155,8 +1150,7 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { return false } - hSize = int32(uintptr(incBytePtr(decBytePtr(unsafe.Pointer(header), int(uintptr( - unsafe.Pointer(&hbuf[0])))), int(nSize)))) + hSize := int(uintptr(unsafe.Pointer(header))-uintptr(unsafe.Pointer(&hbuf[0]))) + nSize if nSize >= 3 { packet.m_nTimeStamp = C_AMF_DecodeInt24((*[_Gi]byte)(unsafe.Pointer(header))[:3]) @@ -1174,12 +1168,9 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { } } } - extendedTimestamp = 0 - if packet.m_nTimeStamp == 0xffffff { - extendedTimestamp = 1 - } - if extendedTimestamp != 0 { + extendedTimestamp := packet.m_nTimeStamp == 0xffffff + if extendedTimestamp { if C_ReadN(r, pl2b((*byte)(incBytePtr(unsafe.Pointer(header), int(nSize))), 4)) != 4 { log.Println("RTMPRead_Packet: Failed to read extended timestamp") return false @@ -1198,15 +1189,15 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { packet.m_headerType = (hbuf[0] & 0xc0) >> 6 } - nToRead = int32(packet.m_nBodySize - packet.m_nBytesRead) - nChunk = r.m_inChunkSize + nToRead := int32(packet.m_nBodySize - packet.m_nBytesRead) + nChunk := r.m_inChunkSize if nToRead < nChunk { nChunk = nToRead } if packet.m_chunk != nil { - packet.m_chunk.c_headerSize = hSize + packet.m_chunk.c_headerSize = int32(hSize) copy(packet.m_chunk.c_header[:], hbuf[:hSize]) packet.m_chunk.c_chunk = packet.m_body[packet.m_nBytesRead : packet.m_nBytesRead+uint32(nChunk)] } @@ -1224,7 +1215,7 @@ func C_RTMP_ReadPacket(r *C_RTMP, packet *C_RTMPPacket) (ok bool) { } *(r.m_vecChannelsIn[packet.m_nChannel]) = *packet - if extendedTimestamp != 0 { + if extendedTimestamp { r.m_vecChannelsIn[packet.m_nChannel].m_nTimeStamp = 0xffffff }