rtmp

package module
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2023 License: BSL-1.0 Imports: 17 Imported by: 8

README

go-rtmp

ci codecov GoDoc Go Report Card license

RTMP 1.0 server/client library written in Go.

Work in progress

Installation

go get github.com/yutopp/go-rtmp

See also server_demo and client_demo.

Documentation

NOTES

How to limit bitrates or set timeouts

License

Boost Software License - Version 1.0

Documentation

Index

Constants

View Source
const ControlStreamID = 0

ControlStreamID StreamID 0 is a control stream

View Source
const DefaultChunkSize = 128
View Source
const MaxChunkSize = 0xffffff // 5.4.1

Variables

View Source
var ErrClosed = errors.New("Server is closed")

Functions

This section is empty.

Types

type ChunkMessage

type ChunkMessage struct {
	StreamID uint32
	Message  message.Message
}

type ChunkStreamReader

type ChunkStreamReader struct {
	// contains filtered or unexported fields
}

func (*ChunkStreamReader) Read

func (r *ChunkStreamReader) Read(b []byte) (int, error)

type ChunkStreamWriter

type ChunkStreamWriter struct {
	ChunkStreamReader
	// contains filtered or unexported fields
}

func (*ChunkStreamWriter) Wait

func (w *ChunkStreamWriter) Wait(ctx context.Context) error

func (*ChunkStreamWriter) Write

func (w *ChunkStreamWriter) Write(b []byte) (int, error)

type ChunkStreamer

type ChunkStreamer struct {
	// contains filtered or unexported fields
}

func NewChunkStreamer

func NewChunkStreamer(r io.Reader, w io.Writer, config *StreamControlStateConfig) *ChunkStreamer

func (*ChunkStreamer) Close

func (cs *ChunkStreamer) Close() error

func (*ChunkStreamer) Done

func (cs *ChunkStreamer) Done() <-chan struct{}

func (*ChunkStreamer) Err

func (cs *ChunkStreamer) Err() error

func (*ChunkStreamer) NewChunkReader

func (cs *ChunkStreamer) NewChunkReader() (*ChunkStreamReader, error)

func (*ChunkStreamer) NewChunkWriter

func (cs *ChunkStreamer) NewChunkWriter(ctx context.Context, chunkStreamID int) (*ChunkStreamWriter, error)

NewChunkWriter Returns a writer for a chunkStreamID. Wait until writing have been finished if the writer is running.

func (*ChunkStreamer) PeerState

func (cs *ChunkStreamer) PeerState() *StreamControlState

func (*ChunkStreamer) Read

func (cs *ChunkStreamer) Read(cmsg *ChunkMessage) (int, uint32, error)

func (*ChunkStreamer) Sched

func (cs *ChunkStreamer) Sched(writer *ChunkStreamWriter) error

func (*ChunkStreamer) SelfState

func (cs *ChunkStreamer) SelfState() *StreamControlState

func (*ChunkStreamer) Write

func (cs *ChunkStreamer) Write(
	ctx context.Context,
	chunkStreamID int,
	timestamp uint32,
	cmsg *ChunkMessage,
) error

type ChunkStreamerReader

type ChunkStreamerReader struct {
	// contains filtered or unexported fields
}

func (*ChunkStreamerReader) FragmentReadBytes

func (r *ChunkStreamerReader) FragmentReadBytes() uint32

func (*ChunkStreamerReader) Read

func (r *ChunkStreamerReader) Read(b []byte) (int, error)

func (*ChunkStreamerReader) ResetFragmentReadBytes

func (r *ChunkStreamerReader) ResetFragmentReadBytes()

func (*ChunkStreamerReader) TotalReadBytes

func (r *ChunkStreamerReader) TotalReadBytes() uint32

type ChunkStreamerWriter

type ChunkStreamerWriter struct {
	// contains filtered or unexported fields
}

func (*ChunkStreamerWriter) Flush

func (w *ChunkStreamerWriter) Flush() error

func (*ChunkStreamerWriter) Write

func (w *ChunkStreamerWriter) Write(buf []byte) (int, error)

type ClientConn

type ClientConn struct {
	// contains filtered or unexported fields
}

ClientConn A wrapper of a connection. It prorives client-side specific features.

func Dial

func Dial(protocol, addr string, config *ConnConfig) (*ClientConn, error)

func DialWithDialer

func DialWithDialer(dialer *net.Dialer, protocol, addr string, config *ConnConfig) (*ClientConn, error)

func (*ClientConn) Close

func (cc *ClientConn) Close() error

func (*ClientConn) Connect

func (cc *ClientConn) Connect(body *message.NetConnectionConnect) error

func (*ClientConn) CreateStream

func (cc *ClientConn) CreateStream(body *message.NetConnectionCreateStream, chunkSize uint32) (*Stream, error)

func (*ClientConn) DeleteStream

func (cc *ClientConn) DeleteStream(body *message.NetStreamDeleteStream) error

func (*ClientConn) LastError

func (cc *ClientConn) LastError() error

type Conn

type Conn struct {
	// contains filtered or unexported fields
}

