bdcn 发表于 2014-1-15 10:38:28

android切换画面问题

我在android端首次设置视频播放,然后再设置UserCameraControl(id,0),然后重新设置id出现java.lang.IllegalArgumentException异常,android.view.Surface.lockCanvasNative(Native Method),请问如何解决

admin 发表于 2014-1-15 10:43:31

您好,请上传logcat中更多关于“java.lang.IllegalArgumentException”异常的信息供我们分析,另请上传一份客户端的日志文件,谢谢。

bdcn 发表于 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)

bdcn 发表于 2014-1-15 10:57:28

请问日志文件在什么位置

admin 发表于 2014-1-15 10:58:41

您好,请修改一下:AnyChatVideoHelper::DrawByteBuffer,在里面加上一个try-catch,看是否能解决该问题。

bdcn 发表于 2014-1-15 11:08:56

还是抛异常,并且画面没有切换

admin 发表于 2014-1-15 11:14:11

您好,请用代码表述一下您的问题。
我在android端首次设置视频播放,然后再设置UserCameraControl(id,0),然后重新设置id出现java.lang.IllegalArgumentException异常

廖斌 发表于 2014-1-15 11:16:46

bdcn 发表于 2014-1-15 11:08
还是抛异常,并且画面没有切换

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

bdcn 发表于 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我确定已经改变

admin 发表于 2014-1-15 11:45:48

您好,您在关闭用户视频“anychat.UserCameraControl(watcherId, 0);”之后没有关闭视频显示,正确的方法应该是:anychat.UserCameraControl(watcherId, 0);
anychat.mVideoHelper.SetVideoUser(firstVideoIndex, -1);另外本地预览的视频surface不能和远程用户进行共用。从您上面帖的代码来看,好象是共用了?
页: [1] 2
查看完整版本: android切换画面问题