AnyChat技术支持论坛

标题: 如何实现在对方关闭视频后,显示黑屏,而不是画面卡住? [打印本页]

作者: xudalin    时间: 2014-8-11 13:23
标题: 如何实现在对方关闭视频后,显示黑屏,而不是画面卡住?
如题,一旦调用UserCameraControl将视频关闭后,对方的视频画面就会卡住不动。但我想做的效果是一旦没有视频信号就用黑屏。请问这个要如何实现?

作者: admin    时间: 2014-8-11 13:42
您好,在调用UserCameraContro关闭视频l之后,在SurfaceView上面显示一个背景图即可,可以迭加一个图示显示的View。下次打开视频时,再将背景图片显示的View隐藏。
作者: xudalin    时间: 2014-8-11 15:05
admin 发表于 2014-8-11 13:42
您好,在调用UserCameraContro关闭视频l之后,在SurfaceView上面显示一个背景图即可,可以迭加一个图示显示 ...

背景色可以吗?把surfaceView的背景色设为Color.BLACK
作者: xudalin    时间: 2014-8-11 15:11
admin 发表于 2014-8-11 13:42
您好,在调用UserCameraContro关闭视频l之后,在SurfaceView上面显示一个背景图即可,可以迭加一个图示显示 ...

另外发现设置不采集视频后,anychat.UserCameraControl(-1, 0);再设置成anychat.UserCameraControl(-1, 1);对方的图像仍然是卡住的  是不是还需要调用什么方法?或者是重置surfaceView呢?
作者: 廖斌    时间: 2014-8-11 15:38
xudalin 发表于 2014-8-11 15:11
另外发现设置不采集视频后,anychat.UserCameraControl(-1, 0);再设置成anychat.UserCameraControl(-1, 1 ...

您好,是需要重现绑定surfaceview的,参考标准demo AnyChatAndroid的onRestart事件中的处理
作者: xudalin    时间: 2014-8-12 11:47
OnAnyChatCameraStateChgMessage只是本地接口,如何能在调用anychat.UserCameraControl(-1, 0);后,对方的OnAnyChatCameraStateChgMessage能收到消息?
作者: 佰锐科技-王建美    时间: 2014-8-12 11:53
xudalin 发表于 2014-8-12 11:47
OnAnyChatCameraStateChgMessage只是本地接口,如何能在调用anychat.UserCameraControl(-1, 0);后,对方的O ...

对方的OnAnyChatCameraStateChgMessage可以接收到消息的
作者: xudalin    时间: 2014-8-12 13:18
佰锐科技-王建美 发表于 2014-8-12 11:53
对方的OnAnyChatCameraStateChgMessage可以接收到消息的

anychat.UserCameraControl(-1, 0);可以。但是我重新设置anychat.UserCameraControl(-1, 1); 对方就一直没反应了 断点也不走
作者: 廖斌    时间: 2014-8-12 14:33
xudalin 发表于 2014-8-12 13:18
anychat.UserCameraControl(-1, 0);可以。但是我重新设置anychat.UserCameraControl(-1, 1); 对方就一直 ...

1、是什么平台要接收OnAnyChatCameraStateChgMessage?android、ios、web?

2、接收到这个回调之后是需要做怎样的逻辑呢?
作者: xudalin    时间: 2014-8-12 14:49
廖斌 发表于 2014-8-12 14:33
1、是什么平台要接收OnAnyChatCameraStateChgMessage?android、ios、web?

2、接收到这个回调之后是 ...

android系统
根据2楼admin的回答,我就是想在接到回调后重新把背景图重新设置成透明的

我刚刚一直在实验,一旦调用anychat.UserCameraControl(-1, 0);后,无论再调用l(-1, 0)或(-1,1)哪个方法,OnAnyChatCameraStateChgMessage都不会再走
作者: 廖斌    时间: 2014-8-12 15:13
xudalin 发表于 2014-8-12 14:49
android系统
根据2楼admin的回答,我就是想在接到回调后重新把背景图重新设置成透明的

哦,我们查下这个接口。你可以通过另外一种方式再做这个处理“把背景图重新设置成透明”。可以启动一个定时器查询用户的码率,如果码率不为0,视频数据就过来了,就可以设置背景了。
作者: xudalin    时间: 2014-8-12 15:27
廖斌 发表于 2014-8-12 15:13
哦,我们查下这个接口。你可以通过另外一种方式再做这个处理“把背景图重新设置成透明”。可以启动一个定 ...

设置背景有很多方式 这都没关系  现在的问题是 我一旦把自己这边视频断掉了  再开启的话 对方的画面还是不动的 您之前说参考restart方法  那也的需要这个调用的timing啊 现在是这个方法没有效果,没办法调用restart方法 我在想是不是我少设了什么参数呢?》
作者: guangxian2012    时间: 2014-8-12 15:36
xudalin 发表于 2014-8-12 15:27
设置背景有很多方式 这都没关系  现在的问题是 我一旦把自己这边视频断掉了  再开启的话 对方的画面还是 ...

把你代码贴上来看下
作者: xudalin    时间: 2014-8-12 15:43
guangxian2012 发表于 2014-8-12 15:36
把你代码贴上来看下

调用部分
  1. // 关闭声音
  2.                 findViewById(R.id.closeVoice).setOnClickListener(new OnClickListener() {
  3.                        
  4.                         @Override
  5.                         public void onClick(View v) {
  6.                                 anychat.UserSpeakControl(-1, 0);
  7.                                 v.setVisibility(View.GONE);
  8.                                 findViewById(R.id.openVoice).setVisibility(View.VISIBLE);
  9.                         }
  10.                 });
  11.                 // 打开声音
  12.                 findViewById(R.id.openVoice).setOnClickListener(new OnClickListener() {
  13.                        
  14.                         @Override
  15.                         public void onClick(View v) {
  16.                                 anychat.UserSpeakControl(-1, 1);
  17.                                 v.setVisibility(View.GONE);
  18.                                 findViewById(R.id.closeVoice).setVisibility(View.VISIBLE);
  19.                         }
  20.                 });
  21.                 // 关闭视频
  22.                 findViewById(R.id.closeVideo).setOnClickListener(new OnClickListener() {
  23.                        
  24.                         @Override
  25.                         public void onClick(View v) {
  26.                                 anychat.UserCameraControl(-1, 0);
  27.                                 bSelfVideoOpened = false;
  28.                                 v.setVisibility(View.GONE);
  29.                                 findViewById(R.id.openVideo).setVisibility(View.VISIBLE);
  30.                         }
  31.                 });
  32.                 // 打开视频
  33.                 findViewById(R.id.openVideo).setOnClickListener(new OnClickListener() {
  34.                        
  35.                         @Override
  36.                         public void onClick(View v) {
  37.                                 anychat.UserCameraControl(-1, 1);
  38.                                 bSelfVideoOpened = true;
  39.                                 v.setVisibility(View.GONE);
  40.                                 findViewById(R.id.closeVideo).setVisibility(View.VISIBLE);
  41.                         }
  42.                 });
复制代码
AnyChatStateChgEvent接口部分
  1.         @Override
  2.         public void OnAnyChatCameraStateChgMessage(int dwUserId, int dwState) {
  3.                 if(dwUserId == userID){
  4.                         if (dwState != 2) {
  5.                                 bOtherVideoOpened = false;
  6.                         } else {
  7.                                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  8.                                 if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  9.                                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  10.                                         anychat.mVideoHelper.SetVideoUser(index, userID);
  11.                                 }
  12.                                 bOtherVideoOpened = true;
  13.                         }
  14.                 }
  15.         }
复制代码

作者: 廖斌    时间: 2014-8-12 15:53
xudalin 发表于 2014-8-12 15:43
调用部分AnyChatStateChgEvent接口部分
  1.         @Override
  2.         public void OnAnyChatCameraStateChgMessage(int dwUserId, int dwState) {
  3.                 if(dwUserId == userID){
  4.                         if (dwState != 2) {
  5.                                 bOtherVideoOpened = false;
  6.                         } else {
  7.                                 // 如果是采用Java视频显示,则需要设置Surface的CallBack
  8.                                 if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  9.                                         int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());
  10.                                         anychat.mVideoHelper.SetVideoUser(index, userID);
  11.                                 }
  12.                                 bOtherVideoOpened = true;
  13.                         }
  14.                 }
  15.         }
复制代码
这段代码有执行吗?
作者: xudalin    时间: 2014-8-12 15:54
廖斌 发表于 2014-8-12 15:53
这段代码有执行吗?

有 就是我之前和您说的 只有第一次把视频关了的时候有 后来再重新设置后就没有了 也就是说只有if条件走了 else重新设置的部分没有走 也不知道怎么回事
作者: 廖斌    时间: 2014-8-12 15:54
廖斌 发表于 2014-8-12 15:53
这段代码有执行吗?

你是要实现A和B正在视频通话,A关闭视频再次打开,B还要再能再次看到A的视频?
作者: 廖斌    时间: 2014-8-12 15:55
廖斌 发表于 2014-8-12 15:54
你是要实现A和B正在视频通话,A关闭视频再次打开,B还要再能再次看到A的视频?