func (*Conn) Close

func (c *Conn) Close() error

func (*Conn) GetChunkStreamer added in v0.0.6

func (c *Conn) GetChunkStreamer() *ChunkStreamer

func (*Conn) Write

func (c *Conn) Write(ctx context.Context, chunkStreamID int, timestamp uint32, cmsg *ChunkMessage) error

type ConnConfig

type ConnConfig struct {
	Handler                   Handler
	SkipHandshakeVerification bool

	IgnoreMessagesOnNotExistStream          bool
	IgnoreMessagesOnNotExistStreamThreshold uint32

	ReaderBufferSize int
	WriterBufferSize int

	ControlState StreamControlStateConfig

	Logger  logrus.FieldLogger
	RPreset ResponsePreset
}

type ConnectRejectedError

type ConnectRejectedError struct {
	TransactionID int64
	Result        *message.NetConnectionConnectResult
}

func (*ConnectRejectedError) Error

func (err *ConnectRejectedError) Error() string

type CreateStreamRejectedError

type CreateStreamRejectedError struct {
	TransactionID int64
	Result        *message.NetConnectionCreateStreamResult
}

func (*CreateStreamRejectedError) Error

func (err *CreateStreamRejectedError) Error() string

type DefaultHandler

type DefaultHandler struct {
}

func (*DefaultHandler) OnAudio

func (h *DefaultHandler) OnAudio(timestamp uint32, payload io.Reader) error

func (*DefaultHandler) OnClose

func (h *DefaultHandler) OnClose()

func (*DefaultHandler) OnConnect

func (h *DefaultHandler) OnConnect(timestamp uint32, cmd *message.NetConnectionConnect) error

func (*DefaultHandler) OnCreateStream

func (h *DefaultHandler) OnCreateStream(timestamp uint32, cmd *message.NetConnectionCreateStream) error

func (*DefaultHandler) OnDeleteStream

func (h *DefaultHandler) OnDeleteStream(timestamp uint32, cmd *message.NetStreamDeleteStream) error

func (*DefaultHandler) OnFCPublish

func (h *DefaultHandler) OnFCPublish(timestamp uint32, cmd *message.NetStreamFCPublish) error

func (*DefaultHandler) OnFCUnpublish

func (h *DefaultHandler) OnFCUnpublish(timestamp uint32, cmd *message.NetStreamFCUnpublish) error

func (*DefaultHandler) OnPlay

func (h *DefaultHandler) OnPlay(_ *StreamContext, timestamp uint32, cmd *message.NetStreamPlay) error

func (*DefaultHandler) OnPublish

func (h *DefaultHandler) OnPublish(_ *StreamContext, timestamp uint32, cmd *message.NetStreamPublish) error

func (*DefaultHandler) OnReleaseStream

func (h *DefaultHandler) OnReleaseStream(timestamp uint32, cmd *message.NetConnectionReleaseStream) error

func (*DefaultHandler) OnServe

func (h *DefaultHandler) OnServe(conn *Conn)

func (*DefaultHandler) OnSetDataFrame

func (h *DefaultHandler) OnSetDataFrame(timestamp uint32, data *message.NetStreamSetDataFrame) error

func (*DefaultHandler) OnUnknownCommandMessage

func (h *DefaultHandler) OnUnknownCommandMessage(timestamp uint32, cmd *message.CommandMessage) error

func (*DefaultHandler) OnUnknownDataMessage

func (h *DefaultHandler) OnUnknownDataMessage(timestamp uint32, data *message.DataMessage) error

func (*DefaultHandler) OnUnknownMessage

func (h *DefaultHandler) OnUnknownMessage(timestamp uint32, msg message.Message) error

func (*DefaultHandler) OnVideo

func (h *DefaultHandler) OnVideo(timestamp uint32, payload io.Reader) error

type DefaultResponsePreset

type DefaultResponsePreset struct {
	ServerConnectResultProperties message.NetConnectionConnectResultProperties
	ServerConnectResultData       map[string]interface{}
}

DefaultResponsePreset gives a default ServerInfo.

func NewDefaultResponsePreset

func NewDefaultResponsePreset() *DefaultResponsePreset

NewDefaultResponsePreset gives an instance of DefaultResponsePreset

func (*DefaultResponsePreset) GetServerConnectResultData

func (r *DefaultResponsePreset) GetServerConnectResultData() map[string]interface{}

GetServerConnectResultData returns ServerConnectResultData.

func (*DefaultResponsePreset) GetServerConnectResultProperties

func (r *DefaultResponsePreset) GetServerConnectResultProperties() message.NetConnectionConnectResultProperties

GetServerConnectResultProperties returns ServerConnectResultProperties.

type Handler

