AnyChat技术支持论坛

标题: 摄像头取得头像是与屏幕90°交,不是正常的。 [打印本页]

作者: 博大的海    时间: 2013-7-11 15:08
标题: 摄像头取得头像是与屏幕90°交,不是正常的。
摄像头取得头像是与屏幕90°交,不是正常的。需要在那里设置参数?
作者: admin    时间: 2013-7-11 15:50
您好,这属于设备方向的相关问题,您可以通过如下步骤来设置:

1、开启设备方向自适应功能,在初始化SDK成功之后调用如下的代码:
  1. // 设备方向自适应
  2. AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION, 1);
复制代码
2、屏蔽设备方向改变事件,可修改【src\com\bairuitech\anychat\AnyChatSensorHelper.java】中的【onOrientationChanged】方法,删除该方法中的代码,可直接return。

3、设置合适的设备方向,在打开摄像头之前调用如下的代码:
  1. // 设置设备方向(orientation取值范围:0 ~ 6)
  2. AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ORIENTATION, orientation);
复制代码

作者: 博大的海    时间: 2013-7-11 16:47
android的demo中 ApplyVideoConfig函数里面的参数是不是异步,调用后,接着去取里面的设置参数,取不到。?
作者: admin    时间: 2013-7-11 16:55
您好,请问您需要查询哪些参数呢?有些参数是只支持设置,不支持查询的。
作者: 博大的海    时间: 2013-7-11 17:03
        if (AnyChatCoreSDK
                                .GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
                        PandaLog.log("panda", "===9999999999999=========");
                        surface_local.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);
                }

另外今天官方demo都无法获取本地摄像头,是服务的原因吗?
作者: admin    时间: 2013-7-11 17:18
参数“BRAC_SO_LOCALVIDEO_CAPDRIVER”是可以获取到的:
  1. AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER)
复制代码
无法获取本地摄像头是指:无法打开本地摄像头?或是无法获取本地摄像头的名称?或是其它?

另正常来说,本地摄像头的参数、状态等与服务是没有关系的。
作者: 博大的海    时间: 2013-7-11 17:25
但是确实是在调用ApplyVideoConfig后,那log没打印出来。另外你试试你们的官方demo,确实不能用。只是单向的,以前是双向的。哥呀,看你们的demo和文档都被坑死了,
anychat.GetCameraState(remoteUserID)这个得到的值是0也可以获取对方图像的。
作者: admin    时间: 2013-7-11 17:35
您好,您确认之前设置了Java视频采集驱动模式,就是下面的代码被执行过?
  1. AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER, AnyChatDefine.VIDEOCAP_DRIVER_JAVA)
复制代码
如果您没有设置过Java视频采集驱动,则默认是内核视频采集驱动,永远不会打印您的Log,建议您修改一下代码如下:
  1. PandaLog.log("panda", "LocalCaptureDriver:" + AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER));
  2. if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
  3.                 surface_local.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);
  4. }
复制代码
请确认Demo程序中的【设置】界面中,【视频采集驱动】为“Java视频采集驱动”。修改驱动选项之后,需要重新运行应用程序设置才会生效。

作者: 博大的海    时间: 2013-7-12 14:48
贵公司的聊天能不能在一个activity中完成,连接登录和视频一系列操作。为啥在按照官方demo写的demo,却不行。在OnAnyChatOnlineUserMessage调用anychat.UserSpeakControl(id_remote, 1); 请求后,打印远程的anychat.GetCameraState(id_remote))却为0。如果方便的话,直接demo让你检查一下。因为有个ApplyVideoConfig貌似很影响摄像头取像。
作者: admin    时间: 2013-7-12 15:11
您好,可以在一个Activity中完成整个AnyChat的流程。
为啥在按照官方demo写的demo,却不行
可能是您在某些环节没有处理好,建议您检查一下代码。
在OnAnyChatOnlineUserMessage调用anychat.UserSpeakControl(id_remote, 1); 请求后,打印远程的anychat.GetCameraState(id_remote))却为0
您调用的是音频(UserSpeakControl),但是打印的是视频(GetCameraState),这两者没有关联的,请检查一下代码。

如果方便的话,直接demo让你检查一下
可以,您可以上传您的Demo代码(建议把libs、bin等目录删除,减少上传文件大小)。

作者: 博大的海    时间: 2013-7-12 15:33
另外摄像头按你说的步骤来了一遍也不行了。麻烦看看。谢谢。

