AnyChat技术支持论坛

标题: Demo的问题咨询 [打印本页]

作者: aiyuaichou    时间: 2014-1-9 10:43
标题: Demo的问题咨询
本帖最后由 aiyuaichou 于 2014-1-9 11:11 编辑

分别把Web的demo和android的demo嵌入到自己开发的软件中一个嵌入WEB主站系统,另一个嵌入android客户端系统,现发生以下问题
1、通过WEB网页,点击对方用户列表,无法实现视频连通,而此时android端demo点击web端用户,可以连接,但web网页上仍然需要点击一次该用户
2、两个三星平板之间用android demo的视频通话,任何一个点击对方用户连接后,但两边都只能看到其中一个终端的本地和远程窗口视频图像,另一个黑屏,anychat android demo没改过,只是完全的嵌入到自己开发的android系统中,通过一个按钮点击进入demo视频的,demo视频的登陆页面被我修改成了空页面,用户名在后台发送的。
请指点
第一个问题:
从网页点击android终端用户“android”无法连接

从android终端点击web用户“tt”实现连接



android客户端点击web用户已经实现对通

此时web端,对方视频看不到,只有手动点击列表中该对方,远程视频才出现


作者: admin    时间: 2014-1-9 11:26
您好:1、关于Web端需要点一下才能打开用户视频的问题,是由于Web端的示例程序并没有主动请求对方的视频,您可以修改一下JavaScript代码,在用户进入房间时,主动请求对方的视频即可。参考:http://www.anychat.cn/faq/index. ... 2&id=193&artlang=zh

2、关于您反馈的三星Pad通话黑屏的问题,请问采用我们标准demo程序(不嵌入你们的代码中),是否正常?

作者: aiyuaichou    时间: 2014-1-9 12:18
admin 发表于 2014-1-9 11:26
您好:1、关于Web端需要点一下才能打开用户视频的问题,是由于Web端的示例程序并没有主动请求对方的视频, ...

我在刷新用户列表方法里function RoomUserListControl(userid, bInsert) ;
添加如下:
// 判断当前ID是否为自己
        if (userid == mSelfUserId) {
            AddImage(itemdiv, mSelfUserId + "_MicrophoneTag", "mSelfMicrophoneTag", "./images/advanceset/microphone_true.png", userid); // 添加话筒图片<img>标签
            itemdiv.innerHTML += "&nbsp" + BRAC_GetUserName(mSelfUserId) + "(自己)";
        } else {
                        AddImage(itemdiv, userid + "_MicrophoneTag", "MicrophoneTag", "./images/advanceset/microphone_false.png", userid); // 添加话筒图片<img>标签
            // 添加用户姓名<a>标签
            var a = document.createElement("a");
            a.id = userid + "_UserTag";
            a.title = BRAC_GetUserName(userid);
            a.innerHTML = BRAC_GetUserName(userid);
            a.href = "javascript:RequestOtherUserVideo(" + userid + ")";            itemdiv.appendChild(a);
                        a.onclick = function () {
                                RequestOtherUserVideo(userid);
            }
        }
然不起作用
上面蓝色部分是原始代码,已经给定该a标签的href
现我手动添加每个a标签的onclick事件,调用请求对方用户视频方法RequestOtherUserVideo(userid),为何不见效呢?
作者: aiyuaichou    时间: 2014-1-9 12:57
admin 发表于 2014-1-9 11:26
您好:1、关于Web端需要点一下才能打开用户视频的问题,是由于Web端的示例程序并没有主动请求对方的视频, ...

第二个问题回复
    不嵌入我们的代码,没有该问题,请求帮助分析问题原因。。。。
    因为想不明白的是,我嵌入我们代码中,并没有改动任何demo程序,只是完全的套用进去,相当于代码中有个入口点,然后就进入demo程序了
作者: admin    时间: 2014-1-9 13:02
a.innerHTML = BRAC_GetUserName(userid);
后面直接加上
RequertOtherUserVideo
作者: aiyuaichou    时间: 2014-1-9 14:05
admin 发表于 2014-1-9 13:02
a.innerHTML = BRAC_GetUserName(userid);
后面直接加上
RequertOtherUserVideo

