This commit is contained in:
@ -22,6 +22,7 @@ type Identity struct {
|
||||
OwnerPublicKey string `json:"owner_public_key,omitempty"`
|
||||
ArchiveClients []string `json:"archive_clients,omitempty"`
|
||||
KnownServers []meowlib.ServerCard `json:"known_servers,omitempty"`
|
||||
VideoServer VideoServer `json:"video_server,omitempty"`
|
||||
}
|
||||
|
||||
func CreateIdentity(ServerName string, ServerDesc string) *Identity {
|
||||
|
@ -65,6 +65,13 @@ func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) (*meowlib.FromServerMe
|
||||
}
|
||||
}
|
||||
}
|
||||
// initiate video
|
||||
if msg.VideoData != nil {
|
||||
from_server, err = r.handleVideo(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// manage Matriochka
|
||||
if msg.MatriochkaMessage != nil {
|
||||
from_server, err = r.handleMatriochka(msg)
|
||||
@ -275,6 +282,22 @@ func (r *RedisRouter) handleInvitation(msg *meowlib.ToServerMessage) (*meowlib.F
|
||||
return &from_server, nil
|
||||
}
|
||||
|
||||
func (r *RedisRouter) handleVideo(msg *meowlib.ToServerMessage) (*meowlib.FromServerMessage, error) {
|
||||
var from_server meowlib.FromServerMessage
|
||||
// update messages counter
|
||||
err := r.Client.Incr("statistics:messages:video").Err()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
videoData, err := r.ServerIdentity.VideoServer.UpdateVideoData(msg.VideoData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
from_server.VideoData = videoData
|
||||
from_server.UuidAck = msg.Uuid
|
||||
return &from_server, nil
|
||||
}
|
||||
|
||||
func (r *RedisRouter) handleMatriochka(msg *meowlib.ToServerMessage) (*meowlib.FromServerMessage, error) {
|
||||
var from_server meowlib.FromServerMessage
|
||||
// update messages counter
|
||||
|
41
server/videoserver.go
Normal file
41
server/videoserver.go
Normal file
@ -0,0 +1,41 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"forge.redroom.link/yves/meowlib"
|
||||
"github.com/livekit/protocol/auth"
|
||||
)
|
||||
|
||||
type VideoServer struct {
|
||||
Url string `json:"url,omitempty"`
|
||||
ApiKey string `json:"api_key,omitempty"`
|
||||
ApiSecret string `json:"secret,omitempty"`
|
||||
}
|
||||
|
||||
func (s *VideoServer) GetJoinToken(room, username string, validity time.Duration) (string, error) {
|
||||
at := auth.NewAccessToken(s.ApiKey, s.ApiSecret)
|
||||
grant := &auth.VideoGrant{
|
||||
RoomJoin: true,
|
||||
Room: room,
|
||||
}
|
||||
at.AddGrant(grant).
|
||||
SetIdentity(username).
|
||||
SetValidFor(validity)
|
||||
|
||||
return at.ToJWT()
|
||||
}
|
||||
|
||||
func (s *VideoServer) UpdateVideoData(vd *meowlib.VideoData) (*meowlib.VideoData, error) {
|
||||
vd.Url = s.Url
|
||||
vd.Credentials = []*meowlib.VideoCredential{}
|
||||
for idx := range len(vd.Credentials) {
|
||||
token, err := s.GetJoinToken(vd.Room, vd.Credentials[idx].Username, time.Duration(vd.Duration*uint64(time.Second)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
vd.Credentials[idx].Token = token
|
||||
vd.Credentials[idx].SharedKey = s.ApiKey
|
||||
}
|
||||
return vd, nil
|
||||
}
|
Reference in New Issue
Block a user