mirror of https://bitbucket.org/ausocean/av.git
Merged in kortschak/av/cgo/rtmpnull (pull request #17)
rtmp: fix RTMP* handling
This commit is contained in:
commit
3f7ca76ae9
11
rtmp/rtmp.c
11
rtmp/rtmp.c
|
@ -33,7 +33,7 @@ LICENSE
|
|||
#include <log.h>
|
||||
#include <rtmp.h>
|
||||
|
||||
unsigned int start_session(RTMP* rtmp, char* url, uint connect_timeout) {
|
||||
RTMP* start_session(RTMP* rtmp, char* url, uint connect_timeout) {
|
||||
printf("RTMP url: %s\n", url);
|
||||
rtmp = RTMP_Alloc();
|
||||
RTMP_Init(rtmp);
|
||||
|
@ -42,7 +42,7 @@ unsigned int start_session(RTMP* rtmp, char* url, uint connect_timeout) {
|
|||
printf("Can't setup url!\n");
|
||||
RTMP_Close(rtmp);
|
||||
RTMP_Free(rtmp);
|
||||
return 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RTMP_EnableWrite(rtmp);
|
||||
|
@ -51,17 +51,17 @@ unsigned int start_session(RTMP* rtmp, char* url, uint connect_timeout) {
|
|||
printf("RTMP can't connect!\n");
|
||||
RTMP_Close(rtmp);
|
||||
RTMP_Free(rtmp);
|
||||
return 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!RTMP_ConnectStream(rtmp, 0)) {
|
||||
printf("RTMP can't connect stream!\n");
|
||||
RTMP_Close(rtmp);
|
||||
RTMP_Free(rtmp);
|
||||
return 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return rtmp;
|
||||
}
|
||||
|
||||
unsigned int write_frame(RTMP* rtmp, char* data, uint data_length) {
|
||||
|
@ -92,6 +92,5 @@ unsigned int end_session(RTMP* rtmp) {
|
|||
|
||||
RTMP_Close(rtmp);
|
||||
RTMP_Free(rtmp);
|
||||
rtmp = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
|
18
rtmp/rtmp.go
18
rtmp/rtmp.go
|
@ -35,7 +35,7 @@ package rtmp
|
|||
#include <stdlib.h>
|
||||
#include <rtmp.h>
|
||||
|
||||
int start_session(RTMP* rtmp, char* url, uint connect_timeout);
|
||||
RTMP* start_session(RTMP* rtmp, char* url, uint connect_timeout);
|
||||
int write_frame(RTMP* rtmp, char* data, uint data_length);
|
||||
int end_session(RTMP* rtmp);
|
||||
*/
|
||||
|
@ -59,7 +59,6 @@ type session struct {
|
|||
|
||||
url string
|
||||
timeout uint
|
||||
running bool
|
||||
}
|
||||
|
||||
var _ Session = (*session)(nil)
|
||||
|
@ -75,19 +74,19 @@ func NewSession(url string, connectTimeout uint) Session {
|
|||
// StartSession establishes an rtmp connection with the url passed into the
|
||||
// constructor
|
||||
func (s *session) StartSession() error {
|
||||
if s.running {
|
||||
if s.rtmp != nil {
|
||||
return errors.New("rtmp: attempt to start already running session")
|
||||
}
|
||||
if C.start_session(s.rtmp, C.CString(s.url), C.uint(s.timeout)) != 0 {
|
||||
s.rtmp = C.start_session(s.rtmp, C.CString(s.url), C.uint(s.timeout))
|
||||
if s.rtmp == nil {
|
||||
return errors.New("RTMP start error! Check rtmp log for details!")
|
||||
}
|
||||
s.running = true
|
||||
return nil
|
||||
}
|
||||
|
||||
// Write writes a frame (flv tag) to the rtmp connection
|
||||
func (s *session) Write(data []byte) error {
|
||||
if !s.running {
|
||||
if s.rtmp == nil {
|
||||
return errors.New("rtmp: attempt to write to non-running session")
|
||||
}
|
||||
if C.write_frame(s.rtmp, (*C.char)(unsafe.Pointer(&data[0])), C.uint(len(data))) != 0 {
|
||||
|
@ -98,11 +97,12 @@ func (s *session) Write(data []byte) error {
|
|||
|
||||
// Close terminates the rtmp connection
|
||||
func (s *session) Close() error {
|
||||
if !s.running {
|
||||
if s.rtmp == nil {
|
||||
return errors.New("Tried to stop rtmp session, but not running!")
|
||||
}
|
||||
s.running = false
|
||||
if C.end_session(s.rtmp) != 0 {
|
||||
ret := C.end_session(s.rtmp)
|
||||
s.rtmp = nil
|
||||
if ret != 0 {
|
||||
return errors.New("RTMP end session error! Check rtmp log for details!")
|
||||
}
|
||||
return nil
|
||||
|
|
Loading…
Reference in New Issue