server

package
v0.0.0-...-08a5344 Latest Latest
Warning

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

Go to latest
Published: May 20, 2021 License: MIT Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Assets embed.FS
View Source
var (
	DefaultConfig = Config{
		Domain: "localhost",
		Https: HTTPSConfig{
			ListenIp:   "0.0.0.0",
			ListenPort: 4443,
			TLS: TLSConfig{
				Cert: filepath.Join(dirname, "certs", "fullchain.pem"),
				Key:  filepath.Join(dirname, "certs", "privkey.key"),
			},
		},
		Mediasoup: MediasoupConfig{
			NumWorkers: runtime.NumCPU(),
			WorkerSettings: mediasoup.WorkerSettings{
				LogLevel: "warn",
				LogTags: []mediasoup.WorkerLogTag{
					"info",
					"ice",
					"dtls",
					"rtp",
					"srtp",
					"rtcp",
					"rtx",
					"bwe",
					"score",
					"simulcast",
					"svc",
					"sctp",
				},
				RtcMinPort: 40000,
				RtcMaxPort: 49999,
			},
			RouterOptions: mediasoup.RouterOptions{
				MediaCodecs: []*mediasoup.RtpCodecCapability{
					{
						Kind:      mediasoup.MediaKind_Audio,
						MimeType:  "audio/opus",
						ClockRate: 48000,
						Channels:  2,
					},
					{
						Kind:      mediasoup.MediaKind_Video,
						MimeType:  "video/VP8",
						ClockRate: 90000,
						Parameters: mediasoup.RtpCodecSpecificParameters{
							XGoogleStartBitrate: 1000,
						},
					},
					{
						Kind:      mediasoup.MediaKind_Video,
						MimeType:  "video/VP9",
						ClockRate: 90000,
						Parameters: mediasoup.RtpCodecSpecificParameters{
							ProfileId:           "2",
							XGoogleStartBitrate: 1000,
						},
					},
					{
						Kind:      mediasoup.MediaKind_Video,
						MimeType:  "video/h264",
						ClockRate: 90000,
						Parameters: mediasoup.RtpCodecSpecificParameters{
							RtpParameter: h264.RtpParameter{
								PacketizationMode:     1,
								ProfileLevelId:        "42e01f",
								LevelAsymmetryAllowed: 1,
							},
							XGoogleStartBitrate: 1000,
						},
					},
					{
						Kind:      mediasoup.MediaKind_Video,
						MimeType:  "video/h264",
						ClockRate: 90000,
						Parameters: mediasoup.RtpCodecSpecificParameters{
							RtpParameter: h264.RtpParameter{
								PacketizationMode:     1,
								ProfileLevelId:        "4d0032",
								LevelAsymmetryAllowed: 1,
							},
							XGoogleStartBitrate: 1000,
						},
					},
				},
			},
			WebRtcTransportOptions: WebRtcTransportOptions{
				ListenIps: []mediasoup.TransportListenIp{
					{
						Ip:          GetOutboundIP(),
						AnnouncedIp: GetOutboundIP(),
					},
				},
				InitialAvailableOutgoingBitrate: 1000000,
				MaxSctpMessageSize:              262144,
				MaxIncomingBitrate:              1500000,
			},
			PlainTransportOptions: mediasoup.PlainTransportOptions{
				ListenIp: mediasoup.TransportListenIp{
					Ip:          GetOutboundIP(),
					AnnouncedIp: GetOutboundIP(),
				},
				MaxSctpMessageSize: 262144,
			},
		},
	}
)
View Source
var NewLogger = func(name string) *zerolog.Logger {
	f, err := os.OpenFile("./logs/server.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println(err)
	}

	w := zerolog.ConsoleWriter{
		Out:        f,
		TimeFormat: time.RFC3339,
	}

	shouldDebug := true
	level := zerolog.InfoLevel
	if shouldDebug {
		level = zerolog.DebugLevel
	}

	logger := zerolog.New(w).With().Timestamp().Str(zerolog.CallerFieldName, name).Caller().Logger()
	logger.Level(level)
	return &logger
}

Functions

func CheckRoom

func CheckRoom(c *gin.Context)

*

  • For every API request, verify that the roomId in the path matches and
  • existing room.

func Clone