管理员,这种方式是不行的,不但问题无法解决,还造成程序中断
其实我想了解的是:  有没有提供像当某用户请求与另一用户连接时的回调事件,这样我就可以在回调事件中,跟该用户连接一次,解决初次web远端视频不显示的问题
作者: aiyuaichou    时间: 2014-1-9 14:08
或者我可以得到某用户请求视频连接的通知,我也可以在页面做个提示,就跟QQ一样哦。否则对方跟WEB连接视频,除非通过文字消息告知用户:我跟你连接了,你点击我一下。。。。。请问管理员这问题有办法解决吗
作者: 廖斌    时间: 2014-1-9 14:24
aiyuaichou 发表于 2014-1-9 14:05
管理员,这种方式是不行的,不但问题无法解决,还造成程序中断
其实我想了解的是:  有没有提供像当某用 ...

您好,可能你调用的方法不对。只要获取到了对方的userid,并且对方已经打开了音视频,请求对方的音视频数据然后给定一个div显示就行了,demo中双击列表就是做的这个操作。
作者: 廖斌    时间: 2014-1-9 14:26
aiyuaichou 发表于 2014-1-9 14:08
或者我可以得到某用户请求视频连接的通知,我也可以在页面做个提示,就跟QQ一样哦。否则对方跟WEB连接视频 ...

我们sdk提供的视频呼叫接口可以实现一对一的呼叫,请参考帖子http://bbs.anychat.cn/forum.php? ... &extra=page%3D1
作者: aiyuaichou    时间: 2014-1-9 14:39
廖斌 发表于 2014-1-9 14:26
我们sdk提供的视频呼叫接口可以实现一对一的呼叫,请参考帖子http://bbs.anychat.cn/forum.php?mod=viewt ...

我现在是这么解决的,但不知道如果多用户在线并请求该本地视频时是否会发生什么样的后果或者发生内存泄漏的问题

我在用户进入房间并取得与本地用户的网络连接监听回调事件中,加上了本地主动与远程连接视音频
// 本地用户与其它用户的P2P网络连接状态发生变化,dwUserId表示其它用户ID号,State表示本地用户与其它用户的当前P2P网络连接状态(0:没有连接,1:仅TCP连接,2:仅UDP连接,3:TCP与UDP连接)
function OnAnyChatP2PConnectState(dwUserId, State) {
    //判断当其他远程用户与本地用户建立tcp和udp连接后,本地设置跟该远程用户的视频和音频连接
        if(dwUserId!=-1 && State ==3){
              BRAC_UserCameraControl(dwUserId, 1);                 // 请求对方视频
          BRAC_UserSpeakControl(dwUserId, 1);                 // 请求对方语音
                  BRAC_SetVideoPos(dwUserId, GetID("AnyChatRemoteVideoDiv"), "ANYCHAT_VIDEO_REMOTE");
        }
}

在用户进出房间监听的回调事件中,本地主动跟离开的用户断开视音频
// 用户进入(离开)房间,dwUserId表示用户ID号,bEnterRoom表示该用户是进入(1)或离开(0)房间
function OnAnyChatUserAtRoom(dwUserId, bEnterRoom) {
        AddLog("OnAnyChatUserAtRoom(userid=" + dwUserId + ", benter=" + bEnterRoom + ")", LOG_TYPE_EVENT);
        RoomUserListControl(dwUserId, bEnterRoom ? true : false);
    if (bEnterRoom == 1) {
                ShowNotifyMessage(BRAC_GetUserName(dwUserId) +"&nbspenter room!", NOTIFY_TYPE_NORMAL);                                                               
    }
    else {
                ShowNotifyMessage(BRAC_GetUserName(dwUserId) +"&nbspleave room!", NOTIFY_TYPE_NORMAL);
                //当用户离开房间,关闭跟该用户的视频、音频连接
                BRAC_UserCameraControl(dwUserId, 0);
        BRAC_UserSpeakControl(dwUserId, 0);
        if (dwUserId == mTargetUserId) {
                        mTargetUserId = -1;
                        BRAC_SetVideoPos(0, GetID("AnyChatRemoteVideoDiv"), "ANYCHAT_VIDEO_REMOTE");
                }
    }
    DisplayScroll("room_div_userlist");
}
作者: admin    时间: 2014-1-9 16:09
修改anychatevent.js的两处就可以实现楼主的要求:
1、收到在线用户信息时请求一次:
  1. // 收到当前房间的在线用户信息,进入房间后触发一次,dwUserCount表示在线用户数(包含自己),dwRoomId表示房间ID
  2. function OnAnyChatRoomOnlineUser(dwUserCount, dwRoomId) {
  3.         AddLog("OnAnyChatRoomOnlineUser(count=" + dwUserCount + ", roomid=" + dwRoomId + ")", LOG_TYPE_EVENT);
  4.         var useridlist = BRAC_GetOnlineUser();
  5.         for (var i = 0; i < useridlist.length; i++) {
  6.                 RoomUserListControl(useridlist[i], true);
  7.     }
  8.         // 请求其中一个用户的音视频
  9.         for (var k=0; k<useridlist.length; k++) {
  10.                 if(useridlist[k] == mSelfUserId)
  11.                         continue;
  12.                 RequestOtherUserVideo(useridlist[k]);
  13.                 break;
  14.         }
  15. }

