设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

android切换画面问题

[复制链接]

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
跳转到指定楼层
楼主
发表于 2014-1-15 10:38:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我在android端首次设置视频播放,然后再设置UserCameraControl(id,0),然后重新设置id出现java.lang.IllegalArgumentException异常,android.view.Surface.lockCanvasNative(Native Method),请问如何解决
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
13#
 楼主| 发表于 2014-1-15 13:07:37 | 只看该作者
(本地视频是不能通过这种方式切换的)
这种不能吗,不记得的上一个版本可以
回复 支持 反对

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
12#
 楼主| 发表于 2014-1-15 12:57:31 | 只看该作者
代码都是放在计时器里的,代码流程也是参考demo的做法,现在是第一次可以正常显示。我现在想把同一个surfaceview重新设置一个用户id,在显示的时候抛出异常
回复 支持 反对

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
11#
发表于 2014-1-15 11:46:11 | 只看该作者
bdcn 发表于 2014-1-15 11:21
int watcherId = -1;
                if (anychat.GetCameraState(watcherId) == 2
                                && anychat.GetUserVideoWidth( ...

您好,同一个surfaceview切换不同用户显示是可以的。你贴上来的代码流程有问题
1、打开对方A的视频,anychat.UserCameraControl(useridA, 1);
2、然后通过计时器判断到  if (anychat.GetCameraState(useridA) == 2
                                && anychat.GetUserVideoWidth(useridA) != 0) {
时执行
  1.                               && anychat.GetUserVideoWidth(watcherId) != 0) {
  2.                         SurfaceHolder holder = firstSurfaceView.getHolder();
  3.                         holder.setFormat(PixelFormat.RGB_565);
  4.                         holder.setFixedSize(anychat.GetUserVideoWidth(watcherId),
  5.                                         anychat.GetUserVideoHeight(watcherId));
  6.                         Surface s = holder.getSurface();
  7.                         System.out.println("firstSurfaceView=" + watcherId);
  8.                         anychat.SetVideoPos(watcherId, s, 0, 0, 0, 0);
  9.                         anychat.UserCameraControl(watcherId, 1);
  10. // 如果是采用Java视频显示,则需要将视频窗口与用户关联起来
  11.                         if (AnyChatCoreSDK
  12.                                         .GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  13.                                 anychat.mVideoHelper.SetVideoUser(firstVideoIndex, watcherId);
  14.                         }
复制代码
3、参考标准demo的做法。

(本地视频是不能通过这种方式切换的)
  
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9109

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9109
10#
发表于 2014-1-15 11:45:48 | 只看该作者
您好,您在关闭用户视频“anychat.UserCameraControl(watcherId, 0);”之后没有关闭视频显示,正确的方法应该是:
  1. anychat.UserCameraControl(watcherId, 0);
  2. anychat.mVideoHelper.SetVideoUser(firstVideoIndex, -1);
复制代码
另外本地预览的视频surface不能和远程用户进行共用。从您上面帖的代码来看,好象是共用了?
回复 支持 反对

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
9#
 楼主| 发表于 2014-1-15 11:21:33 | 只看该作者
int watcherId = -1;
                if (anychat.GetCameraState(watcherId) == 2
                                && anychat.GetUserVideoWidth(watcherId) != 0) {
                        SurfaceHolder holder = firstSurfaceView.getHolder();
                        holder.setFormat(PixelFormat.RGB_565);
                        holder.setFixedSize(anychat.GetUserVideoWidth(watcherId),
                                        anychat.GetUserVideoHeight(watcherId));
                        Surface s = holder.getSurface();
                        System.out.println("firstSurfaceView=" + watcherId);
                        anychat.SetVideoPos(watcherId, s, 0, 0, 0, 0);
                        anychat.UserCameraControl(watcherId, 1);
                        firstSurfaceOpen = true;

                        // 如果是采用Java视频显示,则需要将视频窗口与用户关联起来
                        if (AnyChatCoreSDK
                                        .GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                anychat.mVideoHelper.SetVideoUser(firstVideoIndex, watcherId);
                        }
                }

                anychat.UserCameraControl(watcherId, 0);
                watcherId = 209;
                if (anychat.GetCameraState(watcherId) == 2
                                && anychat.GetUserVideoWidth(watcherId) != 0) {
                        SurfaceHolder holder = firstSurfaceView.getHolder();
                        holder.setFormat(PixelFormat.RGB_565);
                        holder.setFixedSize(anychat.GetUserVideoWidth(watcherId),
                                        anychat.GetUserVideoHeight(watcherId));
                        Surface s = holder.getSurface();
                        System.out.println("firstSurfaceView=" + watcherId);
                        anychat.SetVideoPos(watcherId, s, 0, 0, 0, 0);
                        anychat.UserCameraControl(watcherId, 1);
                        firstSurfaceOpen = true;

                        // 如果是采用Java视频显示,则需要将视频窗口与用户关联起来
                        if (AnyChatCoreSDK
                                        .GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) == AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                anychat.mVideoHelper.SetVideoUser(firstVideoIndex, watcherId);
                        }
                }

大概逻辑就是这样,那个watcherId我确定已经改变
回复 支持 反对

使用道具 举报

5

主题

1269

帖子

3677

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3677
8#
发表于 2014-1-15 11:16:46 | 只看该作者
bdcn 发表于 2014-1-15 11:08
还是抛异常,并且画面没有切换

您好,你关闭视频,重新打开视频之后,userid有没有改变,变了的话SetVideoUser或者SetVideoPos对应的userid也要变的。
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9109

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9109
7#
发表于 2014-1-15 11:14:11 | 只看该作者
您好,请用代码表述一下您的问题。
我在android端首次设置视频播放,然后再设置UserCameraControl(id,0),然后重新设置id出现java.lang.IllegalArgumentException异常
回复 支持 反对

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
6#
 楼主| 发表于 2014-1-15 11:08:56 | 只看该作者
还是抛异常,并且画面没有切换
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9109

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9109
5#
发表于 2014-1-15 10:58:41 | 只看该作者
您好,请修改一下:AnyChatVideoHelper::DrawByteBuffer,在里面加上一个try-catch,看是否能解决该问题。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 06:35 , Processed in 0.145228 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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