av/rtmp/RTMP.go

76 lines
2.0 KiB
Go
Raw Normal View History

/*
NAME
RtpToTsConverter.go - provides utilities for the conversion of Rtp packets
to equivalent MpegTs packets.
DESCRIPTION
See Readme.md
AUTHOR
Saxon Nelson-Milton <saxon.milton@gmail.com>
LICENSE
RtpToTsConverter.go is Copyright (C) 2017 the Australian Ocean Lab (AusOcean)
It is free software: you can redistribute it and/or modify them
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
It is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with revid in gpl.txt. If not, see [GNU licenses](http://www.gnu.org/licenses).
*/
package rtmp
// #include "RTMPWrapper.h"
import "C"
import (
"errors"
)
type RTMPSession interface {
StartSession()
WriteFrame(data []byte, dataLength uint)
EndSession()
}
type rtmpSession struct {
rtmp *C.struct_RTMP
url string
timeout uint
}
func NewRTMPSession(url string, connectTimeout uint) (session *rtmpSession){
session = new(rtmpSession)
session.url = url
session.timeout = connectTimeout
return
}
func (s *rtmpSession) StartSession() error {
if !bool(C.RTMP_start_session(s.rtmp, C.CString(s.url), C.uint(connect_timeout))) {
return errors.New("RTMP start error! Check rtmp log for details!")
}
return nil
}
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))) {
return errors.New("RTMP write error! Check rtmp log for details!")
}
return nil
}
func (s *rtmpSession) EndSession() error {
if !bool(C.RTMP_end_session(s.rtmp)) {
return errors.New("RTMP end session error! Check rtmp log for details!")
}
return nil
}