AnyChat_Lib_Pan.zip

132.47 KB, 下载次数: 8


作者: 廖斌    时间: 2013-7-12 16:39
您好,demo我看过了,可以正常编译运行,您现在存在的问题是什么呢?
作者: 廖斌    时间: 2013-7-12 16:41
您好
   发给来的demo已经看过了,流程是没有什么问题,也可以正常编译运行,你现在存在的问题是什么呢?
作者: 博大的海    时间: 2013-7-12 16:51
问题是是,两台手机进入一个房间,得不到对方的摄像头拍摄的图像,另外本地摄像头读取的头像没法调整成正常的。麻烦看一下程序是不是那个地方调用顺序错了,正常是两台手机连接可以看到对方的,但是这个demo只看到本地。
作者: 廖斌    时间: 2013-7-12 16:54
关于您的问题 我在您的demo中调试一下,再给您答复
作者: admin    时间: 2013-7-13 18:33
您好,请替换附件中的文件即可解决您的问题。

AnyChatCameraHelper.java

6 KB, 下载次数: 18


作者: 博大的海    时间: 2013-7-14 11:10
替换掉AnyChatCameraHelper.java后可以看到对发,但是摄像头方向,设置参数后还是调整不了。另外三星手机可以给华为手机发送声音,但是华为手机不能给三星手机发送声音。三星手机配置和华为手机配置参见附件。

附件.zip

174.97 KB, 下载次数: 4


作者: 廖斌    时间: 2013-7-15 09:51
您好!
   关于摄像头方向问题,是指竖屏这一个方向(没有翻转的情况下)情况下吗?是本地预览视频还是远程显示android视频?
   关于声音问题,用标准的demo有问题吗?
作者: 博大的海    时间: 2013-7-15 10:23
廖斌 发表于 2013-7-15 09:51
您好!
   关于摄像头方向问题,是指竖屏这一个方向(没有翻转的情况下)情况下吗?是本地预览视频还是远 ...

竖屏幕情况下,本地和远程都有问题。在官方demo中是没问题的,不过我发个你的demo里是在一个activity里面把所有操作做完的。
作者: 廖斌    时间: 2013-7-15 10:32
我用你发给我的demo测试,android跟pc,声音是没有问题的;你也可以试试

作者: 博大的海    时间: 2013-7-15 10:39
AnyChatStateChgEvent 这个回调,在摄像头打开的时候        // 用户摄像头状态改变消息,dwUserId表示用户ID号,dwState表示摄像头的当前状态
    public void OnAnyChatCameraStateChgMessage(int dwUserId, int dwState); 这个函数没回调。 头像问题呢?还有声音试试啥?
作者: 廖斌    时间: 2013-7-15 10:39
本地视频可以在AnyChatCameraHelper的initCamera函数调用startPreview之前设置mCamera.setDisplayOrientation(90);远程视频的设置参照一下步骤:
1、开启设备方向自适应功能,在初始化SDK成功之后调用如下的代码:
  1. // 设备方向自适应
  2. AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION, 1);
复制代码
2、屏蔽设备方向改变事件,可修改【src\com\bairuitech\anychat\AnyChatSensorHelper.java】中的【onOrientationChanged】方法,删除该方法中的代码,可直接return。
3、设置合适的设备方向,在打开摄像头之前调用如下的代码:
  1. // 设置设备方向(orientation取值范围:0 ~ 6)
  2. AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ORIENTATION, orientation);
复制代码

作者: 廖斌    时间: 2013-7-15 10:41
目前JAVA模式下面OnAnyChatCameraStateChgMessage这个回调无效
作者: 廖斌    时间: 2013-7-15 10:44
声音问题,你试试你的三星设备跟pc,华为设备跟pc有没有问题?另外你的demo的库文件和java SDK文件是官网上面最新的吧?
作者: 博大的海    时间: 2013-7-15 11:27
两周前下载的,应该是最新的吧。远程的方向设置后,0到7都试过了,不起作用,咋回事。
作者: 博大的海    时间: 2013-7-15 11:29
我试了试,华为的和htc的声音传输是没有问题的。那个参数设置的问题?
作者: 廖斌    时间: 2013-7-15 13:37
声音问题,是否每次都会在三星和华为上面出现,还是说特定某段时间呢?当声音不正常的时候,看下日志,是否有 Warning: The UDP communication with the server abnormal!这样的提示。如果有的话,声音问题很可能是UDP端口不通照成的,可以让网管检查下UDP端口
作者: 博大的海    时间: 2013-7-16 11:05
在展示远程摄像头这一块,和acitivity横竖屏有关系吗?现在是华为展示的正常的,但是三星是有90度角的。AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ORIENTATION, CAMERA_ORIENTATION);设置是打开本地摄像头前设置,还请求远程摄像头时设置。另外设定值的时候,是不是还和手机机型有关?
作者: admin    时间: 2013-7-16 11:24
您好!
1、在展示远程摄像头这一块,和acitivity横竖屏有关系吗?
和Activity的横竖屏没有关系,和对方摄像头的数据方向有关系,所以对方的摄像头需要设置正确的设备方向;


2、AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ORIENTATION, CAMERA_ORIENTATION);设置是打开本地摄像头前设置,还请求远程摄像头时设置?
打开本地摄像头之前设置


3、但是三星是有90度角的。。另外设定值的时候,是不是还和手机机型有关?
是的,Android和iOS不同,iOS的方向是统一的,而Android不同厂家的机型,摄像头的方向是有差异的,这也是android碎片化的一部分,需要针对机型做一些适配。




作者: 廖斌    时间: 2013-7-16 11:24
博大的海 发表于 2013-7-16 11:05
在展示远程摄像头这一块,和acitivity横竖屏有关系吗?现在是华为展示的正常的,但是三星是有90度角的。Any ...

有关系的;AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ORIENTATION, CAMERA_ORIENTATION)设置的是android视频在远程的显示,在initSDK之后就可以调用;跟机型有关系,不同的机型,CAMERA_ORIENTATION的值可能不同
作者: 博大的海    时间: 2013-7-16 16:12
附件是demo,设置横屏后,本地摄像头得不到图像展示。

AnyChat_Lib_panda.zip

645.96 KB, 下载次数: 2


作者: 博大的海    时间: 2013-7-16 16:19
三星手机运行几次后会出现相机故障。参见豌豆荚截图。

豌豆荚截图20130716161743.png (13.18 KB, 下载次数: 2495)

豌豆荚截图20130716161743.png

作者: 廖斌    时间: 2013-7-16 16:41
博大的海 发表于 2013-7-16 16:19
三星手机运行几次后会出现相机故障。参见豌豆荚截图。

标准的demo会出现那样的错误吗?
作者: 廖斌    时间: 2013-7-16 16:50
博大的海 发表于 2013-7-16 16:12
附件是demo,设置横屏后,本地摄像头得不到图像展示。

采用横屏之后
AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_EXTVIDEOINPUT, 1);
                        AnyChatCoreSDK.SetInputVideoFormat(mVideoPixfmt, previewSize.width, previewSize.height, mCamera.getParameters().getPreviewFrameRate(), 0);
不需要再调用,AnyChatCameraHelper和AnyChatSensorHelper中的修改也不需要,改回跟标准SDK中一样就行
作者: admin    时间: 2013-7-16 16:51
您好,建议您把出现异常之后,Android的Logcat中的相关信息传上来,我们分析一下,谢谢,因为仅凭一张截图很难判断是内核本身的问题,还是您的代码存在问题。
作者: 博大的海    时间: 2013-7-17 15:41
官方demo中viedeoactivity 设置自己布局文件,但是本地展示不出来。本地摄像头比较小,远程大。参见附件。
另外在官方demo中videoactivity 中的一个函数adjuestVideoSize在里面对值进行一些更改,图像便可以出来了,比如把本地设置成240*320,但是把远程的surfaceview设置成和屏幕一样宽高后,本地的小图又不见了。注:肯定不是遮罩问题。麻烦看一下布局文件是不是有问题。

video_room_new.zip

762 Bytes, 下载次数: 2


作者: 廖斌    时间: 2013-7-17 16:00
博大的海 发表于 2013-7-17 15:41
官方demo中viedeoactivity 设置自己布局文件,但是本地展示不出来。本地摄像头比较小,远程大。参见附件。
...

你好,布局文件看过了,没有问题;请尝试本地surfaceview在初始化之后,调用localSurfaceView.setZOrderOnTop(true);
作者: 博大的海    时间: 2013-7-17 16:16
廖斌 发表于 2013-7-17 16:00
你好,布局文件看过了,没有问题;请尝试本地surfaceview在初始化之后,调用localSurfaceView.setZOrderO ...

