Luyh 发表于 2016-11-30 17:22:18

anychat 视频会议卡顿问题


1.使用anychat进行视频会议的时候很卡(三四个人或者五六个),而且有的时候网络正常还经常回调用
   @Override
    public void OnAnyChatLinkCloseMessage(int dwErrorCode) {
      Toast.makeText(MultiVideoChatActivty.this,"网络断开连接",1).show();
    }

这个方法。

佰锐科技-梁国桦 发表于 2016-11-30 18:47:14

您好,请求的视频数增加的话,所占的带宽也会增加不少,可能会更容易引起掉线

Luyh 发表于 2016-12-1 09:18:53

要是这样的话,就不能增加视频人说楼?

Luyh 发表于 2016-12-1 09:19:45

这是我多人视频的代码,麻烦帮我看下是不是哪里有什么问题。谢谢

package com.bairuitech.callcenter;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.*;
import android.widget.*;
import com.bairuitech.anychat.*;
import com.bairuitech.util.ConfigEntity;
import com.bairuitech.util.ConfigService;
import com.yunmai.entcc.R;
import com.yunmai.imdemo.controller.webrtc.RingtoneController;
import com.yunmai.imdemo.controller.webrtc.VideoChatController;

import java.io.UnsupportedEncodingException;
import java.util.*;

/**
* Created by kenny on 2016/03/21.
*/
public class MultiVideoChatActivty extends Activity implements AnyChatBaseEvent,AnyChatObjectEvent, AnyChatVideoCallEvent,AnyChatTransDataEvent {

    public ConfigEntity configEntity;                                        //参数配置类
    public ProgressDialog waitingpd;                                        //进度提示

    private ImageView mImgBtnReturn;                                   // 标题返回
    private TextView mTitleName;                                                  // 标题名字
    private ImageButton mImgSwichVideo;                  //切换摄像头
    private SurfaceView mSurfaceMeeting1;
    private SurfaceView mSurfaceMeeting2;
    private SurfaceView mSurfaceMeeting3;
    private SurfaceView mSurfaceMeeting4;
    private SurfaceView mSurfaceMeeting5;
    private SurfaceView mSurfaceMeeting6;

    private TextView mTvMeeting1;
    private TextView mTvMeeting2;
    private TextView mTvMeeting3;
    private TextView mTvMeeting4;
    private TextView mTvMeeting5;
    private TextView mTvMeeting6;

    private Button mBtnSpeak;
    private Button mBtnCamera;
    private Handler mHandler;
    public static final int MSG_CHECKAV = 1;
    public static final int MSG_TIMEUPDATE = 2;
    public static final int PROGRESSBAR_HEIGHT = 5;
        protected static final String tag = "MeetingRoomActivity";
    boolean bSelfVideoOpened = false;
    boolean bOtherVideoOpened1 = false;
    boolean bOtherVideoOpened2 = false;
    boolean bOtherVideoOpened3 = false;
    boolean bOtherVideoOpened4 = false;
    boolean bOtherVideoOpened5 = false;
    int videoIndex1 = 0;
    int videoIndex2 = 0;
    int videoIndex3 = 0;
    int videoIndex4 = 0;
    int videoIndex5 = 0;
    int[] dwTargetUserId = {0,0,0,0,0};

    // 功能菜单图标
    private int[] arrFuncIcons = { R.drawable.stronghold_01, R.drawable.stronghold_02, R.drawable.stronghold_03, R.drawable.stronghold_04};