复制代码
2、新用户进入房间时请求一次,如:

  1. // 用户进入(离开)房间,dwUserId表示用户ID号,bEnterRoom表示该用户是进入(1)或离开(0)房间
  2. function OnAnyChatUserAtRoom(dwUserId, bEnterRoom) {
  3.         AddLog("OnAnyChatUserAtRoom(userid=" + dwUserId + ", benter=" + bEnterRoom + ")", LOG_TYPE_EVENT);
  4.         RoomUserListControl(dwUserId, bEnterRoom ? true : false);
  5.     if (bEnterRoom == 1) {
  6.                 ShowNotifyMessage(BRAC_GetUserName(dwUserId) +"&nbspenter room!", NOTIFY_TYPE_NORMAL);
  7.                 if(mTargetUserId == -1)                                                // 默认打开一个用户的音视频
  8.                         RequestOtherUserVideo(dwUserId);
  9.     }
  10.     else {
  11.                 ShowNotifyMessage(BRAC_GetUserName(dwUserId) +"&nbspleave room!", NOTIFY_TYPE_NORMAL);
  12.         if (dwUserId == mTargetUserId) {
  13.                         mTargetUserId = -1;
  14.                         BRAC_SetVideoPos(0, GetID("AnyChatRemoteVideoDiv"), "ANYCHAT_VIDEO_REMOTE");
  15.                 }
  16.     }
  17.     DisplayScroll("room_div_userlist");
  18. }
复制代码

作者: aiyuaichou    时间: 2014-1-10 11:16
admin 发表于 2014-1-9 16:09
修改anychatevent.js的两处就可以实现楼主的要求:
1、收到在线用户信息时请求一次:2、新用户进入房间时 ...

感谢管理员给我的解决方案,确实有效,并且比我的方法安全
麻烦管理员帮看看我第二个问题,能否帮解决或分析下。。。“关于把Android端Demo示例溶入其他代码中发生的平板之间视频,只能显示单方视频的原因,如果WEB端跟平板连是没有这个问题的
作者: aiyuaichou    时间: 2014-1-10 11:21
aiyuaichou 发表于 2014-1-10 11:16
感谢管理员给我的解决方案,确实有效,并且比我的方法安全
麻烦管理员帮看看我第二个问题,能否帮解决或 ...

而且还有个问题是,当把android端demo溶入项目其他代码中后,发生的问题还有:首次登陆anychat进去很通畅,但退出后,再次登录就会很慢,基本就停在登陆页面,很少能登陆进去了。。。
作者: admin    时间: 2014-1-10 11:29
您好,您在将demo程序溶入自己的代码中时,对哪些代码有删减?
作者: aiyuaichou    时间: 2014-1-10 14:23
admin 发表于 2014-1-10 11:29
您好,您在将demo程序溶入自己的代码中时,对哪些代码有删减?

基本无任何删减,只是通过一个按钮点击,进入到demo的登陆页面,但我把登陆页面的所有页面展示部分都删除了,就一空白页面,通过参数传递方式把用户名传递过去作为demo的登陆名,其他地方有删除的,就是屏蔽了登陆后第二页的功能列表展示部分,相当通过登录后,就直接进room了
作者: admin    时间: 2014-1-10 14:26
您好,很可能您的修改破坏了标准的工作流程:http://www.anychat.cn/faq/index. ... =193&artlang=zh,建议您对比一下正常、不正常的log,看是否能发现一些疑点。




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3