type Handler interface {
	OnServe(conn *Conn)
	OnConnect(timestamp uint32, cmd *message.NetConnectionConnect) error
	OnCreateStream(timestamp uint32, cmd *message.NetConnectionCreateStream) error
	OnReleaseStream(timestamp uint32, cmd *message.NetConnectionReleaseStream) error
	OnDeleteStream(timestamp uint32, cmd *message.NetStreamDeleteStream) error
	OnPublish(ctx *StreamContext, timestamp uint32, cmd *message.NetStreamPublish) error
	OnPlay(ctx *StreamContext, timestamp uint32, cmd *message.NetStreamPlay) error
	OnFCPublish(timestamp uint32, cmd *message.NetStreamFCPublish) error
	OnFCUnpublish(timestamp uint32, cmd *message.NetStreamFCUnpublish) error
	OnSetDataFrame(timestamp uint32, data *message.NetStreamSetDataFrame) error
	OnAudio(timestamp uint32, payload io.Reader) error
	OnVideo(timestamp uint32, payload io.Reader) error
	OnUnknownMessage(timestamp uint32, msg message.Message) error
	OnUnknownCommandMessage(timestamp uint32, cmd *message.CommandMessage) error
	OnUnknownDataMessage(timestamp uint32, data *message.DataMessage) error
	OnClose()
}

type ResponsePreset

type ResponsePreset interface {
	GetServerConnectResultProperties() message.NetConnectionConnectResultProperties
	GetServerConnectResultData() map[string]interface{}
}

ResponsePreset is an interface to provider server info. Users of go-rtmp can obfuscate this information by modifying RPreset field of ConnConfig.

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(config *ServerConfig) *Server

func (*Server) Close

func (srv *Server) Close() error

func (*Server) Serve

func (srv *Server) Serve(l net.Listener) error

type ServerConfig

type ServerConfig struct {
	OnConnect func(net.Conn) (io.ReadWriteCloser, *ConnConfig)
}

type Stream

type Stream struct {
	// contains filtered or unexported fields
}

Stream represents a logical message stream

func (*Stream) Close

func (s *Stream) Close() error

func (*Stream) Connect

func (*Stream) CreateStream

func (*Stream) DeleteStream

func (s *Stream) DeleteStream(body *message.NetStreamDeleteStream) error

func (*Stream) NotifyStatus

func (s *Stream) NotifyStatus(
	chunkStreamID int,
	timestamp uint32,
	body *message.NetStreamOnStatus,
) error

func (*Stream) Publish

func (s *Stream) Publish(
	body *message.NetStreamPublish,
) error

func (*Stream) ReplyConnect

func (s *Stream) ReplyConnect(
	chunkStreamID int,
	timestamp uint32,
	body *message.NetConnectionConnectResult,
) error

func (*Stream) ReplyCreateStream

func (s *Stream) ReplyCreateStream(
	chunkStreamID int,
	timestamp uint32,
	transactionID int64,
	body *message.NetConnectionCreateStreamResult,
) error

func (*Stream) StreamID

func (s *Stream) StreamID() uint32

func (*Stream) Write

func (s *Stream) Write(chunkStreamID int, timestamp uint32, msg message.Message) error

func (*Stream) WriteDataMessage

func (s *Stream) WriteDataMessage(
	chunkStreamID int,
	timestamp uint32,
	name string,
	body message.AMFConvertible,
) error

func (*Stream) WriteSetChunkSize

func (s *Stream) WriteSetChunkSize(chunkSize uint32) error

func (*Stream) WriteSetPeerBandwidth

func (s *Stream) WriteSetPeerBandwidth(chunkStreamID int, timestamp uint32, msg *message.SetPeerBandwidth) error

func (*Stream) WriteUserCtrl

func (s *Stream) WriteUserCtrl(chunkStreamID int, timestamp uint32, msg *message.UserCtrl) error

func (*Stream) WriteWinAckSize

func (s *Stream) WriteWinAckSize(chunkStreamID int, timestamp uint32, msg *message.WinAckSize) error

type StreamContext

type StreamContext struct {
	StreamID uint32
}

type StreamControlState

type StreamControlState struct {
	// contains filtered or unexported fields
}

func NewStreamControlState

func NewStreamControlState(config *StreamControlStateConfig) *StreamControlState

func (*StreamControlState) AckWindowSize

func (s *StreamControlState) AckWindowSize() int32

func (*StreamControlState) BandwidthLimitType

func (s *StreamControlState) BandwidthLimitType() message.LimitType

func (*StreamControlState) BandwidthWindowSize

func (s *StreamControlState) BandwidthWindowSize() int32

func (*StreamControlState) ChunkSize

func (s *StreamControlState) ChunkSize() uint32

func (*StreamControlState) SetAckWindowSize

func (s *StreamControlState) SetAckWindowSize(ackWindowSize int32) error

func (*StreamControlState) SetChunkSize

func (s *StreamControlState) SetChunkSize(chunkSize uint32) error

type StreamControlStateConfig

type StreamControlStateConfig struct {
	DefaultChunkSize uint32
	MaxChunkSize     uint32
	MaxChunkStreams  int

	DefaultAckWindowSize int32
	MaxAckWindowSize     int32

	DefaultBandwidthWindowSize int32
	DefaultBandwidthLimitType  message.LimitType
	MaxBandwidthWindowSize     int32

	MaxMessageSize    uint32
	MaxMessageStreams int
}

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL