mirror of https://bitbucket.org/ausocean/av.git
Managed to link c code with cgo :)
This commit is contained in:
parent
a276809ec9
commit
400f909dd4
|
@ -41,7 +41,6 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
"rtmp"
|
|
||||||
|
|
||||||
//"bitbucket.org/ausocean/av/parser"
|
//"bitbucket.org/ausocean/av/parser"
|
||||||
//"bitbucket.org/ausocean/av/tsgenerator"
|
//"bitbucket.org/ausocean/av/tsgenerator"
|
||||||
|
|
|
@ -154,6 +154,7 @@ func TestRtmpOutputUsingLibRtmp(t *testing.T){
|
||||||
Output: Rtmp,
|
Output: Rtmp,
|
||||||
RtmpMethod: LibRtmp,
|
RtmpMethod: LibRtmp,
|
||||||
RtmpUrl: "",
|
RtmpUrl: "",
|
||||||
|
FramesPerClip: 1,
|
||||||
Packetization: Flv,
|
Packetization: Flv,
|
||||||
FrameRate: "25",
|
FrameRate: "25",
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
13
rtmp/RTMP.go
13
rtmp/RTMP.go
|
@ -26,12 +26,13 @@ LICENSE
|
||||||
along with revid in gpl.txt. If not, see [GNU licenses](http://www.gnu.org/licenses).
|
along with revid in gpl.txt. If not, see [GNU licenses](http://www.gnu.org/licenses).
|
||||||
*/
|
*/
|
||||||
package rtmp
|
package rtmp
|
||||||
|
// #cgo LDFLAGS: rtmp_c/librtmp/amf.o rtmp_c/librtmp/hashswf.o rtmp_c/librtmp/log.o rtmp_c/librtmp/parseurl.o rtmp_c/librtmp/rtmp.o -lssl -lcrypto -lz
|
||||||
// #include "RTMPWrapper.h"
|
// #include "RTMPWrapper.h"
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RTMPSession interface {
|
type RTMPSession interface {
|
||||||
|
@ -54,22 +55,26 @@ func NewRTMPSession(url string, connectTimeout uint) (session *rtmpSession){
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rtmpSession) StartSession() error {
|
func (s *rtmpSession) StartSession() error {
|
||||||
if !bool(C.RTMP_start_session(s.rtmp, C.CString(s.url), C.uint(connect_timeout))) {
|
if !uintToBool(uint(C.RTMP_start_session(s.rtmp, C.CString(s.url), C.uint(s.timeout)))) {
|
||||||
return errors.New("RTMP start error! Check rtmp log for details!")
|
return errors.New("RTMP start error! Check rtmp log for details!")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rtmpSession) WriteFrame(data []byte, dataLength uint) error {
|
func (s *rtmpSession) WriteFrame(data []byte, dataLength uint) error {
|
||||||
if !bool(C.RTMP_write_frame(s.rtmp, (*C.char)(unsafe.Pointer(&data[0])), C.uint(data_length))) {
|
if !uintToBool(uint(C.RTMP_write_frame(s.rtmp, (*C.char)(unsafe.Pointer(&data[0])), C.uint(dataLength)))) {
|
||||||
return errors.New("RTMP write error! Check rtmp log for details!")
|
return errors.New("RTMP write error! Check rtmp log for details!")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rtmpSession) EndSession() error {
|
func (s *rtmpSession) EndSession() error {
|
||||||
if !bool(C.RTMP_end_session(s.rtmp)) {
|
if !uintToBool(uint(C.RTMP_end_session(s.rtmp))) {
|
||||||
return errors.New("RTMP end session error! Check rtmp log for details!")
|
return errors.New("RTMP end session error! Check rtmp log for details!")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func uintToBool(x uint) bool {
|
||||||
|
return x != 0
|
||||||
|
}
|
||||||
|
|
|
@ -31,13 +31,13 @@ LICENSE
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "rtmp_c/librtmp/rtmp_sys.h"
|
#include "rtmp_c/librtmp/rtmp_sys.h"
|
||||||
#include "rtmp_c/librtmp/log.h"
|
#include "rtmp_c/librtmp/log.h"
|
||||||
#include "lwlog/lwlog.h"
|
#include "rtmp_c/librtmp/rtmp.h"
|
||||||
|
|
||||||
int RTMP_start_session(RTMP* rtmp, char* url, uint connect_timeout){
|
unsigned int RTMP_start_session(RTMP* rtmp, char* url, uint connect_timeout){
|
||||||
rtmp = RTMP_Alloc();
|
rtmp = RTMP_Alloc();
|
||||||
RTMP_Init(rtmp);
|
RTMP_Init(rtmp);
|
||||||
rtmp->Link.timeout = connect_timeout;
|
rtmp->Link.timeout = connect_timeout;
|
||||||
if (!RTMP_SetupURL(rtmp, (const char*)url)) {
|
if (!RTMP_SetupURL(rtmp, url)) {
|
||||||
RTMP_Log(RTMP_LOGERROR, "SetupURL Err\n");
|
RTMP_Log(RTMP_LOGERROR, "SetupURL Err\n");
|
||||||
RTMP_Free(rtmp);
|
RTMP_Free(rtmp);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -57,10 +57,10 @@ int RTMP_start_session(RTMP* rtmp, char* url, uint connect_timeout){
|
||||||
RTMP_Free(rtmp);
|
RTMP_Free(rtmp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTMP_write_frame(RTMP* rtmp, char* data, uint data_length){
|
unsigned int RTMP_write_frame(RTMP* rtmp, char* data, uint data_length){
|
||||||
if (!RTMP_IsConnected(rtmp)) {
|
if (!RTMP_IsConnected(rtmp)) {
|
||||||
RTMP_Log(RTMP_LOGERROR, "RTMP is not connected!\n");
|
RTMP_Log(RTMP_LOGERROR, "RTMP is not connected!\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -72,7 +72,7 @@ int RTMP_write_frame(RTMP* rtmp, char* data, uint data_length){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTMP_end_session(RTMP* rtmp){
|
unsigned int RTMP_end_session(RTMP* rtmp){
|
||||||
if (rtmp != NULL) {
|
if (rtmp != NULL) {
|
||||||
RTMP_Close(rtmp);
|
RTMP_Close(rtmp);
|
||||||
RTMP_Free(rtmp);
|
RTMP_Free(rtmp);
|
||||||
|
|
|
@ -31,7 +31,8 @@ LICENSE
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "rtmp_c/librtmp/rtmp_sys.h"
|
#include "rtmp_c/librtmp/rtmp_sys.h"
|
||||||
#include "rtmp_c/librtmp/log.h"
|
#include "rtmp_c/librtmp/log.h"
|
||||||
#include "lwlog/lwlog.h"
|
#include "rtmp_c/librtmp/rtmp.h"
|
||||||
|
|
||||||
|
|
||||||
int RTMP_start_session(RTMP* rtmp, char* url, uint connect_timeout);
|
int RTMP_start_session(RTMP* rtmp, char* url, uint connect_timeout);
|
||||||
int RTMP_write_frame(RTMP* rtmp, char* data, uint data_length);
|
int RTMP_write_frame(RTMP* rtmp, char* data, uint data_length);
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue