设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求问有关多人视频的问题

[复制链接]

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
跳转到指定楼层
楼主
发表于 2013-9-17 11:21:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
按照Android Demo 中的VideoActivity类里面进行改造之前只一对一视频的原理添加房间其他人的的视频,但是木有效果,传入Surface后不显示视频的问题,求指点。另外求问最多支持多少人视频?

开始视频后设备很烫,设备配置2g内存4核,求问此程序开启后有木有测过耗电以及内存消耗问题呢?有木有相关参数。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
9#
发表于 2013-9-17 14:34:09 | 只看该作者
Liu. 发表于 2013-9-17 13:06
还有个问题 我想问问 p2p技术是不是会减少服务器压力,另外貌似4.3上面视频的时候回音很大。

您好。P2P会减小服务器端的带宽压力。可以升级到最新的4.8上面看下,最新版本的回音消除模块有所优化。
回复 支持 反对

使用道具 举报

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
8#
 楼主| 发表于 2013-9-17 13:06:14 | 只看该作者
还有个问题 我想问问 p2p技术是不是会减少服务器压力,另外貌似4.3上面视频的时候回音很大。
回复 支持 反对

使用道具 举报

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
7#
 楼主| 发表于 2013-9-17 13:05:35 | 只看该作者
已经好了 有个地方搞错咯...谢谢
回复 支持 反对

使用道具 举报

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
6#
 楼主| 发表于 2013-9-17 12:39:25 | 只看该作者
廖斌 发表于 2013-9-17 12:04
您好,代码我看过了。你看下视频数据的操作都有,绑定的地方也有。请问代码中两次其他人绑定的SetVideoPo ...

都打开了,不行哦..
回复 支持 反对

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
5#
发表于 2013-9-17 12:04:19 | 只看该作者
Liu. 发表于 2013-9-17 11:32
代码贴一下 帮我瞅瞅呗.. view以及绑定了

您好,代码我看过了。你看下视频数据的操作都有,绑定的地方也有。请问代码中两次其他人绑定的SetVideoPos都执行了吗?bOtherVideoOpened=true应该放到大括号之外的。另外userID、userID1都是正确的吧?对应的音视频都打开了?
回复 支持 反对

使用道具 举报

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
地板
 楼主| 发表于 2013-9-17 11:32:46 | 只看该作者
廖斌 发表于 2013-9-17 11:27
您好,1、房间中支持多人视频,人数没有限制,主要看带宽和设备性能。在原来的videoactivity基础上面是可以 ...

代码贴一下 帮我瞅瞅呗.. view以及绑定了

  1. public class VideoActivity extends Activity implements AnyChatBaseEvent, OnClickListener {
  2.         // private LinearLayout mainLayout;

  3.         private SurfaceView otherView,other2View;
  4.         ProgressBar OtherProgressBar;
  5.         ProgressBar MyProgressBar;
  6.         private ImageView mCameraSwitchImage; // 前后摄像头切换按钮

  7.         private SurfaceView myView;

  8.         public AnyChatCoreSDK anychat;
  9.         int userID;
  10.         int userID1;
  11.         boolean bOnPaused = false;

  12.         private boolean bSelfVideoOpened = false; // 本地视频是否已打开
  13.         private boolean bOtherVideoOpened = false; // 对方视频是否已打开
  14.         private boolean bVideoAreaLoaded = false; // 视频区域大小是否加载

  15.         private int dwLocalVideoWidth = 0;
  16.         private int dwLocalVideoHeight = 0;
  17.         private int dwRemoteVideoHeight = 0;
  18.         private int dwRemoteVideoWidth = 0;

  19.         private Timer mTimer = new Timer(true);
  20.         private TimerTask mTimerTask;
  21.         private Handler handler;

  22.         @Override
  23.         public void onCreate(Bundle savedInstanceState) {
  24.                 super.onCreate(savedInstanceState);
  25.                 Intent intent = getIntent();
  26.                 userID = Integer.parseInt(intent.getStringExtra("UserID"));
  27.                 userID1 = Integer.parseInt(intent.getStringExtra("UserID1"));
  28.                 System.out.println("userID" + userID +"  ---- userID1" + userID1);
  29.                 Log.i("LHH", "userID" + userID +"  ---- userID1" + userID1);
  30.                 InitialSDK();
  31.                 InitialLayout();

  32.                 mTimerTask = new TimerTask() {
  33.                         public void run() {
  34.                                 if(handler == null)
  35.                                         return;
  36.                                 Message mesasge = new Message();
  37.                                 handler.sendMessage(mesasge);
  38.                         }
  39.                 };

  40.                 mTimer.schedule(mTimerTask, 1000, 100);
  41.                 handler = new Handler() {
  42.                         @Override
  43.                         public void handleMessage(Message msg) {
  44.                                 CheckVideoStatus();
  45.                                 SetVolum();
  46.                                 super.handleMessage(msg);
  47.                         }
  48.                 };
  49.         }

  50.         private void SetVolum() {
  51.                 OtherProgressBar.setProgress(anychat.GetUserSpeakVolume(userID));
  52.                 MyProgressBar.setProgress(anychat.GetUserSpeakVolume(-1));
  53.         }

  54.         // 判断视频是否已打开
  55.         private void CheckVideoStatus() {
  56.                 if(bOnPaused)
  57.                         return;
  58.                 if (!bOtherVideoOpened) {
  59.                        
  60.                         if (anychat.GetCameraState(userID) == 2 && anychat.GetUserVideoWidth(userID) != 0) {
  61.                                 Log.i("LHH", "otherView");
  62.                                 SurfaceHolder holder = otherView.getHolder();
  63.                                 holder.setFormat(PixelFormat.RGB_565);
  64.                                 holder.setFixedSize(anychat.GetUserVideoWidth(userID),
  65.                                                 anychat.GetUserVideoHeight(userID));
  66.                                 Surface s = holder.getSurface();
  67.                                 Log.i("LHH", "otherView" +
  68.                                                 anychat.SetVideoPos(userID, s, 0, 0, 0, 0));;
  69.                                 bOtherVideoOpened = true;
  70.                         }
  71.                         if (anychat.GetCameraState(userID1) == 2 && anychat.GetUserVideoWidth(userID1) != 0) {
  72.                                 SurfaceHolder holder = other2View.getHolder();
  73.                                 holder.setFormat(PixelFormat.RGB_565);
  74.                                 holder.setFixedSize(anychat.GetUserVideoWidth(userID1),
  75.                                                 anychat.GetUserVideoHeight(userID1));
  76.                                 Surface s = holder.getSurface();

  77.                                 Log.i("LHH", "other2View" +
  78.                                                 anychat.SetVideoPos(userID1, s, 0, 0, 0, 0));;
  79.                                 bOtherVideoOpened = true;
  80.                         }
  81.                 }
  82.                 if (!bSelfVideoOpened) {
  83.                         if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
  84.                                 SurfaceHolder holder = myView.getHolder();
  85.                                 holder.setFormat(PixelFormat.RGB_565);
  86.                                 holder.setFixedSize(anychat.GetUserVideoWidth(-1),
  87.                                                 anychat.GetUserVideoHeight(-1));
  88.                                 Surface s = holder.getSurface();
  89.                                 anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
  90.                                 bSelfVideoOpened = true;
  91.                         }
  92.                 }

  93.         }

  94.         private void InitialSDK() {
  95.                 anychat = new AnyChatCoreSDK();
  96.                 anychat.SetBaseEvent(this);
  97.                 // 启动AnyChat传感器监听
  98.                 anychat.mSensorHelper.InitSensor(this);
  99.         }

  100.         private void adjuestVideoSize(int width, int height) {

  101.                 if (3 * width > 4 * height) {

  102.                         dwRemoteVideoHeight = height;
  103.                         dwRemoteVideoWidth = (int) (4.0 / 3.0 * dwRemoteVideoHeight);
  104.                 } else {
  105.                         dwRemoteVideoWidth = width;
  106.                         dwRemoteVideoHeight = (int) (3.0 / 4.0 * dwRemoteVideoWidth);
  107.                 }
  108.                 dwLocalVideoWidth = dwRemoteVideoWidth;
  109.                 dwLocalVideoHeight = dwRemoteVideoHeight;
  110.                 FrameLayout.LayoutParams layoutParamSelf=new FrameLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);
  111.                 myView.setLayoutParams(layoutParamSelf);
  112.                 LinearLayout.LayoutParams layoutPramOther=new LinearLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);
  113.                 otherView.setLayoutParams(layoutPramOther);
  114.         }

  115.         private void InitialLayout() {
  116.                 this.setContentView(R.layout.video_room);
  117.                 this.setTitle("与" + anychat.GetUserName(userID) + "视频通话");
  118.                 myView = (SurfaceView) findViewById(R.id.surface_local);
  119.                 otherView = (SurfaceView) findViewById(R.id.surface_remote);
  120.                 other2View = (SurfaceView) findViewById(R.id.surface_remoteqwe); //
  121.                 // 如果是采用Java视频采集,则需要设置Surface的CallBack
  122.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  123.                         myView.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);                       
  124.                 }
  125.                
  126.                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  127.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  128.                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  129.                         anychat.mVideoHelper.SetVideoUser(index, userID);

  130.                         anychat.mVideoHelper.SetVideoUser(anychat.mVideoHelper.bindVideo(other2View.getHolder()), userID1);//
  131.                 }
  132.                
  133.                 otherView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
  134.                        
  135.                         @Override
  136.                         public void onGlobalLayout() {
  137.                                 // TODO Auto-generated method stub
  138.                                 if(!bVideoAreaLoaded)
  139.                                 {
  140.                                         adjuestVideoSize(otherView.getWidth(), otherView.getHeight());
  141.                                         bVideoAreaLoaded=true;
  142.                                 }
  143.                         }
  144.                 });
  145.                 mCameraSwitchImage = (ImageView) findViewById(R.id.image_switch_camera);
  146.                 mCameraSwitchImage.setOnClickListener(this);
  147.                 MyProgressBar = (ProgressBar) findViewById(R.id.progress_local);
  148.                 OtherProgressBar = (ProgressBar) findViewById(R.id.progress_remote);
  149.                 SurfaceHolder holder = otherView.getHolder();
  150.                 holder.setKeepScreenOn(true);
  151.                
  152.                 SurfaceHolder holer1 = other2View .getHolder();//
  153.                 holer1.setKeepScreenOn(true);//
  154.                
  155.                 anychat.UserCameraControl(userID, 1);
  156.                 anychat.UserSpeakControl(userID, 1);
  157.                

  158.                 anychat.UserCameraControl(userID1, 1);
  159.                 anychat.UserSpeakControl(userID1, 1);
  160.                
  161.                 myView.setOnClickListener(this);
  162.                 ConfigEntity configEntity = ConfigService.LoadConfig(this);               
  163.                 if (configEntity.videoOverlay != 0) {
  164.                         myView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  165.                 }
  166.                 // 判断是否显示本地摄像头切换图标
  167.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  168.                         if(AnyChatCoreSDK.mCameraHelper.GetCameraNumber() > 1) {
  169.                                 mCameraSwitchImage.setVisibility(View.VISIBLE);
  170.                                 // 默认打开前置摄像头
  171.                                 AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_FRONT);
  172.                         }
  173.                 }else {
  174.                         String[] strVideoCaptures = anychat.EnumVideoCapture();
  175.                         if (strVideoCaptures != null && strVideoCaptures.length > 1) {
  176.                                 mCameraSwitchImage.setVisibility(View.VISIBLE);
  177.                                 // 默认打开前置摄像头
  178.                                 for(int i=0;i<strVideoCaptures.length;i++)
  179.                                 {
  180.                                         String strDevices=strVideoCaptures[i];
  181.                                         if(strDevices.indexOf("Front")>=0) {
  182.                                                 anychat.SelectVideoCapture(strDevices);
  183.                                                 break;
  184.                                         }
  185.                                 }
  186.                         }
  187.                 }
  188.                 // 打开本地音频、视频设备       
  189.                 anychat.UserCameraControl(-1, 1);
  190.                 anychat.UserSpeakControl(-1, 1);               
  191.         }

  192.         OnClickListener listener = new OnClickListener() {
  193.                 public void onClick(View v) {

  194.                 }
  195.         };

  196.         private void refreshAV() {
  197.                 anychat.UserCameraControl(userID, 1);
  198.                 anychat.UserSpeakControl(userID, 1);
  199.                

  200.                 anychat.UserCameraControl(userID1, 1);//
  201.                 anychat.UserSpeakControl(userID1, 1);//
  202.                
  203.                 anychat.UserCameraControl(-1, 1);
  204.                 anychat.UserSpeakControl(-1, 1);
  205.                 bOtherVideoOpened = false;
  206.                 bSelfVideoOpened = false;
  207.         }

  208.         protected void onRestart() {
  209.                 super.onRestart();
  210.                
  211.                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  212.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  213.                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  214.                         anychat.mVideoHelper.SetVideoUser(index, userID);

  215.                         anychat.mVideoHelper.SetVideoUser(anychat.mVideoHelper.bindVideo(other2View.getHolder()), userID1);
  216.                 }
  217.                
  218.                 refreshAV();
  219.                 bOnPaused = false;
  220.         }

  221.         protected void onResume() {
  222.                 super.onResume();
  223.         }

  224.         protected void onPause() {
  225.                 super.onPause();
  226.                 bOnPaused = true;
  227.                 anychat.UserCameraControl(userID, 0);
  228.                 anychat.UserSpeakControl(userID, 0);
  229.                

  230.                 anychat.UserCameraControl(userID1, 0);
  231.                 anychat.UserSpeakControl(userID1, 0);
  232.                
  233.                 anychat.UserCameraControl(-1, 0);
  234.                 anychat.UserSpeakControl(-1, 0);
  235.         }

  236.         protected void onDestroy() {
  237.                 super.onDestroy();
  238.                 mTimer.cancel();
  239.                 anychat.mSensorHelper.DestroySensor();
  240.                 finish();
  241.         }

  242.         @Override
  243.         public void OnAnyChatConnectMessage(boolean bSuccess) {
  244.                 // TODO Auto-generated method stub

  245.         }

  246.         @Override
  247.         public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) {
  248.                 // TODO Auto-generated method stub
  249.                 Log.e("********VideoActivity*********", "OnAnyChatEnterRoomMessage");

  250.         }

  251.         @Override
  252.         public void OnAnyChatLinkCloseMessage(int dwErrorCode) {
  253.                 // 网络连接断开之后,上层需要主动关闭已经打开的音视频设备
  254.                 if(bOtherVideoOpened)
  255.                 {
  256.                         anychat.UserCameraControl(userID, 0);
  257.                         anychat.UserSpeakControl(userID, 0);

  258.                         anychat.UserCameraControl(userID1, 0);
  259.                         anychat.UserSpeakControl(userID1, 0);
  260.                         bOtherVideoOpened = false;
  261.                 }
  262.                 if(bSelfVideoOpened)
  263.                 {
  264.                         anychat.UserCameraControl(-1, 0);
  265.                         anychat.UserSpeakControl(-1, 0);
  266.                         bSelfVideoOpened = false;
  267.                 }
  268.         }

  269.         @Override
  270.         public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode) {
  271.                 // TODO Auto-generated method stub

  272.         }

  273.         @Override
  274.         public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId) {
  275.                 // TODO Auto-generated method stub
  276.                 Log.e("********VideoActivity*********", "OnAnyChatOnlineUserMessage   "
  277.                                 + dwUserNum);
  278.                 refreshAV();
  279.         }

  280.         @Override
  281.         public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) {
  282.                 // TODO Auto-generated method stub
  283.                 Log.e("********VideoActivity*********", "OnAnyChatUserAtRoomMessage"
  284.                                 + dwUserId);
  285.                 if (dwUserId == userID) {
  286.                         if (!bEnter) {
  287.                                 anychat.UserCameraControl(dwUserId, 0);
  288.                                 anychat.UserSpeakControl(dwUserId, 0);
  289.                                 bOtherVideoOpened = false;
  290.                         } else {
  291.                                 anychat.UserCameraControl(dwUserId, 1);
  292.                                 anychat.UserSpeakControl(dwUserId, 1);
  293.                         }
  294.                 }
  295.                
  296.         }

  297.         @Override
  298.         public void onClick(View v) {
  299.                 // TODO Auto-generated method stub
  300.                 if (v == mCameraSwitchImage) {
  301.                        
  302.                         // 如果是采用Java视频采集,则在Java层进行摄像头切换
  303.                         if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  304.                                 AnyChatCoreSDK.mCameraHelper.SwitchCamera();
  305.                                 return;
  306.                         }

  307.                         String strVideoCaptures[] = anychat.EnumVideoCapture();
  308.                        
  309.                         String temp = anychat.GetCurVideoCapture();
  310.                         for (int i = 0; i < strVideoCaptures.length; i++) {
  311.                                 if (!temp.equals(strVideoCaptures[i])) {
  312.                                         anychat.UserCameraControl(-1, 0);
  313.                                         bSelfVideoOpened = false;
  314.                                         anychat.SelectVideoCapture(strVideoCaptures[i]);
  315.                                         anychat.UserCameraControl(-1, 1);
  316.                                         break;
  317.                                 }
  318.                         }

  319.                 }
  320.         }
  321. }
复制代码
回复 支持 反对

使用道具 举报

10

主题

67

帖子

176

积分

注册会员

Rank: 2

积分
176
板凳
 楼主| 发表于 2013-9-17 11:32:30 | 只看该作者
廖斌 发表于 2013-9-17 11:27
您好,1、房间中支持多人视频,人数没有限制,主要看带宽和设备性能。在原来的videoactivity基础上面是可以 ...

代码贴一下 帮我瞅瞅呗.. view以及绑定了

  1. public class VideoActivity extends Activity implements AnyChatBaseEvent, OnClickListener {
  2.         // private LinearLayout mainLayout;

  3.         private SurfaceView otherView,other2View;
  4.         ProgressBar OtherProgressBar;
  5.         ProgressBar MyProgressBar;
  6.         private ImageView mCameraSwitchImage; // 前后摄像头切换按钮

  7.         private SurfaceView myView;

  8.         public AnyChatCoreSDK anychat;
  9.         int userID;
  10.         int userID1;
  11.         boolean bOnPaused = false;

  12.         private boolean bSelfVideoOpened = false; // 本地视频是否已打开
  13.         private boolean bOtherVideoOpened = false; // 对方视频是否已打开
  14.         private boolean bVideoAreaLoaded = false; // 视频区域大小是否加载

  15.         private int dwLocalVideoWidth = 0;
  16.         private int dwLocalVideoHeight = 0;
  17.         private int dwRemoteVideoHeight = 0;
  18.         private int dwRemoteVideoWidth = 0;

  19.         private Timer mTimer = new Timer(true);
  20.         private TimerTask mTimerTask;
  21.         private Handler handler;

  22.         @Override
  23.         public void onCreate(Bundle savedInstanceState) {
  24.                 super.onCreate(savedInstanceState);
  25.                 Intent intent = getIntent();
  26.                 userID = Integer.parseInt(intent.getStringExtra("UserID"));
  27.                 userID1 = Integer.parseInt(intent.getStringExtra("UserID1"));
  28.                 System.out.println("userID" + userID +"  ---- userID1" + userID1);
  29.                 Log.i("LHH", "userID" + userID +"  ---- userID1" + userID1);
  30.                 InitialSDK();
  31.                 InitialLayout();

  32.                 mTimerTask = new TimerTask() {
  33.                         public void run() {
  34.                                 if(handler == null)
  35.                                         return;
  36.                                 Message mesasge = new Message();
  37.                                 handler.sendMessage(mesasge);
  38.                         }
  39.                 };

  40.                 mTimer.schedule(mTimerTask, 1000, 100);
  41.                 handler = new Handler() {
  42.                         @Override
  43.                         public void handleMessage(Message msg) {
  44.                                 CheckVideoStatus();
  45.                                 SetVolum();
  46.                                 super.handleMessage(msg);
  47.                         }
  48.                 };
  49.         }

  50.         private void SetVolum() {
  51.                 OtherProgressBar.setProgress(anychat.GetUserSpeakVolume(userID));
  52.                 MyProgressBar.setProgress(anychat.GetUserSpeakVolume(-1));
  53.         }

  54.         // 判断视频是否已打开
  55.         private void CheckVideoStatus() {
  56.                 if(bOnPaused)
  57.                         return;
  58.                 if (!bOtherVideoOpened) {
  59.                        
  60.                         if (anychat.GetCameraState(userID) == 2 && anychat.GetUserVideoWidth(userID) != 0) {
  61.                                 Log.i("LHH", "otherView");
  62.                                 SurfaceHolder holder = otherView.getHolder();
  63.                                 holder.setFormat(PixelFormat.RGB_565);
  64.                                 holder.setFixedSize(anychat.GetUserVideoWidth(userID),
  65.                                                 anychat.GetUserVideoHeight(userID));
  66.                                 Surface s = holder.getSurface();
  67.                                 Log.i("LHH", "otherView" +
  68.                                                 anychat.SetVideoPos(userID, s, 0, 0, 0, 0));;
  69.                                 bOtherVideoOpened = true;
  70.                         }
  71.                         if (anychat.GetCameraState(userID1) == 2 && anychat.GetUserVideoWidth(userID1) != 0) {
  72.                                 SurfaceHolder holder = other2View.getHolder();
  73.                                 holder.setFormat(PixelFormat.RGB_565);
  74.                                 holder.setFixedSize(anychat.GetUserVideoWidth(userID1),
  75.                                                 anychat.GetUserVideoHeight(userID1));
  76.                                 Surface s = holder.getSurface();

  77.                                 Log.i("LHH", "other2View" +
  78.                                                 anychat.SetVideoPos(userID1, s, 0, 0, 0, 0));;
  79.                                 bOtherVideoOpened = true;
  80.                         }
  81.                 }
  82.                 if (!bSelfVideoOpened) {
  83.                         if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
  84.                                 SurfaceHolder holder = myView.getHolder();
  85.                                 holder.setFormat(PixelFormat.RGB_565);
  86.                                 holder.setFixedSize(anychat.GetUserVideoWidth(-1),
  87.                                                 anychat.GetUserVideoHeight(-1));
  88.                                 Surface s = holder.getSurface();
  89.                                 anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
  90.                                 bSelfVideoOpened = true;
  91.                         }
  92.                 }

  93.         }

  94.         private void InitialSDK() {
  95.                 anychat = new AnyChatCoreSDK();
  96.                 anychat.SetBaseEvent(this);
  97.                 // 启动AnyChat传感器监听
  98.                 anychat.mSensorHelper.InitSensor(this);
  99.         }

  100.         private void adjuestVideoSize(int width, int height) {

  101.                 if (3 * width > 4 * height) {

  102.                         dwRemoteVideoHeight = height;
  103.                         dwRemoteVideoWidth = (int) (4.0 / 3.0 * dwRemoteVideoHeight);
  104.                 } else {
  105.                         dwRemoteVideoWidth = width;
  106.                         dwRemoteVideoHeight = (int) (3.0 / 4.0 * dwRemoteVideoWidth);
  107.                 }
  108.                 dwLocalVideoWidth = dwRemoteVideoWidth;
  109.                 dwLocalVideoHeight = dwRemoteVideoHeight;
  110.                 FrameLayout.LayoutParams layoutParamSelf=new FrameLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);
  111.                 myView.setLayoutParams(layoutParamSelf);
  112.                 LinearLayout.LayoutParams layoutPramOther=new LinearLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);
  113.                 otherView.setLayoutParams(layoutPramOther);
  114.         }

  115.         private void InitialLayout() {
  116.                 this.setContentView(R.layout.video_room);
  117.                 this.setTitle("与" + anychat.GetUserName(userID) + "视频通话");
  118.                 myView = (SurfaceView) findViewById(R.id.surface_local);
  119.                 otherView = (SurfaceView) findViewById(R.id.surface_remote);
  120.                 other2View = (SurfaceView) findViewById(R.id.surface_remoteqwe); //
  121.                 // 如果是采用Java视频采集,则需要设置Surface的CallBack
  122.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  123.                         myView.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);                       
  124.                 }
  125.                
  126.                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  127.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  128.                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  129.                         anychat.mVideoHelper.SetVideoUser(index, userID);

  130.                         anychat.mVideoHelper.SetVideoUser(anychat.mVideoHelper.bindVideo(other2View.getHolder()), userID1);//
  131.                 }
  132.                
  133.                 otherView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
  134.                        
  135.                         @Override
  136.                         public void onGlobalLayout() {
  137.                                 // TODO Auto-generated method stub
  138.                                 if(!bVideoAreaLoaded)
  139.                                 {
  140.                                         adjuestVideoSize(otherView.getWidth(), otherView.getHeight());
  141.                                         bVideoAreaLoaded=true;
  142.                                 }
  143.                         }
  144.                 });
  145.                 mCameraSwitchImage = (ImageView) findViewById(R.id.image_switch_camera);
  146.                 mCameraSwitchImage.setOnClickListener(this);
  147.                 MyProgressBar = (ProgressBar) findViewById(R.id.progress_local);
  148.                 OtherProgressBar = (ProgressBar) findViewById(R.id.progress_remote);
  149.                 SurfaceHolder holder = otherView.getHolder();
  150.                 holder.setKeepScreenOn(true);
  151.                
  152.                 SurfaceHolder holer1 = other2View .getHolder();//
  153.                 holer1.setKeepScreenOn(true);//
  154.                
  155.                 anychat.UserCameraControl(userID, 1);
  156.                 anychat.UserSpeakControl(userID, 1);
  157.                

  158.                 anychat.UserCameraControl(userID1, 1);
  159.                 anychat.UserSpeakControl(userID1, 1);
  160.                
  161.                 myView.setOnClickListener(this);
  162.                 ConfigEntity configEntity = ConfigService.LoadConfig(this);               
  163.                 if (configEntity.videoOverlay != 0) {
  164.                         myView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  165.                 }
  166.                 // 判断是否显示本地摄像头切换图标
  167.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  168.                         if(AnyChatCoreSDK.mCameraHelper.GetCameraNumber() > 1) {
  169.                                 mCameraSwitchImage.setVisibility(View.VISIBLE);
  170.                                 // 默认打开前置摄像头
  171.                                 AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_FRONT);
  172.                         }
  173.                 }else {
  174.                         String[] strVideoCaptures = anychat.EnumVideoCapture();
  175.                         if (strVideoCaptures != null && strVideoCaptures.length > 1) {
  176.                                 mCameraSwitchImage.setVisibility(View.VISIBLE);
  177.                                 // 默认打开前置摄像头
  178.                                 for(int i=0;i<strVideoCaptures.length;i++)
  179.                                 {
  180.                                         String strDevices=strVideoCaptures[i];
  181.                                         if(strDevices.indexOf("Front")>=0) {
  182.                                                 anychat.SelectVideoCapture(strDevices);
  183.                                                 break;
  184.                                         }
  185.                                 }
  186.                         }
  187.                 }
  188.                 // 打开本地音频、视频设备       
  189.                 anychat.UserCameraControl(-1, 1);
  190.                 anychat.UserSpeakControl(-1, 1);               
  191.         }

  192.         OnClickListener listener = new OnClickListener() {
  193.                 public void onClick(View v) {

  194.                 }
  195.         };

  196.         private void refreshAV() {
  197.                 anychat.UserCameraControl(userID, 1);
  198.                 anychat.UserSpeakControl(userID, 1);
  199.                

  200.                 anychat.UserCameraControl(userID1, 1);//
  201.                 anychat.UserSpeakControl(userID1, 1);//
  202.                
  203.                 anychat.UserCameraControl(-1, 1);
  204.                 anychat.UserSpeakControl(-1, 1);
  205.                 bOtherVideoOpened = false;
  206.                 bSelfVideoOpened = false;
  207.         }

  208.         protected void onRestart() {
  209.                 super.onRestart();
  210.                
  211.                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  212.                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  213.                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  214.                         anychat.mVideoHelper.SetVideoUser(index, userID);

  215.                         anychat.mVideoHelper.SetVideoUser(anychat.mVideoHelper.bindVideo(other2View.getHolder()), userID1);
  216.                 }
  217.                
  218.                 refreshAV();
  219.                 bOnPaused = false;
  220.         }

  221.         protected void onResume() {
  222.                 super.onResume();
  223.         }

  224.         protected void onPause() {
  225.                 super.onPause();
  226.                 bOnPaused = true;
  227.                 anychat.UserCameraControl(userID, 0);
  228.                 anychat.UserSpeakControl(userID, 0);
  229.                

  230.                 anychat.UserCameraControl(userID1, 0);
  231.                 anychat.UserSpeakControl(userID1, 0);
  232.                
  233.                 anychat.UserCameraControl(-1, 0);
  234.                 anychat.UserSpeakControl(-1, 0);
  235.         }

  236.         protected void onDestroy() {
  237.                 super.onDestroy();
  238.                 mTimer.cancel();
  239.                 anychat.mSensorHelper.DestroySensor();
  240.                 finish();
  241.         }

  242.         @Override
  243.         public void OnAnyChatConnectMessage(boolean bSuccess) {
  244.                 // TODO Auto-generated method stub

  245.         }

  246.         @Override
  247.         public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) {
  248.                 // TODO Auto-generated method stub
  249.                 Log.e("********VideoActivity*********", "OnAnyChatEnterRoomMessage");

  250.         }

  251.         @Override
  252.         public void OnAnyChatLinkCloseMessage(int dwErrorCode) {
  253.                 // 网络连接断开之后,上层需要主动关闭已经打开的音视频设备
  254.                 if(bOtherVideoOpened)
  255.                 {
  256.                         anychat.UserCameraControl(userID, 0);
  257.                         anychat.UserSpeakControl(userID, 0);

  258.                         anychat.UserCameraControl(userID1, 0);
  259.                         anychat.UserSpeakControl(userID1, 0);
  260.                         bOtherVideoOpened = false;
  261.                 }
  262.                 if(bSelfVideoOpened)
  263.                 {
  264.                         anychat.UserCameraControl(-1, 0);
  265.                         anychat.UserSpeakControl(-1, 0);
  266.                         bSelfVideoOpened = false;
  267.                 }
  268.         }

  269.         @Override
  270.         public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode) {
  271.                 // TODO Auto-generated method stub

  272.         }

  273.         @Override
  274.         public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId) {
  275.                 // TODO Auto-generated method stub
  276.                 Log.e("********VideoActivity*********", "OnAnyChatOnlineUserMessage   "
  277.                                 + dwUserNum);
  278.                 refreshAV();
  279.         }

  280.         @Override
  281.         public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) {
  282.                 // TODO Auto-generated method stub
  283.                 Log.e("********VideoActivity*********", "OnAnyChatUserAtRoomMessage"
  284.                                 + dwUserId);
  285.                 if (dwUserId == userID) {
  286.                         if (!bEnter) {
  287.                                 anychat.UserCameraControl(dwUserId, 0);
  288.                                 anychat.UserSpeakControl(dwUserId, 0);
  289.                                 bOtherVideoOpened = false;
  290.                         } else {
  291.                                 anychat.UserCameraControl(dwUserId, 1);
  292.                                 anychat.UserSpeakControl(dwUserId, 1);
  293.                         }
  294.                 }
  295.                
  296.         }

  297.         @Override
  298.         public void onClick(View v) {
  299.                 // TODO Auto-generated method stub
  300.                 if (v == mCameraSwitchImage) {
  301.                        
  302.                         // 如果是采用Java视频采集,则在Java层进行摄像头切换
  303.                         if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  304.                                 AnyChatCoreSDK.mCameraHelper.SwitchCamera();
  305.                                 return;
  306.                         }

  307.                         String strVideoCaptures[] = anychat.EnumVideoCapture();
  308.                        
  309.                         String temp = anychat.GetCurVideoCapture();
  310.                         for (int i = 0; i < strVideoCaptures.length; i++) {
  311.                                 if (!temp.equals(strVideoCaptures[i])) {
  312.                                         anychat.UserCameraControl(-1, 0);
  313.                                         bSelfVideoOpened = false;
  314.                                         anychat.SelectVideoCapture(strVideoCaptures[i]);
  315.                                         anychat.UserCameraControl(-1, 1);
  316.                                         break;
  317.                                 }
  318.                         }

  319.                 }
  320.         }
  321. }
复制代码
回复 支持 反对

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
沙发
发表于 2013-9-17 11:27:47 | 只看该作者
您好,1、房间中支持多人视频,人数没有限制,主要看带宽和设备性能。在原来的videoactivity基础上面是可以改造成一对多的,需要请求对方的视频数据之后,给一个相应的surfaceview绑定;anychat视频通话的耗电跟看普通电影视频是一样。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 00:23 , Processed in 0.190978 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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