    private AnyChatCoreSDK anychat;                                                       //sdk对象
    private List<Integer> mobject =new ArrayList<Integer>(); //装载营业厅ID
    private ArrayList<HashMap<String, Object>> mArrItem;       //装载适配器数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //自定义标题栏
      RingtoneController.stopRingTone();
      requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
      setContentView(R.layout.activity_meeting_room);
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.meet_room_title_bar);

      //视频参数配置
      ApplyVideoConfig();
      //初始化sdk
      InitSDK();
      //初始化布局
      InitLayout();

      //实时音视频
      updateAV();
    }

    private void InitSDK() {
      //初始化sdk
      if (anychat == null) {
            anychat = AnyChatCoreSDK.getInstance(this);
      }
      anychat.mSensorHelper.InitSensor(this);
      AnyChatCoreSDK.mCameraHelper.SetContext(this);

      anychat.SetBaseEvent(this);//基本登陆事件接口
      anychat.SetObjectEvent(this);//排队事件接口;
      anychat.SetTransDataEvent(this);
    }

    boolean isOpenCamera = false;
    private void InitLayout() {
      waitingpd = new ProgressDialog(MultiVideoChatActivty.this);
      mSurfaceMeeting1 = (SurfaceView) this.findViewById(R.id.surface_meeting1);
      mSurfaceMeeting2 = (SurfaceView) this.findViewById(R.id.surface_meeting2);
      mSurfaceMeeting3 = (SurfaceView) this.findViewById(R.id.surface_meeting3);
      mSurfaceMeeting4 = (SurfaceView) this.findViewById(R.id.surface_meeting4);
      mSurfaceMeeting5 = (SurfaceView) this.findViewById(R.id.surface_meeting5);
      mSurfaceMeeting6 = (SurfaceView) this.findViewById(R.id.surface_meeting6);

      mTvMeeting1 = (TextView) this.findViewById(R.id.tv_meeting1);
      mTvMeeting2 = (TextView) this.findViewById(R.id.tv_meeting2);
      mTvMeeting3 = (TextView) this.findViewById(R.id.tv_meeting3);
      mTvMeeting4 = (TextView) this.findViewById(R.id.tv_meeting4);
      mTvMeeting5 = (TextView) this.findViewById(R.id.tv_meeting5);
      mTvMeeting6 = (TextView) this.findViewById(R.id.tv_meeting6);

      mBtnSpeak = (Button) this.findViewById(R.id.btn_speak);
//      mBtnSpeak.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                if(isSpeaking == false) {
//                  isSpeaking = true;
//                  String mRequestMic = getIntent().getIntExtra("userid", -1)+"|1";
//                  AnyChatCoreSDK.getInstance(MultiVideoChatActivty.this).TransBuffer(0,mRequestMic.getBytes(),mRequestMic.length());
//                  Log.w(tag, "mRequestMic:----------->"+mRequestMic);
//                }else{
//                  isSpeaking = false;
//                  AnyChatCoreSDK.getInstance(MultiVideoChatActivty.this).UserSpeakControl(-1, 0);
//
//                  String mReleaseMic = getIntent().getIntExtra("userid", -1)+"|0";
//                  AnyChatCoreSDK.getInstance(MultiVideoChatActivty.this).TransBuffer(0,mReleaseMic.getBytes(),mReleaseMic.length());
//                  Log.w(tag, "mRequestMic:----------->"+mReleaseMic);
//                }
//            }
//      });


      mBtnCamera = (Button) this.findViewById(R.id.btn_camera);
//      mBtnCamera.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                if(isOpenCamera == false) {
//                  mSurfaceMeeting1.setVisibility(View.INVISIBLE);
//                  anychat.UserCameraControl(-1, 0);
//                  anychat.UserSpeakControl(-1, 0);
//
//                  bSelfVideoOpened = true;
//                  mBtnCamera.setText("打开摄像头");
//                  isOpenCamera = true;
//                }else {
//                  mSurfaceMeeting1.setVisibility(View.VISIBLE);
//                  anychat.UserCameraControl(-1, 1);
//                  anychat.UserSpeakControl(-1, 1);
//
//                  bSelfVideoOpened = false;
//                  mBtnCamera.setText("关闭摄像头");
//
//                  isOpenCamera = false;
//                }
//            }
//      });

      mTitleName = (TextView) this.findViewById(R.id.titleName);
      mTitleName.setText(getIntent().getStringExtra("groupname"));
      mImgBtnReturn = (ImageView) this.findViewById(R.id.returnImgBtn);
      mImgBtnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    VideoChatController.instance.endVideoChat();
                finishActivitys();
            }
      });

      mImgSwichVideo = (ImageButton) this.findViewById(R.id.ImgSwichVideo);
//      mImgSwichVideo.setVisibility(View.VISIBLE);
//      mImgSwichVideo.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                AnyChatCoreSDK.mCameraHelper.SwitchCamera();
//            }
//      });

      mTvMeeting1.setText(AnyChatCoreSDK.getInstance(this).GetUserName(getIntent().getIntExtra("userid", -1)));
      // 视频如果是采用java采集
      if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
            mSurfaceMeeting1.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);
            Log.i("ANYCHAT", "VIDEOCAPTRUE---" + "JAVA");
      }

      if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
            if (AnyChatCoreSDK.mCameraHelper.GetCameraNumber() > 1) {
                AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_FRONT);
            }
      } else {
            String[] strVideoCaptures = anychat.EnumVideoCapture();
            if (strVideoCaptures != null && strVideoCaptures.length > 1) {
                for (int i = 0; i < strVideoCaptures.length; i++) {
                  String strDevices = strVideoCaptures;
                  if (strDevices.indexOf("Front") >= 0) {
                        anychat.SelectVideoCapture(strDevices);
                        break;
                  }
                }
            }
      }

      showIndeterminate("加载视频人员...");
      String roomId = VideoChatController.instance.getRoomId();
      if(roomId != null || !"".equals(roomId)){
              AnyChatCoreSDK.getInstance(this).EnterRoom(Integer.valueOf(roomId), "");
      }
    }

    // 根据配置文件配置视频参数
    private void ApplyVideoConfig() {
      ConfigEntity configEntity = ConfigService.LoadConfig(this);
      // 自定义视频参数配置
      if (configEntity.configMode == 1) {
            // 设置本地视频编码的码率(如果码率为0,则表示使用质量优先模式)
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL,configEntity.videoBitrate);
            if (configEntity.videoBitrate == 0) {
                // 设置本地视频编码的质量
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL,configEntity.videoQuality);
            }
            // 设置本地视频编码的帧率
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL,configEntity.videoFps);
            // 设置本地视频编码的关键帧间隔
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL,configEntity.videoFps * 4);
            // 设置本地视频采集分辨率
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL,configEntity.resolution_width);
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_HEIGHTCTRL,configEntity.resolution_height);
            // 设置视频编码预设参数(值越大,编码质量越高,占用CPU资源也会越高)
            AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL,configEntity.videoPreset);
      }
      // 让视频参数生效
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM,configEntity.configMode);
      // P2P设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC,configEntity.enableP2P);
      // 本地视频Overlay模式设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY,configEntity.videoOverlay);
      // 回音消除设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL,configEntity.enableAEC);
      // 平台硬件编码设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC,configEntity.useHWCodec);
      // 视频旋转模式设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL,configEntity.videorotatemode);
      // 本地视频采集偏色修正设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA,configEntity.fixcolordeviation);
      // 视频GPU渲染设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_GPUDIRECTRENDER,configEntity.videoShowGPURender);
      // 本地视频自动旋转设置
      AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION,configEntity.videoAutoRotation);
    }

    private void CheckVideoStatus() {
      if (!bOtherVideoOpened1) {
            if (dwTargetUserId != 0) {
                if (anychat.GetCameraState(dwTargetUserId) == 2 && anychat.GetUserVideoWidth(dwTargetUserId) != 0) {
                  SurfaceHolder holder = mSurfaceMeeting2.getHolder();

                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        holder.setFormat(PixelFormat.RGB_565);
                        holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                  }
                  Surface s = holder.getSurface();
                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        anychat.mVideoHelper.SetVideoUser(videoIndex1, dwTargetUserId);
                  } else
                        anychat.SetVideoPos(dwTargetUserId, s, 0, 0, 0, 0);
                  bOtherVideoOpened1 = true;
                }
            }
      }

      if (!bOtherVideoOpened2) {
            if (dwTargetUserId != 0) {
                if (anychat.GetCameraState(dwTargetUserId) == 2 && anychat.GetUserVideoWidth(dwTargetUserId) != 0) {
                  SurfaceHolder holder = mSurfaceMeeting3.getHolder();

                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        holder.setFormat(PixelFormat.RGB_565);
                        holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                  }
                  Surface s = holder.getSurface();
                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        anychat.mVideoHelper.SetVideoUser(videoIndex2, dwTargetUserId);
                  } else
                        anychat.SetVideoPos(dwTargetUserId, s, 0, 0, 0, 0);
                  bOtherVideoOpened2 = true;
                }
            }
      }

      if (!bOtherVideoOpened3) {
            if (dwTargetUserId != 0) {
                if (anychat.GetCameraState(dwTargetUserId) == 2 && anychat.GetUserVideoWidth(dwTargetUserId) != 0) {
                  SurfaceHolder holder = mSurfaceMeeting4.getHolder();

                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        holder.setFormat(PixelFormat.RGB_565);
                        holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                  }
                  Surface s = holder.getSurface();
                  if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                        anychat.mVideoHelper.SetVideoUser(videoIndex3, dwTargetUserId);
                  } else
                        anychat.SetVideoPos(dwTargetUserId, s, 0, 0, 0, 0);
                  bOtherVideoOpened3 = true;
                }
            }
      }
      
      if (!bOtherVideoOpened4) {
              if (dwTargetUserId != 0) {
                      if (anychat.GetCameraState(dwTargetUserId) == 2 && anychat.GetUserVideoWidth(dwTargetUserId) != 0) {
                              SurfaceHolder holder = mSurfaceMeeting5.getHolder();
                             
                              if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                      holder.setFormat(PixelFormat.RGB_565);
                                      holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                              }
                              Surface s = holder.getSurface();
                              if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                      anychat.mVideoHelper.SetVideoUser(videoIndex4, dwTargetUserId);
                              } else
                                      anychat.SetVideoPos(dwTargetUserId, s, 0, 0, 0, 0);
                              bOtherVideoOpened4 = true;
                      }
              }
      }
      if (!bOtherVideoOpened5) {
              if (dwTargetUserId != 0) {
                      if (anychat.GetCameraState(dwTargetUserId) == 2 && anychat.GetUserVideoWidth(dwTargetUserId) != 0) {
                              SurfaceHolder holder = mSurfaceMeeting5.getHolder();
                             
                              if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                      holder.setFormat(PixelFormat.RGB_565);
                                      holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                              }
                              Surface s = holder.getSurface();
                              if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                      anychat.mVideoHelper.SetVideoUser(videoIndex5, dwTargetUserId);
                              } else
                                      anychat.SetVideoPos(dwTargetUserId, s, 0, 0, 0, 0);
                              bOtherVideoOpened5 = true;
                      }
              }
      }

      if (!bSelfVideoOpened) {
            if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
                SurfaceHolder holder = mSurfaceMeeting1.getHolder();

                if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                  holder.setFormat(PixelFormat.RGB_565);
                  holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                }

                Surface s = holder.getSurface();
                anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
                bSelfVideoOpened = true;
            }
      }
    }

    private void updateAV() {
      mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                  case MSG_CHECKAV:
                        //实时视频刷新
                        CheckVideoStatus();
                        //实时音频数据
//                        updateVolume();
                        break;
                  case MSG_TIMEUPDATE:
//                        mTxtTime.setText(BaseMethod
//                              .getTimeShowString(videocallSeconds++));
                        break;
                }

            }
      };
      initTimerCheckAv();
      initTimerShowTime();
    }

    private Timer mTimerCheckAv;
    private TimerTask mTimerTask;
    private void initTimerCheckAv() {
      if (mTimerCheckAv == null) {
            mTimerCheckAv = new Timer();
      }
      mTimerTask = new TimerTask() {
            @Override
            public void run() {
                mHandler.sendEmptyMessage(MSG_CHECKAV);
            }
      };
      mTimerCheckAv.schedule(mTimerTask, 1000, 100);
    }

    private Timer mTimerShowVideoTime;
    private void initTimerShowTime() {
      if (mTimerShowVideoTime == null) {
            mTimerShowVideoTime = new Timer();
      }
      mTimerTask = new TimerTask() {
            @Override
            public void run() {
                mHandler.sendEmptyMessage(MSG_TIMEUPDATE);
            }
      };
      mTimerShowVideoTime.schedule(mTimerTask, 100, 1000);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
      if(keyCode == KeyEvent.KEYCODE_BACK){
              VideoChatController.instance.endVideoChat();
              finishActivitys();
      }
      return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onRestart() {
      if (anychat == null){
            anychat = new AnyChatCoreSDK();
      }
      anychat.SetBaseEvent(this);
      anychat.SetVideoCallEvent(this);
      anychat.SetObjectEvent(this);
      anychat.SetTransDataEvent(this);
      super.onRestart();

//      if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
//            videoIndex1 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting2.getHolder());
//            anychat.mVideoHelper.SetVideoUser(videoIndex1, dwTargetUserId);
//      }
    }

    @Override
    public void OnAnyChatConnectMessage(boolean bSuccess) {

    }

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

    }
    @Override
    public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) {
      waitingpd.dismiss();
      if (dwErrorCode == 0) {
            mSurfaceMeeting1.setVisibility(View.VISIBLE);
            anychat.UserCameraControl(-1, 1);
            anychat.UserSpeakControl(-1, 1);
            bSelfVideoOpened = false;
      }

      int[] onlineUserCount = AnyChatCoreSDK.getInstance(this).GetOnlineUser();
      if (onlineUserCount.length == 0) {
      } else {
            for (int i=0;i<onlineUserCount.length;i++) {
                dwTargetUserId = onlineUserCount;
                anychat.UserCameraControl(onlineUserCount, 1);
                anychat.UserSpeakControl(onlineUserCount, 1);
            }
      }
      InitVideo();
    }

    private void InitVideo() {
      // 视频显示如果是采用java采集,SurfacecallBack
      if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
            if (dwTargetUserId != 0) {
                mSurfaceMeeting2.setVisibility(View.VISIBLE);
                videoIndex1 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting2.getHolder());
                anychat.mVideoHelper.SetVideoUser(videoIndex1, dwTargetUserId);
                mTvMeeting2.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwTargetUserId));
            }
            if (dwTargetUserId != 0) {
                mSurfaceMeeting3.setVisibility(View.VISIBLE);
                videoIndex2 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting3.getHolder());
                anychat.mVideoHelper.SetVideoUser(videoIndex2, dwTargetUserId);
                mTvMeeting3.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwTargetUserId));
            }
            if (dwTargetUserId != 0) {
                mSurfaceMeeting4.setVisibility(View.VISIBLE);
                videoIndex3 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting4.getHolder());
                anychat.mVideoHelper.SetVideoUser(videoIndex3, dwTargetUserId);
                mTvMeeting4.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwTargetUserId));
            }
            if (dwTargetUserId != 0) {
                    mSurfaceMeeting5.setVisibility(View.VISIBLE);
                    videoIndex4 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting5.getHolder());
                    anychat.mVideoHelper.SetVideoUser(videoIndex4, dwTargetUserId);
                    mTvMeeting5.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwTargetUserId));
            }
            if (dwTargetUserId != 0) {
                    mSurfaceMeeting6.setVisibility(View.VISIBLE);
                    videoIndex5 = anychat.mVideoHelper.bindVideo(mSurfaceMeeting6.getHolder());
                    anychat.mVideoHelper.SetVideoUser(videoIndex5, dwTargetUserId);
                    mTvMeeting6.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwTargetUserId));
            }
            Log.i("ANYCHAT", "VIDEOSHOW---" + "JAVA");
      }
    }

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

    }

    @Override
    public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) {
      if (bEnter) {
            anychat.UserCameraControl(dwUserId, 1);
            anychat.UserSpeakControl(dwUserId, 1);
            if (dwTargetUserId == 0) {
                dwTargetUserId = dwUserId;
                mTvMeeting2.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwUserId));
            } else if (dwTargetUserId == 0) {
                dwTargetUserId = dwUserId;
                mTvMeeting3.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwUserId));
            } else if (dwTargetUserId == 0) {
                dwTargetUserId = dwUserId;
                mTvMeeting4.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwUserId));
            }else if(dwTargetUserId == 0){
                    dwTargetUserId = dwUserId;
                    mTvMeeting5.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwUserId));
            }else if(dwTargetUserId == 0){
                    dwTargetUserId = dwUserId;
                    mTvMeeting6.setText(AnyChatCoreSDK.getInstance(this).GetUserName(dwUserId));
            }
            InitVideo();
      } else {
            anychat.UserCameraControl(dwUserId, 0);
            anychat.UserSpeakControl(dwUserId, 0);
            int k = -1;
            for (int i=0;i<5;i++) {
                if (dwTargetUserId == dwUserId) {
                  k = i;
                }
            }
            dwTargetUserId = 0;

            if (k==0) {
                mSurfaceMeeting2.setVisibility(View.INVISIBLE);
                mTvMeeting2.setText("远程视频");
            } else if (k==1) {
                mSurfaceMeeting3.setVisibility(View.INVISIBLE);
                mTvMeeting3.setText("远程视频");
            } else if (k==2) {
                mSurfaceMeeting4.setVisibility(View.INVISIBLE);
                mTvMeeting4.setText("远程视频");
            }else if(k== 3){
                    mSurfaceMeeting5.setVisibility(View.INVISIBLE);
                    mTvMeeting5.setText("远程视频");
            }else if(k == 4){
                    mSurfaceMeeting6.setVisibility(View.INVISIBLE);
                    mTvMeeting6.setText("远程视频");
            }
      }
    }

    // 网络断开
    @Override
    public void OnAnyChatLinkCloseMessage(int dwErrorCode) {
      Toast.makeText(MultiVideoChatActivty.this,"网络断开连接",1).show();
//      anychat.Logout();
//      Intent intent = new Intent(MultiVideoChatActivty.this,MultiVideoChatActivty.class);
//      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//      startActivity(intent);
    }

    @Override
    public void OnAnyChatObjectEvent(int dwObjectType, int dwObjectId,
                                     int dwEventType, int dwParam1, int dwParam2, int dwParam3,
                                     int dwParam4, String strParam) {
    }

    public void showIndeterminate(String msg){
      waitingpd.setMessage(msg);
      waitingpd.setCancelable(true);
      waitingpd.setProgress(ProgressDialog.STYLE_HORIZONTAL);
      waitingpd.setIndeterminate(true);
      waitingpd.show();
    }

    @Override
    public void OnAnyChatVideoCallEvent(int dwEventType, int dwUserId, int dwErrorCode, int dwFlags, int dwParam, String userStr) {

    }

    @Override
    public void OnAnyChatTransFile(int dwUserid, String FileName, String TempFilePath, int dwFileLength, int wParam, int lParam, int dwTaskId) {

    }

    boolean isSpeaking = false;
    @Override
    public void OnAnyChatTransBuffer(int dwUserid, byte[] lpBuf, int dwLen) {
      try {
            //接受数据(windows下默认GBK)
            String srtReceMsg = new String(lpBuf,"GBK");
            if ("0|0".equals(srtReceMsg)) {
                mBtnSpeak.setText("开始发言");
                mBtnSpeak.setEnabled(true);
            } else {
                int buf = srtReceMsg.lastIndexOf("|");
                String aa = srtReceMsg.substring(0, buf);
                String bb = srtReceMsg.substring(buf+1, buf+2);
                int userId = Integer.parseInt(aa);
                int micStatus = Integer.parseInt(bb);
                int selfUserId = getIntent().getIntExtra("userid", -1);
                if (micStatus == 1) {
                  if (userId == selfUserId) {
                        AnyChatCoreSDK.getInstance(this).UserSpeakControl(-1, 1);
                        mBtnSpeak.setText("结束发言");
                        mBtnSpeak.setEnabled(true);
                  } else {
                        isSpeaking = false;
                        mBtnSpeak.setText("禁止发言");
                        mBtnSpeak.setEnabled(false);
                        AnyChatCoreSDK.getInstance(this).UserSpeakControl(userId, 1);

                        if (dwTargetUserId == userId) {
                            mTvMeeting2.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId)+"正在发言中");
                        } else if (dwTargetUserId == userId) {
                            mTvMeeting3.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId)+"正在发言中");
                        } else if (dwTargetUserId == userId) {
                            mTvMeeting4.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId)+"正在发言中");
                        } else if(dwTargetUserId == userId){
                                mTvMeeting5.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId)+"正在发言中");
                        }else if(dwTargetUserId == userId){
                                mTvMeeting6.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId)+"正在发言中");
                        }
                  }
                } else {
                  if(userId != selfUserId && userId != 0){
                        AnyChatCoreSDK.getInstance(this).UserSpeakControl(userId, 1);

                        if (dwTargetUserId == userId) {
                            mTvMeeting2.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId));
                        } else if (dwTargetUserId == userId) {
                            mTvMeeting3.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId));
                        } else if (dwTargetUserId == userId) {
                            mTvMeeting4.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId));
                        } else if (dwTargetUserId == userId){
                               mTvMeeting5.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId));
                        } else if (dwTargetUserId == userId){
                               mTvMeeting6.setText(AnyChatCoreSDK.getInstance(this).GetUserName(userId));
                        }
                  }
                  mBtnSpeak.setText("开始发言");
                  mBtnSpeak.setEnabled(true);
                }
            }
      } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
      }
    }

    @Override
    public void OnAnyChatTransBufferEx(int dwUserid, byte[] lpBuf, int dwLen, int wparam, int lparam, int taskid) {

    }

    @Override
    public void OnAnyChatSDKFilterData(byte[] lpBuf, int dwLen) {

    }
   
    @Override
    protected void onDestroy() {
            if(anychat != null){
                    anychat.LeaveRoom(-1);
                    anychat.Logout();
                        anychat.Release();
            }
            VideoChatController.instance.clearData();
            super.onDestroy();
    }

        private void finishActivitys() {
                if(MultiVideoSelectActivity.multiVideoSelectctivity != null){
                    MultiVideoSelectActivity.multiVideoSelectctivity.finish();
            }
            if(MultiVideoChatConnectingActivity.multiVideoChatConnectingActivity != null){
                    MultiVideoChatConnectingActivity.multiVideoChatConnectingActivity.finish();
            }
            this.finish();
        }
}