func Clone(dst, source interface{}) error

func ConnectBroadcasterTransport

func ConnectBroadcasterTransport(c *gin.Context)

func CreateBroadcaster

func CreateBroadcaster(c *gin.Context)

*

  • POST API to create a Broadcaster.

func CreateBroadcasterConsumer

func CreateBroadcasterConsumer(c *gin.Context)

*

  • POST API to create a mediasoup Consumer associated to a Broadcaster.
  • The exact Transport in which the Consumer must be created is signaled in
  • the URL path. Query parameters must include the desired producerId to
  • consume.

func CreateBroadcasterDataConsumer

func CreateBroadcasterDataConsumer(c *gin.Context)

func CreateBroadcasterDataProducerRequest

func CreateBroadcasterDataProducerRequest(c *gin.Context)

*

  • POST API to create a mediasoup DataProducer associated to a Broadcaster.
  • The exact Transport in which the DataProducer must be created is signaled in

func CreateBroadcasterProducer

func CreateBroadcasterProducer(c *gin.Context)

*

  • POST API to create a mediasoup Producer associated to a Broadcaster.
  • The exact Transport in which the Producer must be created is signaled in
  • the URL path. Body parameters include kind and rtpParameters of the
  • Producer.

func CreateBroadcasterTransport

func CreateBroadcasterTransport(c *gin.Context)

*

  • POST API to create a mediasoup Transport associated to a Broadcaster.
  • It can be a PlainTransport or a WebRtcTransport depending on the
  • type parameters in the body. There are also additional parameters for
  • PlainTransport.

func DelBroadcaster

func DelBroadcaster(c *gin.Context)

*

  • DELETE API to delete a Broadcaster.

func GetOutboundIP

func GetOutboundIP() string

Get preferred outbound ip of this machine

func GetRoom

func GetRoom(c *gin.Context)

*

  • API GET resource that returns the mediasoup Router RTP capabilities of
  • the room.

func InitLogger

func InitLogger()

func NewBool

func NewBool(b bool) *bool

func NewServer

func NewServer(config Config)

func Run

func Run()

Types

type Bot

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

func CreateBot

func CreateBot(mediasoupRouter *mediasoup.Router) (bot *Bot, err error)

func (Bot) Close

func (b Bot) Close()

func (Bot) DataProducer

func (b Bot) DataProducer() *mediasoup.DataProducer

func (*Bot) HandlePeerDataProducer

func (b *Bot) HandlePeerDataProducer(dataProducerId string, peer *protoo.Peer) (err error)

type Config

type Config struct {
	Domain    string          `json:"domain,omitempty"`
	Https     HTTPSConfig     `json:"https,omitempty"`
	Mediasoup MediasoupConfig `json:"mediasoup,omitempty"`
}

type Dir

type Dir string

func (Dir) Open

func (d Dir) Open(name string) (fs.File, error)

type H

type H map[string]interface{}

type HTTPSConfig

type HTTPSConfig struct {
	ListenIp   string    `json:"listenIP,omitempty"`
	ListenPort uint16    `json:"listenPort,omitempty"`
	TLS        TLSConfig `json:"tls,omitempty"`
}

type MediasoupConfig

type MediasoupConfig struct {
	NumWorkers             int                             `json:"numWorkers,omitempty"`
	WorkerSettings         mediasoup.WorkerSettings        `json:"workerSettings,omitempty"`
	RouterOptions          mediasoup.RouterOptions         `json:"routerOptions,omitempty"`
	WebRtcTransportOptions WebRtcTransportOptions          `json:"webRtcTransportOptions,omitempty"`
	PlainTransportOptions  mediasoup.PlainTransportOptions `json:"plainTransportOptions,omitempty"`
}

type Room

type Room struct {
	eventemitter.IEventEmitter
	// contains filtered or unexported fields
}

func CreateRoom

func CreateRoom(config Config, roomId string, worker *mediasoup.Worker) (room *Room, err error)

func (*Room) Close

func (r *Room) Close()

func (*Room) Closed

func (r *Room) Closed() bool

func (*Room) ConnectBroadcasterTransport

func (r *Room) ConnectBroadcasterTransport(request proto.ConnectBroadcasterTransportRequest) (err error)

*

  • Connect a Broadcaster mediasoup WebRtcTransport.