是在这个        myView = (SurfaceView) findViewById(R.id.surface_local); 之后吗?就是官方的demo。这问题也太奇怪了。都不敢都你们的代码,稍微一动就有问题。
作者: admin    时间: 2013-7-17 16:38
都不敢都你们的代码,稍微一动就有问题。
是的,Android的碎片化太严重,我们的标准Demo程序为了兼容更多的Android机型,考虑得比较全面,所以会出现只修改了某一个地方,而影响其它部分的现象。
作者: 廖斌    时间: 2013-7-17 16:39
博大的海 发表于 2013-7-17 16:16
是在这个        myView = (SurfaceView) findViewById(R.id.surface_local); 之后吗?就是官方的demo。这问题也 ...

是的。现在加上ok了吗?官网的代码是按标准的流程来走的,实际开发可以参考demo的流程,界面可以定制。
作者: 博大的海    时间: 2013-7-17 16:50
廖斌 发表于 2013-7-17 16:39
是的。现在加上ok了吗?官网的代码是按标准的流程来走的,实际开发可以参考demo的流程,界面可以定制。

搞定是搞定了。但是你们说一个activity中可以搞定。但是参考流程,给你发的demo你们也说流程没问题,就是不是声音有问题,就是图像有问题。要不你们自己写一个单个activity中执行这一系列操作的。也让我膜拜一下。
作者: 廖斌    时间: 2013-7-17 16:55
博大的海 发表于 2013-7-17 16:50
搞定是搞定了。但是你们说一个activity中可以搞定。但是参考流程,给你发的demo你们也说流程没问题,就是 ...

好的,我们在新的版本中会附加一个工程,这个工程会展示在一个activity中执行所有流程的过程
作者: 博大的海    时间: 2013-7-17 16:57
廖斌 发表于 2013-7-17 16:55
好的,我们在新的版本中会附加一个工程,这个工程会展示在一个activity中执行所有流程的过程

啥时候写好呀?你们流程都有,自己的源码也有。写这个不难吧。写出来通知下,好看看到底是啥样的。
作者: 廖斌    时间: 2013-7-18 11:12
博大的海 发表于 2013-7-17 16:57
啥时候写好呀?你们流程都有,自己的源码也有。写这个不难吧。写出来通知下,好看看到底是啥样的。

尽快安排。写好之后通知您!
作者: 廖斌    时间: 2013-7-19 10:17
博大的海 发表于 2013-7-17 16:57
啥时候写好呀?你们流程都有,自己的源码也有。写这个不难吧。写出来通知下,好看看到底是啥样的。

您好
   按照您的要求,写了在一个activity执行所有anychat流程的工程,文件在附件中,请查考 AnyChatForOneActivity.rar (86.61 KB, 下载次数: 11)
作者: 博大的海    时间: 2013-7-19 12:31
问一下,你发的demo中com.bairuitech.anychat 包中的文件和官方一样吗?另外你们的sdk对于android 2.0 2.1 2.3(AnyChatCameraHelper 在低版本中有些类没有 ) 以及4.1以上的支持咋处理比较合适。
作者: 廖斌    时间: 2013-7-19 12:49
博大的海 发表于 2013-7-19 12:31
问一下,你发的demo中com.bairuitech.anychat 包中的文件和官方一样吗?另外你们的sdk对于android 2.0 2.1  ...

有一个类不一样,是AnyChatCameraHelper;最新版本的java模式兼容性比较好,支持2.3以上的版本。内核模式支持android 2.2以上的系统,相比java模式,内核性能要高一些,但兼容性要差一些;目前市面上面的设备基本上都是android 2.3以上的系统了,java模式可以兼容市面上面90%以上的设备;android 4.1以上的系统是支持的,目前支持4.2,后续android有新的系统版本更新,我们也会跟着更新的
作者: 博大的海    时间: 2013-7-19 14:46
那个AnyChatCameraHelper类在android 2.3以上是不是不影响程序运行,修改后的是不是和官方的demo对机型的支持都可以了。
作者: 廖斌    时间: 2013-7-19 15:16
博大的海 发表于 2013-7-19 14:46
那个AnyChatCameraHelper类在android 2.3以上是不是不影响程序运行,修改后的是不是和官方的demo对机型的支 ...

1、那个AnyChatCameraHelper类在android 2.3以上是不是不影响程序运行
是的
2、修改后的是不是和官方的demo对机型的支 ...
是的

