设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 15101|回复: 31
打印 上一主题 下一主题

anychat 只进行语言聊天的 问题

[复制链接]

4

主题

27

帖子

74

积分

注册会员

Rank: 2

积分
74
跳转到指定楼层
楼主
发表于 2016-11-11 10:06:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
现在我想要做一个音频聊天的功能,两端接通后,有时听到的语音有时听不到语音。这什么情况呢?下面是语音聊天的界面代码。


package com.bairuitech.callcenter;

import com.bairuitech.anychat.AnyChatBaseEvent;
import com.bairuitech.anychat.AnyChatCoreSDK;
import com.bairuitech.anychat.AnyChatDefine;
import com.bairuitech.anychat.AnyChatVideoCallEvent;
import com.yunmai.entcc.R;
import com.yunmai.imdemo.controller.voicechat.VoiceChatController;
import com.yunmai.imdemo.controller.voicechat.VoiceChatListener;
import com.yunmai.imdemo.controller.webrtc.RingtoneController;
import com.yunmai.imdemo.ui.ChatActivity;
import com.yunmai.imdemo.util.HandlerUnit;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/**
* 单人语音聊天
* @author Administrator
*
*/
public class SingleVoiceChatActivity extends Activity implements OnClickListener, AnyChatBaseEvent, AnyChatVideoCallEvent,VoiceChatListener{
        private TextView voiceChatInfo;
        private Button handUp;
        public AnyChatCoreSDK anychat;
        int userID;// 对方视频id
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_single_voice_chat);
                VoiceChatController.listener = this;
                initView();
                setListener();
                Intent intent = getIntent();
                userID = intent.getIntExtra("UserID", -1);
                InitialSDK();
                RingtoneController.stopRingTone();
        }

        private void InitialSDK() {
                anychat = new AnyChatCoreSDK();
                anychat.SetBaseEvent(this);
                // 启动AnyChat传感器监听
                anychat.mSensorHelper.InitSensor(this);
                // 初始化Camera上下文句柄
                AnyChatCoreSDK.mCameraHelper.SetContext(this);
                anychat.SetVideoCallEvent(this);
        }

        private void initView() {
                voiceChatInfo = (TextView) findViewById(R.id.voice_chat_info);
                handUp = (Button) findViewById(R.id.btn_handup);
                voiceChatInfo.setText("与 "+VoiceChatController.instance.getUserName()
                                + "("
                                + VoiceChatController.instance.getUser().substring(0,
                                                VoiceChatController.instance.getUser().indexOf("#"))
                                + ")"+" 语音中");
        }
       
        private void setListener() {
                handUp.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
                switch (v.getId()) {
                case R.id.btn_handup:
                        anychat.VideoCallControl(AnyChatDefine.BRAC_VIDEOCALL_EVENT_FINISH,userID, 0, 0, 0,"");
                        if (HandlerUnit.getMessageHandler() != null) {
                                HandlerUnit
                                                .getMessageHandler()
                                                .obtainMessage(
                                                                ChatActivity.HANDLER_REFRESH_IMMSGLIST)
                                                .sendToTarget();
                        }
                        onVoiceChatRefuse();
                        break;
                }
        }
       
        @Override
        protected void onResume() {
                super.onResume();
                reflashVoice();
        }
       
        @Override
        protected void onPause() {
                super.onPause();
                anychat.UserSpeakControl(-1, 0);
                anychat.UserSpeakControl(userID, 0);
        }
       
        @Override
        protected void onRestart() {
                super.onRestart();
                reflashVoice();
        }

        private void reflashVoice() {
                anychat.UserSpeakControl(userID, 1);
                anychat.UserSpeakControl(-1, 1);
        }

        private void finishActivits() {
                if(VoiceChatConnectingActivity.voiceChatConnectingActivity != null){
                        VoiceChatConnectingActivity.voiceChatConnectingActivity.finish();
                }
                this.finish();
        }

        @Override
        public void OnAnyChatConnectMessage(boolean bSuccess) {
               
        }

        @Override
        public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode) {
               
        }

        @Override
        public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) {
               
        }

        @Override
        public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId) {
               
        }

        @Override
        public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) {
               
        }

        @Override
        public void OnAnyChatLinkCloseMessage(int dwErrorCode) {
                anychat.UserSpeakControl(userID, 0);
                anychat.UserSpeakControl(-1, 0);
                Toast.makeText(SingleVoiceChatActivity.this, "视频连接中断,请确定网络是否正常。", 1).show();
        }

        @Override
        public void onVoiceChatAsk() {
               
        }

        @Override
        public void onVoiceChatAgree() {
               
        }

        @Override
        public void onVoiceChatRefuse() {
                if (HandlerUnit.getMessageHandler() != null) {
                        HandlerUnit.getMessageHandler()
                                        .obtainMessage(ChatActivity.HANDLER_REFRESH_IMMSGLIST)
                                        .sendToTarget();
                }
                finishActivits();
        }

        @Override
        public void onTimeOut() {
               
        }

        @Override
        public void onVersionLow() {
                // TODO Auto-generated method stub
               
        }
       
        @Override
        public void OnAnyChatVideoCallEvent(int dwEventType, int dwUserId,
                        int dwErrorCode, int dwFlags, int dwParam, String userStr) {
                Log.w("VideoActivity", dwEventType + "");
                switch (dwEventType) {
                case AnyChatDefine.BRAC_VIDEOCALL_EVENT_FINISH:
                        Log.e("BRAC_VIDEOCALL_EVENT_FINISH", dwEventType + "");
                        onVoiceChatRefuse();
                        anychat.VideoCallControl(AnyChatDefine.BRAC_VIDEOCALL_EVENT_FINISH,dwUserId, 0, 0, 0,"");
                        break;
                }
        }
       
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                if(keyCode == KeyEvent.KEYCODE_BACK){
                        onVoiceChatRefuse();
                        anychat.VideoCallControl(AnyChatDefine.BRAC_VIDEOCALL_EVENT_FINISH,userID, 0, 0, 0,"");
                }
                return super.onKeyDown(keyCode, event);
        }
       
        @Override
        protected void onDestroy() {
                super.onDestroy();
                if(anychat != null){
                        anychat.Logout();
                        anychat.Release();
                        anychat.mSensorHelper.DestroySensor();
                }
        }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