func (*Room) CreateBroadcaster

func (r *Room) CreateBroadcaster(request proto.PeerInfo) (rsp H, err error)

*

  • Create a Broadcaster. This is for HTTP API requests (see server.js).

func (*Room) CreateBroadcasterConsumer

func (r *Room) CreateBroadcasterConsumer(request proto.CreateBroadcasterConsumerRequest) (rsp proto.CreateBroadcasterConsumerResponse, err error)

func (*Room) CreateBroadcasterDataConsumer

func (r *Room) CreateBroadcasterDataConsumer(request proto.CreateBroadcasterDataConsumerRequest) (rsp proto.CreateBroadcasterDataConsumerResponse, err error)

func (*Room) CreateBroadcasterDataProducer

func (r *Room) CreateBroadcasterDataProducer(request proto.CreateBroadcasterDataProducerRequest) (rsp proto.CreateBroadcasterDataProducerResponse, err error)

func (*Room) CreateBroadcasterProducer

func (r *Room) CreateBroadcasterProducer(request proto.CreateBroadcasterProducerRequest) (rsp proto.CreateBroadcasterProducerResponse, err error)

*

  • Create a mediasoup Producer associated to a Broadcaster.

func (*Room) CreateBroadcasterTransport

func (r *Room) CreateBroadcasterTransport(request proto.CreateBroadcasterTransportRequest) (rsp H, err error)

*

  • Create a mediasoup Transport associated to a Broadcaster. It can be a
  • PlainTransport or a WebRtcTransport.

func (*Room) DeleteBroadcaster

func (r *Room) DeleteBroadcaster(broadcasterId string) (err error)

*

  • Delete a Broadcaster.

func (*Room) GetRouterRtpCapabilities

func (r *Room) GetRouterRtpCapabilities() mediasoup.RtpCapabilities

func (*Room) HandleProtooConnection

func (r *Room) HandleProtooConnection(peerId string, transport protoo.Transport) (err error)

func (*Room) LogStatus

func (r *Room) LogStatus()

type Server

type Server struct {
	// contains filtered or unexported fields
}
var S *Server

type TLSConfig

type TLSConfig struct {
	Cert string `json:"cert,omitempty"`
	Key  string `json:"key,omitempty"`
}

type WebRtcTransportOptions

type WebRtcTransportOptions struct {
	/**
	 * Listening IP address or addresses in order of preference (first one is the
	 * preferred one).
	 */
	ListenIps []mediasoup.TransportListenIp `json:"listenIps,omitempty"`

	/**
	 * Listen in UDP. Default true.
	 */
	EnableUdp *bool `json:"enableUdp,omitempty"`

	/**
	 * Listen in TCP. Default false.
	 */
	EnableTcp bool `json:"enableTcp,omitempty"`

	/**
	 * Prefer UDP. Default false.
	 */
	PreferUdp bool `json:"preferUdp,omitempty"`

	/**
	 * Prefer TCP. Default false.
	 */
	PreferTcp bool `json:"preferTcp,omitempty"`

	/**
	 * Initial available outgoing bitrate (in bps). Default 600000.
	 */
	InitialAvailableOutgoingBitrate uint32 `json:"initialAvailableOutgoingBitrate,omitempty"`

	/**
	 * Create a SCTP association. Default false.
	 */
	EnableSctp bool `json:"enableSctp,omitempty"`

	/**
	 * SCTP streams uint32.
	 */
	NumSctpStreams mediasoup.NumSctpStreams `json:"numSctpStreams,omitempty"`

	/**
	 * Maximum allowed size for SCTP messages sent by DataProducers.
	 * Default 262144.
	 */
	MaxSctpMessageSize int `json:"maxSctpMessageSize,omitempty"`

	/**
	 * Maximum SCTP send buffer used by DataConsumers.
	 * Default 262144.
	 */
	SctpSendBufferSize int `json:"sctpSendBufferSize,omitempty"`

	/**
	 * Custom application data.
	 */
	AppData interface{} `json:"appData,omitempty"`

	// Additional options that are not part of WebRtcTransportOptions.
	MaxIncomingBitrate int `json:"maxIncomingBitrate,omitempty"`
}

Jump to

Keyboard shortcuts

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