音视频通话

pull/3727/head
hawklin2017 2 months ago
parent 4b9412f685
commit c074921734

@ -17,9 +17,10 @@ package msggateway
import (
"context"
"encoding/json"
"github.com/openimsdk/open-im-server/v3/pkg/rpcli"
"sync"
"github.com/openimsdk/open-im-server/v3/pkg/rpcli"
"github.com/go-playground/validator/v10"
"google.golang.org/protobuf/proto"
@ -28,6 +29,7 @@ import (
"github.com/openimsdk/protocol/rtc"
"github.com/openimsdk/protocol/sdkws"
"github.com/openimsdk/tools/errs"
"github.com/openimsdk/tools/log"
"github.com/openimsdk/tools/utils/jsonutil"
)
@ -176,17 +178,28 @@ func (g *GrpcHandler) SendMessage(ctx context.Context, data *Req) ([]byte, error
}
func (g *GrpcHandler) SendSignalMessage(ctx context.Context, data *Req) ([]byte, error) {
var req rtc.SignalMessageAssembleReq
if err := proto.Unmarshal(data.Data, &req); err != nil {
return nil, errs.WrapMsg(err, "SendSignalMessage: error unmarshaling request", "action", "unmarshal", "dataType", "SignalMessageAssembleReq")
// SDK 长连接发送的是 proto.Marshal(SignalReq)HTTP/gRPC 侧使用 SignalMessageAssembleReq 包装。
var assembleReq rtc.SignalMessageAssembleReq
if err := proto.Unmarshal(data.Data, &assembleReq); err != nil || assembleReq.SignalReq == nil {
var signalReq rtc.SignalReq
if err2 := proto.Unmarshal(data.Data, &signalReq); err2 != nil {
log.ZError(ctx, "SendSignalMessage", err2, "r", err2.Error())
return nil, errs.WrapMsg(err2, "SendSignalMessage: error unmarshaling request", "action", "unmarshal", "dataType", "SignalReq")
}
assembleReq.SignalReq = &signalReq
}
resp, err := g.rtcClient.RtcServiceClient.SignalMessageAssemble(ctx, &req)
resp, err := g.rtcClient.RtcServiceClient.SignalMessageAssemble(ctx, &assembleReq)
if err != nil {
log.ZError(ctx, "SendSignalMessage", err, "r", err.Error())
return nil, err
}
c, err := proto.Marshal(resp)
if resp == nil || resp.SignalResp == nil {
return nil, errs.WrapMsg(errs.ErrInternalServer.WrapMsg("empty signal response"), "SendSignalMessage")
}
c, err := proto.Marshal(resp.SignalResp)
if err != nil {
return nil, errs.WrapMsg(err, "SendSignalMessage: error marshaling response", "action", "marshal", "dataType", "SignalMessageAssembleResp")
log.ZError(ctx, "SendSignalMessage", err, "r", err.Error())
return nil, errs.WrapMsg(err, "SendSignalMessage: error marshaling response", "action", "marshal", "dataType", "SignalResp")
}
return c, nil
}

@ -47,6 +47,7 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe
)
switch payload := req.SignalReq.Payload.(type) {
case *rtc.SignalReq_Invite:
log.ZDebug(ctx, "SignalMessageAssemble", "handleInvite", "payload", payload)
r, err := s.handleInvite(ctx, payload.Invite, req.SignalReq)
resp.Payload = &rtc.SignalResp_Invite{Invite: r}
respErr = err
@ -75,9 +76,11 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe
resp.Payload = &rtc.SignalResp_GetTokenByRoomID{GetTokenByRoomID: r}
respErr = err
default:
log.ZError(ctx, "SignalMessageAssemble", respErr, "r", respErr.Error())
return nil, errs.ErrArgs.WrapMsg("unknown signal payload type")
}
if respErr != nil {
log.ZError(ctx, "SignalMessageAssemble", respErr, "r", respErr.Error())
return nil, respErr
}
return &rtc.SignalMessageAssembleResp{SignalResp: &resp}, nil
@ -87,6 +90,7 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe
func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, signalReq *rtc.SignalReq) (*rtc.SignalInviteResp, error) {
inv := req.Invitation
if inv == nil {
log.ZError(ctx, "handleInvite", errs.ErrArgs, "r", "invitation is nil")
return nil, errs.ErrArgs.WrapMsg("invitation is nil")
}
if inv.RoomID == "" {
@ -96,11 +100,13 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq,
inv.InitiateTime = time.Now().UnixMilli()
if _, err := s.roomClient.CreateRoom(ctx, &livekit.CreateRoomRequest{Name: inv.RoomID}); err != nil {
log.ZError(ctx, "handleInvite", err, "r", err.Error())
return nil, errs.WrapMsg(err, "LiveKit CreateRoom failed", "roomID", inv.RoomID)
}
token, err := s.genToken(inv.RoomID, req.UserID)
if err != nil {
log.ZError(ctx, "handleInvite", err, "r", err.Error())
return nil, err
}
@ -115,6 +121,7 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq,
}
}
log.ZDebug(ctx, "handleInvite", "token", token, "roomID", inv.RoomID, "liveURL", s.config.RpcConfig.LiveKit.ExternalAddress)
return &rtc.SignalInviteResp{
Token: token,
RoomID: inv.RoomID,

Loading…
Cancel
Save