32#
发表于 2016-11-14 15:50:56 | 只看该作者
Luyh 发表于 2016-11-14 14:49
protected void onDestroy() {
                super.onDestroy();
                if(anychat != null){

通过看日志, anychat.UserSpeakControl(-1, 0);和anychat.UserSpeakControl(userID, 0);都没执行到;
activity跳转到另一个activity,其会执行onPause()-->onStop(),只有当程序调用了finish()或者意外终止时才会调用onDestroy();
你可以在OnAnyChatUserAtRoomMessage判断对方是退出时,关闭它的音视频;在onPause()中关闭自己、对方的音频和视频。
回复 支持 反对

使用道具 举报

4

主题

27

帖子

74

积分

注册会员

Rank: 2

积分
74
31#
 楼主| 发表于 2016-11-14 14:49:39 | 只看该作者
protected void onDestroy() {
                super.onDestroy();
                if(anychat != null){
                        anychat.UserSpeakControl(-1, 0);
                        anychat.UserSpeakControl(userID, 0);
                        anychat.Logout();
                        anychat.Release();
                        anychat.mSensorHelper.DestroySensor();
                }
        }
回复 支持 反对

使用道具 举报

4

主题

27

帖子

74

积分

注册会员

Rank: 2

积分
74
30#
 楼主| 发表于 2016-11-14 14:48:46 | 只看该作者
我修改下,还是不行啊, 还是第一次听得到,下面就听不到了。
回复 支持 反对

使用道具 举报

29#
发表于 2016-11-14 14:44:50 | 只看该作者
UserSpeakControl(userid, boolean);    //打开或者关闭音频
UserCameraControl(userid, boolean);  //打开或者关闭视频
回复 支持 反对

使用道具 举报

28#
发表于 2016-11-14 14:33:32 | 只看该作者
Luyh 发表于 2016-11-14 11:12
已近发过去了,麻烦帮我排查下,谢谢

您好,关于语音问题,有时候可以听到,有时候不可以听到;
我测试发现第一次语音双方都OK,第二次就不正常;原因应该是退出房间前你没有关闭本地麦克风、对方的音频,不论语音还是视频,都需要在leaveroom之前都将本地和对方的音频和视频关闭。
请修改一下代码。
回复 支持 反对

使用道具 举报

4

主题

27

帖子

74

积分

注册会员

Rank: 2

积分
74
27#
 楼主| 发表于 2016-11-14 11:12:03 | 只看该作者
已近发过去了,麻烦帮我排查下,谢谢
回复 支持 反对

使用道具 举报

26#
发表于 2016-11-14 10:47:36 | 只看该作者
Luyh 发表于 2016-11-14 10:44
好的。怎么发给你呢

邮箱地址:shaogq@bairuitech.com
回复 支持 反对

使用道具 举报

4

主题

27

帖子

74

积分

注册会员

Rank: 2

积分
74
25#
 楼主| 发表于 2016-11-14 10:44:48 | 只看该作者
好的。怎么发给你呢
回复 支持 反对

使用道具 举报

24#
发表于 2016-11-14 10:32:49 | 只看该作者
Luyh 发表于 2016-11-14 09:47
那我这个到底是什么问题。搞得都郁闷死了,

可以将整个程序发过来不,我们帮你调试!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-11-23 03:31 , Processed in 0.427619 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表