mirror of https://bitbucket.org/ausocean/av.git
Working again but not sure whyyy
This commit is contained in:
parent
a20beaf75e
commit
7111456991
57
rtmp/rtmp.go
57
rtmp/rtmp.go
|
@ -503,8 +503,8 @@ func startSession(rtmp *C.RTMP, u string, timeout uint32) (*C.RTMP, error) {
|
||||||
// rtmp.c +317
|
// rtmp.c +317
|
||||||
func C_RTMP_Alloc() *C.RTMP {
|
func C_RTMP_Alloc() *C.RTMP {
|
||||||
var r C.RTMP
|
var r C.RTMP
|
||||||
//return (*C.RTMP)(C.malloc(C.size_t(unsafe.Sizeof(r))))
|
return (*C.RTMP)(C.malloc(C.size_t(unsafe.Sizeof(r))))
|
||||||
return (*C.RTMP)(allocate(unsafe.Sizeof(r)))
|
//return (*C.RTMP)(allocate(unsafe.Sizeof(r)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// void RTMP_Init(RTMP *r);
|
// void RTMP_Init(RTMP *r);
|
||||||
|
@ -560,7 +560,7 @@ func C_RTMP_SetupURL(r *C.RTMP, u string) int32 {
|
||||||
length = int32(r.Link.hostname.av_len) + int32(r.Link.app.av_len) +
|
length = int32(r.Link.hostname.av_len) + int32(r.Link.app.av_len) +
|
||||||
int32(len("rtmpte://:65535/\x00"))
|
int32(len("rtmpte://:65535/\x00"))
|
||||||
|
|
||||||
r.Link.tcUrl.av_val = (*C.char)(allocate(uintptr(length)))
|
r.Link.tcUrl.av_val = (*C.char)(C.malloc(C.size_t(uintptr(length))))
|
||||||
hostname := string(ptrToSlice(unsafe.Pointer(r.Link.hostname.av_val),
|
hostname := string(ptrToSlice(unsafe.Pointer(r.Link.hostname.av_val),
|
||||||
int(r.Link.hostname.av_len)))
|
int(r.Link.hostname.av_len)))
|
||||||
|
|
||||||
|
@ -1707,7 +1707,7 @@ func C_RTMP_ConnectStream(r *C.RTMP, seekTime int32) int {
|
||||||
|
|
||||||
// TODO: read packet
|
// TODO: read packet
|
||||||
for r.m_bPlaying == 0 && C_RTMP_IsConnected(r) != 0 &&
|
for r.m_bPlaying == 0 && C_RTMP_IsConnected(r) != 0 &&
|
||||||
// C.RTMP_ReadPacket(r, &packet) != 0 {
|
//C.RTMP_ReadPacket(r, &packet) != 0 {
|
||||||
C_RTMP_ReadPacket(r, &packet) != 0 {
|
C_RTMP_ReadPacket(r, &packet) != 0 {
|
||||||
|
|
||||||
// TODO: port is ready
|
// TODO: port is ready
|
||||||
|
@ -1780,6 +1780,7 @@ func C_RTMP_ReadPacket(r *C.RTMP, packet *C.RTMPPacket) int32 {
|
||||||
var n int32 = int32(packet.m_nChannel + 10)
|
var n int32 = int32(packet.m_nChannel + 10)
|
||||||
timestamp := (*int32)(C.realloc(unsafe.Pointer(r.m_channelTimestamp),
|
timestamp := (*int32)(C.realloc(unsafe.Pointer(r.m_channelTimestamp),
|
||||||
C.size_t(int32(unsafe.Sizeof(n))*n)))
|
C.size_t(int32(unsafe.Sizeof(n))*n)))
|
||||||
|
|
||||||
var packetPtr *C.RTMPPacket
|
var packetPtr *C.RTMPPacket
|
||||||
packets := (**C.RTMPPacket)(C.realloc(unsafe.Pointer(r.m_vecChannelsIn),
|
packets := (**C.RTMPPacket)(C.realloc(unsafe.Pointer(r.m_vecChannelsIn),
|
||||||
C.size_t(int32(unsafe.Sizeof(packetPtr))*n)))
|
C.size_t(int32(unsafe.Sizeof(packetPtr))*n)))
|
||||||
|
@ -1870,7 +1871,7 @@ func C_RTMP_ReadPacket(r *C.RTMP, packet *C.RTMPPacket) int32 {
|
||||||
|
|
||||||
if packet.m_nBodySize > 0 && packet.m_body == nil {
|
if packet.m_nBodySize > 0 && packet.m_body == nil {
|
||||||
// TODO: port this
|
// TODO: port this
|
||||||
if C.RTMPPacket_Alloc(packet, packet.m_nBodySize) == 0 {
|
if C_RTMPPacket_Alloc(packet, uint32(packet.m_nBodySize)) == 0 {
|
||||||
log.Println("RTMPRead_Packet: failed to allocate packet")
|
log.Println("RTMPRead_Packet: failed to allocate packet")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -1905,9 +1906,11 @@ func C_RTMP_ReadPacket(r *C.RTMP, packet *C.RTMPPacket) int32 {
|
||||||
// keep the packet as ref for other packets on this channel
|
// keep the packet as ref for other packets on this channel
|
||||||
if *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsIn),
|
if *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsIn),
|
||||||
int(packet.m_nChannel), int(unsafe.Sizeof(tmpPktPtr)))) == nil {
|
int(packet.m_nChannel), int(unsafe.Sizeof(tmpPktPtr)))) == nil {
|
||||||
|
|
||||||
var tmpPkt C.RTMPPacket
|
var tmpPkt C.RTMPPacket
|
||||||
*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsIn), int(packet.m_nChannel),
|
*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsIn), int(packet.m_nChannel),
|
||||||
int(unsafe.Sizeof(tmpPktPtr)))) = (*C.RTMPPacket)(C.malloc(C.size_t(unsafe.Sizeof(tmpPkt))))
|
int(unsafe.Sizeof(tmpPktPtr)))) = (*C.RTMPPacket)(C.malloc(C.size_t(
|
||||||
|
unsafe.Sizeof(tmpPkt))))
|
||||||
}
|
}
|
||||||
memmove(unsafe.Pointer(*(**C.RTMPPacket)(incPtr(unsafe.Pointer(
|
memmove(unsafe.Pointer(*(**C.RTMPPacket)(incPtr(unsafe.Pointer(
|
||||||
r.m_vecChannelsIn), int(packet.m_nChannel), int(unsafe.Sizeof(tmpPktPtr))))),
|
r.m_vecChannelsIn), int(packet.m_nChannel), int(unsafe.Sizeof(tmpPktPtr))))),
|
||||||
|
@ -1938,10 +1941,12 @@ func C_RTMP_ReadPacket(r *C.RTMP, packet *C.RTMPPacket) int32 {
|
||||||
} else {
|
} else {
|
||||||
packet.m_body = nil /* so it won't be erased on free */
|
packet.m_body = nil /* so it won't be erased on free */
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static int DecodeInt32LE(const char* data);
|
||||||
|
// rtmp.c
|
||||||
|
|
||||||
// #define RTMPPacket_IsReady(a)
|
// #define RTMPPacket_IsReady(a)
|
||||||
// rtmp.h +142
|
// rtmp.h +142
|
||||||
func C_RTMPPacket_IsReady(p *C.RTMPPacket) int {
|
func C_RTMPPacket_IsReady(p *C.RTMPPacket) int {
|
||||||
|
@ -2010,7 +2015,7 @@ func C_RTMP_Write(r *C.RTMP, data []byte) int {
|
||||||
pkt.m_headerType = RTMP_PACKET_SIZE_MEDIUM
|
pkt.m_headerType = RTMP_PACKET_SIZE_MEDIUM
|
||||||
}
|
}
|
||||||
// TODO: Port this
|
// TODO: Port this
|
||||||
if int(C.RTMPPacket_Alloc(pkt, pkt.m_nBodySize)) == 0 {
|
if int(C_RTMPPacket_Alloc(pkt, uint32(pkt.m_nBodySize))) == 0 {
|
||||||
log.Println("Failed to allocate packet")
|
log.Println("Failed to allocate packet")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -2055,6 +2060,27 @@ func C_RTMP_Write(r *C.RTMP, data []byte) int {
|
||||||
return size + s2
|
return size + s2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// int RTMPPacket_Alloc(RTMPPacket* p, uint32_t nSize);
|
||||||
|
// rtmp.c +189
|
||||||
|
func C_RTMPPacket_Alloc(p *C.RTMPPacket, nSize uint32) int {
|
||||||
|
var ptr *byte
|
||||||
|
// TODO: port C.SIZE_MAX
|
||||||
|
// also work out how to deal with the overfloat
|
||||||
|
/*
|
||||||
|
if int64(nSize) > (C.SIZE_MAX - RTMP_MAX_HEADER_SIZE) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
ptr = (*byte)(C.calloc(1, C.size_t(nSize+RTMP_MAX_HEADER_SIZE)))
|
||||||
|
|
||||||
|
if ptr == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
p.m_body = (*C.char)(incBytePtr(unsafe.Pointer(ptr), RTMP_MAX_HEADER_SIZE))
|
||||||
|
p.m_nBytesRead = 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
// int RTMP_SendPacket(RTMP* r, RTMPPacket* packet, int queue);
|
// int RTMP_SendPacket(RTMP* r, RTMPPacket* packet, int queue);
|
||||||
// rtmp.c +3896
|
// rtmp.c +3896
|
||||||
func C_RTMP_SendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
func C_RTMP_SendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
||||||
|
@ -2306,7 +2332,7 @@ func C_RTMP_SendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
||||||
|
|
||||||
*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) =
|
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) =
|
||||||
(*C.RTMPPacket)(allocate(unsafe.Sizeof(*packet)))
|
(*C.RTMPPacket)(C.malloc(C.size_t(unsafe.Sizeof(*packet))))
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove(unsafe.Pointer(*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
memmove(unsafe.Pointer(*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||||
|
@ -2331,7 +2357,7 @@ func C_WriteN(r *C.RTMP, buffer unsafe.Pointer, n int) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: port this
|
// TODO: port this
|
||||||
C.RTMP_Close(r)
|
//C.RTMP_Close(r)
|
||||||
n = 1
|
n = 1
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -2437,7 +2463,7 @@ func C_AMF_EncodeNumber(output *byte, outend *byte, dVal float64) *byte {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// TODO: port this
|
// TODO: port this
|
||||||
*(*byte)(unsafe.Pointer(output)) = C.AMF_NUMBER
|
*(*byte)(unsafe.Pointer(output)) = AMF_NUMBER
|
||||||
output = (*byte)(incBytePtr(unsafe.Pointer(output), 1))
|
output = (*byte)(incBytePtr(unsafe.Pointer(output), 1))
|
||||||
// NOTE: here we are assuming little endian for both byte order and float
|
// NOTE: here we are assuming little endian for both byte order and float
|
||||||
// word order
|
// word order
|
||||||
|
@ -2541,15 +2567,16 @@ func C_AMF_EncodeString(output *byte, outend *byte, bv *C.AVal) *byte {
|
||||||
if bv.av_len < 65536 {
|
if bv.av_len < 65536 {
|
||||||
*(*byte)(outputPtr) = AMF_STRING
|
*(*byte)(outputPtr) = AMF_STRING
|
||||||
outputPtr = incBytePtr(outputPtr, 1)
|
outputPtr = incBytePtr(outputPtr, 1)
|
||||||
outputPtr = unsafe.Pointer(C.AMF_EncodeInt16((*C.char)(outputPtr), (*C.char)(
|
// TODO: port AMF_EncodeInt16
|
||||||
outendPtr), C.short(bv.av_len)))
|
outputPtr = unsafe.Pointer(C_AMF_EncodeInt16((*byte)(outputPtr), (*byte)(
|
||||||
|
outendPtr), int16(bv.av_len)))
|
||||||
//outputPtr = unsafe.Pointer(C_AMF_EncodeInt16((*byte)(outputPtr),
|
//outputPtr = unsafe.Pointer(C_AMF_EncodeInt16((*byte)(outputPtr),
|
||||||
//(*byte)(outendPtr), (int16)(bv.av_len)))
|
//(*byte)(outendPtr), (int16)(bv.av_len)))
|
||||||
} else {
|
} else {
|
||||||
*(*byte)(outputPtr) = AMF_LONG_STRING
|
*(*byte)(outputPtr) = AMF_LONG_STRING
|
||||||
outputPtr = incBytePtr(outputPtr, 1)
|
outputPtr = incBytePtr(outputPtr, 1)
|
||||||
outputPtr = unsafe.Pointer(C.AMF_EncodeInt32((*C.char)(outputPtr), (*C.char)(
|
outputPtr = unsafe.Pointer(C_AMF_EncodeInt32((*byte)(outputPtr), (*byte)(
|
||||||
outendPtr), C.int(bv.av_len)))
|
outendPtr), int32(bv.av_len)))
|
||||||
//outputPtr = unsafe.Pointer(C_AMF_EncodeInt32((*byte)(outputPtr),
|
//outputPtr = unsafe.Pointer(C_AMF_EncodeInt32((*byte)(outputPtr),
|
||||||
//(*byte)(outendPtr), (int32)(bv.av_len)))
|
//(*byte)(outendPtr), (int32)(bv.av_len)))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue