mirror of https://bitbucket.org/ausocean/av.git
Fixed some other little things, but still doesn't fix the seg fault
This commit is contained in:
parent
a24003af44
commit
dd41aeb966
56
rtmp/rtmp.go
56
rtmp/rtmp.go
|
@ -92,7 +92,7 @@ func AVC(str string) C.AVal {
|
|||
// av_setDataFrame is a static const global in rtmp.c
|
||||
var setDataFrame = AVC("@setDataFrame")
|
||||
|
||||
var packetSize = [...]int32{ 12, 8, 4, 1}
|
||||
var packetSize = [...]int{ 12, 8, 4, 1}
|
||||
|
||||
// Session provides an interface for sending flv tags over rtmp.
|
||||
type Session interface {
|
||||
|
@ -258,6 +258,7 @@ func rtmpWrite(r *C.RTMP, data []byte) int {
|
|||
}
|
||||
|
||||
|
||||
// send packet version 1 - less C stuff
|
||||
func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
||||
var prevPacket *C.RTMPPacket
|
||||
last := 0
|
||||
|
@ -289,6 +290,8 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
prevPacket = *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet))))
|
||||
|
||||
|
||||
|
||||
if prevPacket != nil && packet.m_headerType != RTMP_PACKET_SIZE_LARGE {
|
||||
// compress a bit by using the prev packet's attributes
|
||||
if prevPacket.m_nBodySize == packet.m_nBodySize &&
|
||||
|
@ -313,7 +316,7 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
return 0
|
||||
}
|
||||
|
||||
nSize = int(*(*int)(incInt32Ptr(unsafe.Pointer(&packetSize[0]),int(packet.m_headerType))))
|
||||
nSize = packetSize[int(packet.m_headerType)]
|
||||
hSize = nSize
|
||||
cSize = 0
|
||||
t = int32(int(packet.m_nTimeStamp) - last)
|
||||
|
@ -356,7 +359,6 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
case 2:
|
||||
c |= byte(1)
|
||||
}
|
||||
|
||||
*(*byte)(hptr) = c
|
||||
hptr = incBytePtr(hptr,1)
|
||||
|
||||
|
@ -452,7 +454,7 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
hSize = 1
|
||||
|
||||
if cSize != 0 {
|
||||
header = decBytePtr(header,1)
|
||||
header = decBytePtr(header,cSize)
|
||||
hSize += cSize
|
||||
}
|
||||
|
||||
|
@ -516,21 +518,57 @@ func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue int) int {
|
|||
}
|
||||
}
|
||||
|
||||
if unsafe.Pointer((*C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet))))) == nil {
|
||||
if *(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) == nil {
|
||||
|
||||
r.m_vecChannelsOut = (**C.RTMPPacket)(C.malloc(C.size_t(unsafe.Sizeof(packet))))
|
||||
*(**C.RTMPPacket)(incPtr(unsafe.Pointer(r.m_vecChannelsOut),
|
||||
int(packet.m_nChannel), int(unsafe.Sizeof(packet)))) =
|
||||
(*C.RTMPPacket)(C.malloc(C.size_t(unsafe.Sizeof(*packet))))
|
||||
}
|
||||
|
||||
//memmove(incPtr(unsafe.Pointer(r.m_vecChannelsOut),int(packet.m_nChannel),
|
||||
//int(unsafe.Sizeof(packet))),unsafe.Pointer(packet), unsafe.Sizeof(packet))
|
||||
dest := ptrToSlice(incPtr(unsafe.Pointer(r.m_vecChannelsOut),int(packet.m_nChannel),
|
||||
int(unsafe.Sizeof(packet))),int(unsafe.Sizeof(packet)))
|
||||
src := ptrToSlice(unsafe.Pointer(packet),int(unsafe.Sizeof(packet)))
|
||||
int(unsafe.Sizeof(packet))),int(unsafe.Sizeof(*packet)))
|
||||
src := ptrToSlice(unsafe.Pointer(packet),int(unsafe.Sizeof(*packet)))
|
||||
copy(dest,src)
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
func sendPacket(r *C.RTMP, packet *C.RTMPPacket, queue C.int ) C.int {
|
||||
prevPacket *C.RTMPPacket
|
||||
var last = 0 C.uint32_t
|
||||
var nSize C.int
|
||||
var hSize, cSize C.int
|
||||
var header, hptr, hend *C.char
|
||||
var hArr [C.RTMP_MAX_HEADER_SIZE]byte
|
||||
hbuf := (*C.char)(unsafe.Pointer(&hArr[0]))
|
||||
var c C.char
|
||||
var t C.uint32_t
|
||||
var buffer, tbuf, toff *C.char
|
||||
var nChunkSize C.int
|
||||
var tlen C.int
|
||||
|
||||
if packet.m_nChannel >= r.m_channelsAllocatedOut {
|
||||
n := packet.m_nChannel + 10
|
||||
packets := (**C.RTMPPacket)(C.realloc(r.m_vecChannelsOut, unsafe.Sizeof(packet) * n))
|
||||
|
||||
if packets != nil {
|
||||
C.free(r.m_vecChannelsOut)
|
||||
r.m_vecChannelsOut = nil
|
||||
r.m_channelsAllocatedOut = 0
|
||||
return 0
|
||||
}
|
||||
r.m_vecChannelsOut = packets
|
||||
C.memset(r.m_vecChannelsOut + r.m_channelsAllocatedOut, 0, unsafe.Sizeof(packet) * (n - r.m_channelsAllocatedOut))
|
||||
r.m_channelsAllocatedOut = n
|
||||
}
|
||||
|
||||
prePacket = r.m_vecChannelsOut[packet.m_nChannel]
|
||||
}
|
||||
*/
|
||||
/*
|
||||
func writeN(r *C.RTMP, buffer unsafe.Pointer, n int) int {
|
||||
ptr := buffer
|
||||
|
|
Loading…
Reference in New Issue