设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 7833|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

249

主题

2967

帖子

9075

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9075
沙发
发表于 2014-1-15 10:43:31 | 只看该作者
您好,请上传logcat中更多关于“java.lang.IllegalArgumentException”异常的信息供我们分析,另请上传一份客户端的日志文件,谢谢。
回复 支持 反对

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
板凳
 楼主| 发表于 2014-1-15 10:53:12 | 只看该作者
以下是异常
01-15 10:50:10.879: E/SurfaceHolder(3760): Exception locking surface
01-15 10:50:10.879: E/SurfaceHolder(3760): java.lang.IllegalArgumentException
01-15 10:50:10.879: E/SurfaceHolder(3760):         at android.view.Surface.lockCanvasNative(Native Method)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at android.view.Surface.lockCanvas(Surface.java:88)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:755)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:731)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at com.bairuitech.anychat.VideoRenderer.DrawByteBuffer(AnyChatVideoHelper.java:173)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at com.bairuitech.anychat.AnyChatVideoHelper.ShowVideo(AnyChatVideoHelper.java:62)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at com.bairuitech.anychat.AnyChatCoreSDK.OnVideoDataCallBack(AnyChatCoreSDK.java:528)
01-15 10:50:10.879: E/SurfaceHolder(3760):         at dalvik.system.NativeStart.run(Native Method)
回复 支持 反对

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
 楼主| 发表于 2014-1-15 10:57:28 | 只看该作者
请问日志文件在什么位置
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9075

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

7

主题

43

帖子

121

积分

注册会员

Rank: 2

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

使用道具 举报

249

主题

2967

帖子

9075

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

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也要变的。
回复 支持 反对

使用道具 举报

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我确定已经改变
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9075

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:52 , Processed in 0.152799 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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