作者: 博大的海    时间: 2013-7-19 16:26
你发的demo是不是有问题,测试成功没有。当一个房间只能进入两个人的情况会出现一方得不到另一方头像的问题。
作者: 廖斌    时间: 2013-7-19 17:00
我这边测试是ok的哦,你那边测试的时候两方的本地摄像头都是ok的?最好把出现这种情况的日志文件发给我下
作者: 博大的海    时间: 2013-7-24 09:15
用几次后,出现相机故障,无法获得本地摄像。需要重启手机,才可以获得本地摄像。附件是日志,麻烦查一下。

日志文件.zip

2.53 KB, 下载次数: 3


作者: admin    时间: 2013-7-24 09:23
您好,日志没有异常,而且日志中没有显示上层有打开本地摄像头的操作,是否日志上传错了?

另外关于您提到的“需要重启手机,才可以获得本地摄像”,是所有的手机都出现该问题,还是某一个特定型号的手机才会出现呢?使用我们的标准demo程序是否也会出现该问题?



作者: 博大的海    时间: 2013-7-24 09:59
估计是程序异常关闭导致摄像头资源没有释放,下次就出现摄像头故障。在官方demo中AnyChatCameraHelper里面对异常关闭处理了吗?程序和官方demo是一样的。另外手机型号问题,不确定,目前俺们公司没有所有手机型号的android手机,所以木法子回答你。只能说出现故障的手机是三星的note 2

错误.zip

2.16 KB, 下载次数: 1


作者: admin    时间: 2013-7-24 10:08
您好,三星的note 2我们有用标准的Demo程序验证过,是没有问题的,需要注意的时,需要选择“Java驱动”,否则可能会出现异常。另外再次发过来的日志文件还是没有包含任何操作本地摄像头的信息,请确认一下,谢谢。

另外您提到程序异常,请将异常之后Logcat中输出的相关堆栈信息发过来我们分析一下,谢谢。
作者: 博大的海    时间: 2013-7-24 13:22
admin 发表于 2013-7-24 10:08
您好,三星的note 2我们有用标准的Demo程序验证过,是没有问题的,需要注意的时,需要选择“Java驱动”,否 ...

出现相机故障,不是必出现。可以排除是Java驱动设置的问题。不定那一次会引起相机故障。你运行你们官方demo没出现,这很正常,我这程序又不是每次都出现。只是AnyChatCameraHelper类中只在切换摄像头时候,把mCamera.release(),找到异常的时候没有把mCamera release()掉,会不会是在异常那地方引起相机资源一直被占用,导致的?
作者: admin    时间: 2013-7-24 13:41
您好,请将异常之后Logcat中输出的相关堆栈信息发上来我们分析一下,谢谢。
作者: 博大的海    时间: 2013-7-25 16:55
对于没有前置摄像头的,调用官方sdk是如何处理的。是默认打开后置的吗?
作者: admin    时间: 2013-7-25 16:58
您好,没有前置摄像头,只有一个摄像头,则打开视频时就会打开默认的摄像头,也就是后置摄像头。

您可以参考标准Demo程序,在初始化的时候,会枚举当前系统有几个摄像头设备,如果只有一个,则界面上不会显示摄像头切换的图标。
作者: 博大的海    时间: 2013-7-26 10:10
您好,官方demo运行在三星手机,手机型号:GT-S5660,android版本号:2.3.7 内核版本:2.6.35.7.....结果采集不出来图像,整个就是黑屏。这个手机是一个摄像头的然后我就在代码里添加了判断
if(AnyChatCoreSDK.mCameraHelper.GetCameraNumber() > 1) {
                                mCameraSwitchImage.setVisibility(View.VISIBLE);
                                // 默认打开前置摄像头
                                AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_FRONT);
                        }else {
                                mCameraSwitchImage.setVisibility(View.INVISIBLE);
                                // 默认打开后置摄像头
                                AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_BACK);
                        }
还是不行。

另外,贵公司的实时视频结束后,能不能把视频的内容保存起来。sdk中没有提供这些方法?
作者: admin    时间: 2013-7-26 10:50
您好,关于视频内容的保存,请参考:http://bbs.anychat.cn/forum.php? ... d=51&extra=page%3D1
官方demo运行在三星手机,手机型号:GT-S5660,android版本号:2.3.7 内核版本:2.6.35.7.....结果采集不出来图像
关于上面的问题,请问您是使用的“Java驱动”模式吗,是否可以将logcat中的信息传上来我们分析一下,谢谢!

作者: admin    时间: 2013-7-26 11:08
您好,建议您在下次提问时,新开一个帖子,当前这个帖子有点长了,




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