room

package module
v4.1.0 Latest Latest
Warning

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

Go to latest
Published: Feb 6, 2024 License: MIT Imports: 16 Imported by: 1

README

Room 插件

可以用于视频会议等,多人实时视频场景

插件地址

https://github.com/Monibuca/plugin-room

插件引入

    import (  _ "m7s.live/plugin/room/v4" )

配置

默认配置如下:

room:
  subscribe: # 房间作为特殊流,只订阅data track用于传输信令
    subaudio: false # 默认不订阅音频
    subvideo: false # 默认不订阅视频
  http: # 默认使用全局http配置
    listenaddr: :8080
    listenaddrtls: ""
    certfile: ""
    keyfile: ""
    cors: true
    username: ""
    password: ""
  appname: room # 房间用于广播数据的流的AppName(StreamPath=AppName/RoomID)
  size: 20 # 房间大小(最大人数)
  private: {} # 私密房间配置,key是房间ID,value是密码
  verify: # 入房验证远程请求
    url: ""
    method: ""
    header: {}

插件使用方式

通过WebSocket建立与本插件的连接,规则如下:

  • ws://localhost:8080/room/[roomID]/[userID] 建立连接,如果是私密房间,需要携带密码(?password=xxx)
  • 连接建立后,客户端接收到{"data":{"token":"4f8990a1-e7ae-4926-81b0-a3ab191c8e3b","userList":[]},"event":"joined"}代表进房成功,token用于发布流时的参数
    • 当有用户进房,客户端会收到{"data":{"ID":"xxx","StreamPath":"xxx"},"event":"userjoin"}用户进房通知,data是用户信息
    • 当有用户离房,客户端会收到{"userId":xxx,"event":"userleave"}用户离房通知,userId代表离房的用户ID
    • 当有用户发布流的时候,房间内其他人会收到事件:{"data":"[streamPath]","event":"publish","userId":"dexter"},用户可以选择订阅这个流
  • 进房后,可以通过WebSocket发送任意文本数据,该数据会被广播到房间内的其他用户(包括自己),格式:{"data":"abc","event":"msg","userId":"dexter"}
  • 在房间里面可以发布视频流,发布流的时候需要在StreamPath后面携带参数token。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Rooms util.Map[string, *Room]

Functions

This section is empty.

Types

type Room

type Room struct {
	Publisher `json:"-" yaml:"-"`
	Users     util.Map[string, *User]
	// contains filtered or unexported fields
}

type RoomConfig

type RoomConfig struct {
	config.Subscribe
	config.HTTP
	AppName string            `default:"room" desc:"用于订阅房间消息的应用名(streamPath第一段)"`
	Size    int               `default:"20" desc:"房间大小"`         //房间大小
	Private map[string]string `desc:"私密房间" key:"房间号" value:"密码"` //私密房间 key房间号,value密码
	Verify  struct {
		URL    string            `desc:"验证用户身份的URL"`
		Method string            `desc:"验证用户身份的HTTP方法"`
		Header map[string]string `desc:"验证用户身份的HTTP头" key:"名称" value:"值"`
	} `desc:"验证用户身份"`

	Ping string `default:"ping" desc:"用于客户端与服务器保持心跳时客户端发送的特殊字符串"`
	Pong string `default:"pong" desc:"用于客户端与服务器保持心跳时服务器响应的特殊字符串"`
	// contains filtered or unexported fields
}

func (*RoomConfig) OnEvent

func (rc *RoomConfig) OnEvent(event any)

func (*RoomConfig) ServeHTTP

func (rc *RoomConfig) ServeHTTP(w http.ResponseWriter, r *http.Request)

type RoomPublisher

type RoomPublisher struct {
	Publisher
}

type User

type User struct {
	Subscriber
	StreamPath string
	Token      string `json:"-" yaml:"-"`
	Room       *Room  `json:"-" yaml:"-"`
	net.Conn   `json:"-" yaml:"-"`
	// contains filtered or unexported fields
}

func (*User) OnEvent

func (u *User) OnEvent(event any)

func (*User) Send

func (u *User) Send(event string, data any)

Jump to

Keyboard shortcuts

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