mirror of https://bitbucket.org/ausocean/av.git
Ported RTMP_ConnectStream and tested
This commit is contained in:
parent
ee44c3d713
commit
d00a2994e3
71
rtmp/rtmp.go
71
rtmp/rtmp.go
|
@ -385,7 +385,7 @@ func startSession(rtmp *C.RTMP, u string, timeout uint32) (*C.RTMP, error) {
|
|||
}
|
||||
|
||||
// TODO: port this
|
||||
if C.RTMP_ConnectStream(rtmp, 0) == 0 {
|
||||
if rtmpConnectStream(rtmp, 0) == 0 {
|
||||
//C.RTMP_Close(rtmp)
|
||||
//C.RTMP_Free(rtmp)
|
||||
return nil, errors.New("rtmp startSession: Failed to connect stream!")
|
||||
|
@ -600,14 +600,14 @@ func rtmpConnect(r *C.RTMP, cp *C.RTMPPacket) int {
|
|||
}
|
||||
|
||||
// TODO: port this
|
||||
if C.RTMP_Connect0(r, (*C.sockaddr)(unsafe.Pointer(&service))) == 0 {
|
||||
if rtmpConnect0(r, (*C.sockaddr)(unsafe.Pointer(&service))) == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
r.m_bSendCounter = 1
|
||||
|
||||
// TODO: port this
|
||||
return int(C.RTMP_Connect1(r, cp))
|
||||
return int(rtmpConnect1(r, cp))
|
||||
}
|
||||
|
||||
func rtmpConnect0(r *C.RTMP, service *C.sockaddr) int {
|
||||
|
@ -639,8 +639,7 @@ func rtmpConnect0(r *C.RTMP, service *C.sockaddr) int {
|
|||
}
|
||||
|
||||
{
|
||||
//C.SET_RCVTIMEO(tv, r.Link.timeout)
|
||||
tv := r.Link.timeout * 1000
|
||||
tv := C.int(r.Link.timeout * 1000)
|
||||
|
||||
if C.setsockopt(r.m_sb.sb_socket, C.SOL_SOCKET, C.SO_RCVTIMEO,
|
||||
unsafe.Pointer(&tv), C.uint(unsafe.Sizeof(tv))) != 0 {
|
||||
|
@ -654,6 +653,25 @@ func rtmpConnect0(r *C.RTMP, service *C.sockaddr) int {
|
|||
return 1
|
||||
}
|
||||
|
||||
func rtmpConnect1(r *C.RTMP, cp *C.RTMPPacket) int {
|
||||
if debugMode {
|
||||
log.Println("... connected, handshaking...")
|
||||
}
|
||||
if C.HandShake(r, 1) == 0 {
|
||||
log.Println("rtmpConnect1: handshake failed!")
|
||||
return 0
|
||||
}
|
||||
if debugMode {
|
||||
log.Println("... handshaked...")
|
||||
}
|
||||
|
||||
if C.SendConnectPacket(r, cp) == 0 {
|
||||
log.Println("RTMP connect failed!")
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
/*
|
||||
func socksSetup(r *RTMP, sockshost *AVal) {
|
||||
if sockshost.av_len != 0 {
|
||||
|
@ -662,6 +680,49 @@ func socksSetup(r *RTMP, sockshost *AVal) {
|
|||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func rtmpConnectStream(r *C.RTMP, seekTime int32) int {
|
||||
var packet C.RTMPPacket
|
||||
|
||||
if seekTime > 0 {
|
||||
r.Link.seekTime = C.int(seekTime)
|
||||
}
|
||||
|
||||
r.m_mediaChannel = 0
|
||||
|
||||
// TODO: port is connected and read packet
|
||||
for r.m_bPlaying == 0 && C.RTMP_IsConnected(r) != 0 &&
|
||||
C.RTMP_ReadPacket(r, &packet) != 0 {
|
||||
|
||||
// TODO: port is ready
|
||||
if rtmpPacketIsReady(&packet) != 0 {
|
||||
if packet.m_nBodySize == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if packet.m_packetType == RTMP_PACKET_TYPE_AUDIO ||
|
||||
packet.m_packetType == RTMP_PACKET_TYPE_VIDEO ||
|
||||
packet.m_packetType == RTMP_PACKET_TYPE_INFO {
|
||||
log.Println("rtmpConnectStream: got packet before play()! Ignoring.")
|
||||
C.RTMPPacket_Free(&packet)
|
||||
continue
|
||||
}
|
||||
|
||||
// TODO: port this
|
||||
C.RTMP_ClientPacket(r, &packet)
|
||||
C.RTMPPacket_Free(&packet)
|
||||
}
|
||||
}
|
||||
return int(r.m_bPlaying)
|
||||
}
|
||||
|
||||
func rtmpPacketIsReady(p *C.RTMPPacket) int {
|
||||
if p.m_nBytesRead == p.m_nBodySize {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func endSession(rtmp *C.RTMP) uint32 {
|
||||
if rtmp == nil {
|
||||
return 3
|
||||
|
|
Loading…
Reference in New Issue