佰锐科技-刘洋 发表于 2016-12-1 09:39:47

你好 发一份日志上来分析一下 AnyChat生成的日志,在插件的安装目录(默认安装目录:C:\Program Files (x86)\BaiRuiTech\AnyChatWeb),文件名:BRAnyChatCore.log,如果找不到该日志,请卸载插件后重新安装到其他非系统盘看看

Luyh 发表于 2016-12-1 10:02:15

运行的是android平台

Luyh 发表于 2016-12-1 10:02:46

log 如下:

        ---------------------------AnyChat Platform Core SDK Client Log---------------------------
        Load libanychatcore.so success!(V6.0 Build Time:Feb 15 2016 13:16:39)
        Android OS SDK Version:17, Support ARMv7:2, Support Neon:4
        Load libmediautil_v7.so success!(V6.0 Build Time:Feb 15 2016 13:18:25)
        Load libmediashow.so success!(V6.0 Build Time:Feb 15 2016 13:18:10)
        Load libmediacore.so success!(V6.0 Build Time:Feb 15 2016 13:18:13)
        cpu:SMDK4x12(b0f2707d4d004c43) 1592.52 mips
        SM-C101(samsung) exynos4 smdk4x12 4.2.2
        Apply video parameter:320x240, bitrate:150kbps, quality:0, gop:40, fps:10, preset:3, codec:0
        Invoke        SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC=1)
        Invoke        SetSDKOption(BRAC_SO_AUDIO_ECHOCTRL,1)
        Invoke        SetSDKOption(BRAC_SO_CORESDK_USEHWCODEC=0)
        Invoke        Connect(121.40.44.164,8906)=0
        Invoke        Login(username:卢允辉)=0
        Create anychatdnsserver connect:121.40.44.164(8906)
        On pre-connection result, errorcode:0, anychatcoreserver, 121.40.44.164(8906, tcp:1)
        CheckClientSocketLink       Connect(ip=121.40.44.164,port=8906)
        Server version: V6.1(Build Time:2016-08-02 13:52:22, Server OS:Windows)
        Message        OnConnect(bSuccess:1, errorcode=0)
        Message        OnLoginSystem(userid=-4138,errorcode=0,username=卢允辉), msg deliver worked(0)
        Server running time: 49 days, 18 hours, 31 minutes, license mode:0
        Connection to streaming media server successfully!(udp delay:15ms)
        Apply video parameter:320x240, bitrate:150kbps, quality:0, gop:40, fps:10, preset:3, codec:0
        Invoke        SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC=1)
        Invoke        SetSDKOption(BRAC_SO_AUDIO_ECHOCTRL,1)
        Invoke        SetSDKOption(BRAC_SO_CORESDK_USEHWCODEC=0)
        Invoke        EnterRoom(roomid=316293)
        Message        OnEnterRoom(roomid=316293,errorcode=0,siteindex=1)
        Audio Playback Device Init(0, 1, 16000, 16), Default Playback Driver
        Message        OnReceiveOnlineUser(count=2,roomid=316293)
        APPLOG        Camera Preview size: 704 x 528
        APPLOG        Camera Preview size: 960 x 540
        APPLOG        Camera Preview size: 768 x 512
        APPLOG        Camera Preview size: 704 x 576
        APPLOG        Camera Preview size: 640 x 524
        APPLOG        Camera Preview size: 640 x 480
        APPLOG        Camera Preview size: 512 x 512
        APPLOG        Camera Preview size: 352 x 288
        APPLOG        Camera Preview size: 320 x 320
        APPLOG        Camera Preview size: 320 x 240
        APPLOG        Camera FrameRate: 15000 , 30000
        On Remote UserCameraControl(dwUserId:-4137, bOpen:1)
        Invoke        SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT=1)
        Invoke        SetInputVideoFormat(pixfmt:8, 320x240, 30fps, flags:0)
        video init finish:320x240, NV21, fps:30, codecid:1
        Invoke        UserCameraControl(userid=-1, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-1,bOpen=1)
        Invoke        UserCameraControl(userid=-4137, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-4137,bOpen=1)
        Invoke        SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT=1)
        Invoke        SetInputVideoFormat(pixfmt:8, 320x240, 30fps, flags:0)
        On Remote UserSpeakControl(dwUserId:-4137, bOpen:1)
        video init finish:320x240, NV21, fps:30, codecid:1
        Invoke        SetInputAudioFormat(1, 16000, 16, flags:0)
        Audio Init, error:0, device:-1, 1, 16000, 16, capmode:0
        Audio codec init, handle:3, 11, 1, 16000, 16, 15850
        Audio FX Status: VAD:1, NS:1, AGC:1, AEC:1
        video codec init:codec:1, 10fps, 320x240, bitrate:150kbps, quality:0, preset:3, gop:40, handle:4
        userid(-4137) video decode, codec:1, 320x240, delay:11ms
        Message        OnUserEnterRoom(userid=-4139,nickname=ZAndroid3,siteindex=2)
        Invoke        UserCameraControl(userid=-4139, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-4139,bOpen=1)
        On Remote UserCameraControl(dwUserId:-4139, bOpen:1)
        On Remote UserSpeakControl(dwUserId:-4139, bOpen:1)
        userid(-4139) audio decode, codec:11, 1 channel, 16000Hz
        userid(-4139) video decode, codec:1, 320x240, delay:13ms
        socket error, disconnected by peer!, bTcp(1) - userid(-1)
        OnSocketClose, index(2)-errorcode(0-11), flags:0x10041, bTcp(1),userid(-1), list:0

        Invoke        LeaveRoom(roomid=-1)        Elapse:186 ms
        Message        OnLinkClose(reason=0, dwErrorCode:0)
        CheckClientSocketLink       Connect(ip=121.40.44.164,port=8906)
        Server version: V6.1(Build Time:2016-08-02 13:52:22, Server OS:Windows)
        Message        OnConnect(bSuccess:1, errorcode=0)
        Message        OnLoginSystem(userid=-4140,errorcode=0,username=卢允辉), msg deliver worked(0)
        Load libmediautil_v7.so success!(V6.0 Build Time:Feb 15 2016 13:18:25)
        Load libmediashow.so success!(V6.0 Build Time:Feb 15 2016 13:18:10)
        Load libmediacore.so success!(V6.0 Build Time:Feb 15 2016 13:18:13)
        Server running time: 49 days, 18 hours, 31 minutes, license mode:0
        Connection to streaming media server successfully!(udp delay:65ms)
        Message        OnEnterRoom(roomid=316293,errorcode=0,siteindex=1)
        Audio Playback Device Init(0, 1, 16000, 16), Default Playback Driver
        Message        OnReceiveOnlineUser(count=3,roomid=316293)
        Invoke        UserCameraControl(userid=-1, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-1,bOpen=1)
        Invoke        UserCameraControl(userid=-4139, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-4139,bOpen=1)
        Invoke        UserCameraControl(userid=-4137, bOpen=1, stream=0)
        Invoke        UserSpeakControl(userid=-4137,bOpen=1)
        On Remote UserCameraControl(dwUserId:-4139, bOpen:1)
        Invoke        SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT=1)
        Invoke        SetInputVideoFormat(pixfmt:8, 320x240, 30fps, flags:0)
        video init finish:320x240, NV21, fps:30, codecid:1
        On Remote UserSpeakControl(dwUserId:-4139, bOpen:1)
        Invoke        SetInputAudioFormat(1, 16000, 16, flags:0)
        Audio Init, error:0, device:-1, 1, 16000, 16, capmode:0
        Audio codec init, handle:2, 11, 1, 16000, 16, 15850
        Audio FX Status: VAD:1, NS:1, AGC:1, AEC:1
        userid(-4139) audio decode, codec:11, 1 channel, 16000Hz
        On Remote UserCameraControl(dwUserId:-4137, bOpen:1)
        On Remote UserSpeakControl(dwUserId:-4137, bOpen:1)
        video codec init:codec:1, 10fps, 320x240, bitrate:150kbps, quality:0, preset:3, gop:40, handle:4
        userid(-4139) video decode, codec:1, 320x240, delay:156ms
        Invoke        LeaveRoom(roomid=-1)        Elapse:1106 ms
        Invoke        LogoutServer(userid=-4140)        Elapse:1219 ms
        Invoke        BRAC_Release        Elapse:194 ms

佰锐科技-刘洋 发表于 2016-12-1 10:50:52

Luyh 发表于 2016-12-1 10:02
log 如下:

        ---------------------------AnyChat Platform Core SDK Client ...

可以看到 本地网络断开 建议检测一下网络 ;从日志可以看出你的客户端和服务器都不是最新版本,请更新到最新版本

佰锐科技-刘洋 发表于 2016-12-1 11:11:10

Luyh 发表于 2016-12-1 10:02
log 如下:

        ---------------------------AnyChat Platform Core SDK Client ...

日志上看出quality:0   这个参数不建议设置为0建议设置为3

Luyh 发表于 2016-12-1 11:57:24

你说的是ConfieEntity 里面的 public int resolution_width = 0; 这个字段吗
页: [1] 2
查看完整版本: anychat 视频会议卡顿问题