zoukankan      html  css  js  c++  java
  • web 直播&即时聊天------阿里云、融云

    随着直播越来越火,所在公司也打算制作自己的直播,所以去了解了这方面,使用后发现还是有些问题需要记录的。

    经过分析,制作直播应该是分为两块来做,即直播与实时评论。这里先去制作实时评论,等直播ok后,也会将相应心得写上来。

    我们直播采用了阿里云,评论采用了融云

    其实融云的api还是比较清晰的,只不过web demo只有ng的,个人对ng不是很熟悉,所以只能自己慢慢摸索。

    1. 注册帐号,根据提示创建应用,获取appkey

    2. 引入sdk(请去官网选择最新版本)

    <script src="http(s)://cdn.ronghub.com/RongIMLib-2.2.5.min.js"></script>

    3. 初始化sdk

    RongIMClient.init("xxx"); //"xxx"代表你的appkey

    4. 设置监听器

     // 设置连接监听状态 ( status 标识当前连接状态)
     // 连接状态监听器
     RongIMClient.setConnectionStatusListener({
        onChanged: function (status) {
            switch (status) {
                //链接成功
                case RongIMLib.ConnectionStatus.CONNECTED:
                    console.log('链接成功');
                    break;
                //正在链接
                case RongIMLib.ConnectionStatus.CONNECTING:
                    console.log('正在链接');
                    break;
                //重新链接
                case RongIMLib.ConnectionStatus.DISCONNECTED:
                    console.log('断开连接');
                    break;
                //其他设备登录
                case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
                    console.log('其他设备登录');
                    break;
                  //网络不可用
                case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
                  console.log('网络不可用');
                  break;
                }
        }});
    
     // 消息监听器
     RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
            // 判断消息类型
            switch(message.messageType){
                case RongIMClient.MessageType.TextMessage:
                       // 发送的消息内容将会被打印
                    console.log(message.content.content);
                    break;
                case RongIMClient.MessageType.VoiceMessage:
                    // 对声音进行预加载                
                    // message.content.content 格式为 AMR 格式的 base64 码
                    RongIMLib.RongIMVoice.preLoaded(message.content.content);
                    break;
                case RongIMClient.MessageType.ImageMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.LocationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.RichContentMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.InformationNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.ContactNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.ProfileNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.UnknownMessage:
                    // do something...
                    break;
                default:
                    // 自定义消息
                    // do something...
            }
        }
    });

    顾名思义,状态连接监听器是用来检测当前用户的状态的,消息监听器也就是我们接受消息的。

    5. 获取token(在我的应用中自行获取即可)

    6. 连接服务器

    var token = "xxx"; //"xxx"代表你自己的token
    
    // 连接融云服务器。
          RongIMClient.connect(token, {
            onSuccess: function(userId) {
              console.log("Login successfully." + userId);
            },
            onTokenIncorrect: function() {
              console.log('token无效');
            },
            onError:function(errorCode){
                  var info = '';
                  switch (errorCode) {
                    case RongIMLib.ErrorCode.TIMEOUT:
                      info = '超时';
                      break;
                    case RongIMLib.ErrorCode.UNKNOWN_ERROR:
                      info = '未知错误';
                      break;
                    case RongIMLib.ErrorCode.UNACCEPTABLE_PaROTOCOL_VERSION:
                      info = '不可接受的协议版本';
                      break;
                    case RongIMLib.ErrorCode.IDENTIFIER_REJECTED:
                      info = 'appkey不正确';
                      break;
                    case RongIMLib.ErrorCode.SERVER_UNAVAILABLE:
                      info = '服务器不可用';
                      break;
                  }
                  console.log(errorCode);
                }
          });

    7. 发送消息

     // 定义消息类型,文字消息使用 RongIMLib.TextMessage
     var msg = new RongIMLib.TextMessage({content:"hello",extra:"附加信息"});
     //或者使用RongIMLib.TextMessage.obtain 方法.具体使用请参见文档
     //var msg = RongIMLib.TextMessage.obtain("hello");
     var conversationtype = RongIMLib.ConversationType.CHATROOM; // 聊天室
     var targetId = "xxx"; // 目标 Id
     RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
                    // 发送消息成功
                    onSuccess: function (message) {
                        //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
                        console.log("Send successfully");
                    },
                    onError: function (errorCode,message) {
                        var info = '';
                        switch (errorCode) {
                            case RongIMLib.ErrorCode.TIMEOUT:
                                info = '超时';
                                break;
                            case RongIMLib.ErrorCode.UNKNOWN_ERROR:
                                info = '未知错误';
                                break;
                            case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
                                info = '在黑名单中,无法向对方发送消息';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
                                info = '不在讨论组中';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_GROUP:
                                info = '不在群组中';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
                                info = '不在聊天室中';
                                break;
                            default :
                                info = x;
                                break;
                        }
                        console.log('发送失败:' + info);
                    }
                }
            );
    因为是直播所以选择了聊天室,大家根据自己的需求更改即可

    RongIMLib.ConversationType.CHATROOM; ==> 选择聊天室
    targetId = "xxx"; ==> 如果是聊天室就填写创建聊天室的id,私聊就是目标用户的id,以此类推

    8. 进入聊天室
    
    

      var chatRoomId = "xxx"; // 聊天室 Id。
      var count = 1;// 拉取最近聊天最多 50 条

    RongIMClient.getInstance().joinChatRoom(chatRoomId, count, {
      onSuccess: function() {
           // 加入聊天室成功。
           console.log('加入聊天室成功。');
      },
      onError: function(error) {
        // 加入聊天室失败
      }
    });

    当没有聊天室的时候,此方法会创建聊天室

    9.其他

    基本上的功能就是这样了,像其他的功能(同步回话列表,表情等)大家去官网查看,这里就不讲解了...

    如若您发现有任何问题,欢迎交流指正...

      西北有高楼,上与浮云齐

    下一篇: web 直播&即时聊天------阿里云、融云(二)

  • 相关阅读:
    acdream 1738 世风日下的哗啦啦族I 分块
    hihocoder #1179 : 永恒游戏 暴力
    hihocoder #1178 : 计数 暴力
    hihocoder #1177 : 顺子 模拟
    刷了500道水题是什么体验?
    scu 4436: Easy Math 水题
    JVM系列三:JVM参数设置、分析
    Eclipse插件Target Management (RSE)
    修改jsp文件tomcat发布失败(Could not delete May be locked by another process)
    oracle中修改表名
  • 原文地址:https://www.cnblogs.com/bbbiu/p/6871994.html
Copyright © 2011-2022 走看看