如果是这样的话,是不需要调用
  1. if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {

  2. 09.                                        int index = anychat.mVideoHelper.bindVideo(otherView.getHolder());

  3. 10.                                        anychat.mVideoHelper.SetVideoUser(index, userID);

  4. 11.                                }
复制代码

作者: 廖斌    时间: 2014-8-12 15:56
廖斌 发表于 2014-8-12 15:55
如果是这样的话,是不需要调用

android用的是什么版本呢?之前的android版本实现“A和B正在视频通话,A关闭视频再次打开,B还要再能再次看到A的视频”是有问题的。要将android更新到最新版本。
作者: xudalin    时间: 2014-8-12 15:57
廖斌 发表于 2014-8-12 15:54
你是要实现A和B正在视频通话,A关闭视频再次打开,B还要再能再次看到A的视频?

是要实现这样 就是A可以手动关闭、打开视频信号,关闭的时候用A和B就都黑屏显示
作者: xudalin    时间: 2014-8-12 15:59
廖斌 发表于 2014-8-12 15:56
android用的是什么版本呢?之前的android版本实现“A和B正在视频通话,A关闭视频再次打开,B还要再能再次 ...

用的是新的版本啊 那我再下载一版试试
作者: 廖斌    时间: 2014-8-12 16:00
xudalin 发表于 2014-8-12 15:57
是要实现这样 就是A可以手动关闭、打开视频信号,关闭的时候用A和B就都黑屏显示

而且视频的时候B的surfaceview背景必须是透明的
作者: xudalin    时间: 2014-8-12 16:07
本帖最后由 xudalin 于 2014-8-12 16:09 编辑
廖斌 发表于 2014-8-12 16:00
而且视频的时候B的surfaceview背景必须是透明的

我把CheckVideoStatus的方法中加了else判断 但好像没有用 要怎么设置呢?
  1. if (!bOtherVideoOpened) {
  2.                         if (anychat.GetCameraState(userID) == 2 && anychat.GetUserVideoWidth(userID) != 0) {
  3.                                 otherView.setBackgroundColor(Color.TRANSPARENT);
  4.                                 SurfaceHolder holder = otherView.getHolder();
  5.                                 // 如果是采用内核视频显示(非Java驱动),则需要设置Surface的参数
  6.                                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  7.                                         holder.setFormat(PixelFormat.RGB_565);
  8.                                         holder.setFixedSize(anychat.GetUserVideoWidth(userID), anychat.GetUserVideoHeight(userID));
  9.                                 }
  10.                                 Surface s = holder.getSurface();
  11.                                 anychat.SetVideoPos(userID, s, 0, 0, 0, 0);
  12.                                 bOtherVideoOpened = true;
  13.                         } else {
  14.                                 otherView.setBackgroundColor(Color.BLACK);
  15.                         }
  16.                 }
  17.                 if (!bSelfVideoOpened) {
  18.                         if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
  19.                                 myView.setBackgroundColor(Color.TRANSPARENT);
  20.                                 SurfaceHolder holder = myView.getHolder();
  21.                                 // 如果是采用内核视频显示(非Java驱动),则需要设置Surface的参数
  22.                                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  23.                                         holder.setFormat(PixelFormat.RGB_565);
  24.                                         holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
  25.                                 }
  26.                                 Surface s = holder.getSurface();
  27.                                 anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
  28.                                 bSelfVideoOpened = true;
  29.                         } else {
  30.                                 myView.setBackgroundColor(Color.BLACK);
  31.                         }
  32.                 }
复制代码

作者: xudalin    时间: 2014-8-13 11:26
版主结贴吧  问题都已经解决了
作者: 佰锐科技-王建美    时间: 2014-8-13 11:51
xudalin 发表于 2014-8-13 11:26
版主结贴吧  问题都已经解决了

您好,我们的接口是没有问题的哦,请问是什么原因导致出现这样的问题的呢?




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