AnyChat技术支持论坛

标题: anychat.GetUserVideoWidth(id)的值问题 [打印本页]

作者: bdcn    时间: 2014-2-19 17:31
标题: anychat.GetUserVideoWidth(id)的值问题
我打开摄像头,并且anychat.GetCameraState(id) 的值为2,但是anychat.GetUserVideoWidth(id)的值却为为0
作者: 廖斌    时间: 2014-2-19 17:54
您好,打开摄像头是做了什么操作呢?您在标准demo视频通话中,获取这个两个状态是怎样的呢?
作者: bdcn    时间: 2014-2-19 17:56
if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
                        if(AnyChatCoreSDK.mCameraHelper.GetCameraNumber() > 1) {
                                // 默认打开前置摄像头
                                AnyChatCoreSDK.mCameraHelper.SelectVideoCapture(AnyChatCoreSDK.mCameraHelper.CAMERA_FACING_FRONT);
                        }
                }else {
                        String[] strVideoCaptures = anychat.EnumVideoCapture();
                        if (strVideoCaptures != null && strVideoCaptures.length > 1) {
                                // 默认打开前置摄像头
                                for(int i = 0; i < strVideoCaptures.length; i++) {
                                        String strDevices=strVideoCaptures[i];
                                        if(strDevices.indexOf("Front")>=0) {
                                                anychat.SelectVideoCapture(strDevices);
                                                break;
                                        }
                                }
                        }
                }

anychat.UserCameraControl(-1, 1);
anychat.UserSpeakControl(-1, 1);

if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
                        SurfaceHolder holder = selfSurfaceView.getHolder();
                        if (AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                holder.setFormat(PixelFormat.RGB_565);
                                holder.setFixedSize(anychat.GetUserVideoWidth(selfId), anychat.GetUserVideoHeight(selfId));
                        }
                        Surface s = holder.getSurface();
                        anychat.SetVideoPos(selfId, s, 0, 0, 0, 0);
                        selfSurfaceOpen = true;
                }
作者: 廖斌    时间: 2014-2-19 18:10
bdcn 发表于 2014-2-19 17:56
if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEO ...

您在标准demo视频通话中,获取这个两个状态是怎样的呢?
作者: bdcn    时间: 2014-2-20 11:04
[2014-02-20 11:02:31(418)]        ---------------------------AnyChat Platform Core SDK Client Log---------------------------
[2014-02-20 11:02:31(419)]        Load libanychatcore.so success!(V4.9 Build Time:Feb  9 2014 10:22:56)
[2014-02-20 11:02:31(420)]        Android OS SDK Version:16, Support ARMv7:2, Support Neon:4
[2014-02-20 11:02:31(430)]        Load libmediautil_v7.so success!(V4.9 Build Time:Jan  1 2014 03:44:48)
[2014-02-20 11:02:31(436)]        Load libmediashow_4.0.so success!(V4.9 Build Time:Jan  1 2014 03:44:10)
[2014-02-20 11:02:31(444)]        Load libmediacore_4.1.so success!(V4.9 Build Time:Jan  1 2014 03:44:31)
[2014-02-20 11:02:31(446)]        CPU:1990.21 MIPS, Hardware:Amlogic Meson6 g04 customer platform
[2014-02-20 11:02:33(211)]        Invoke        BRAC_Connect(192.168.8.209,8906)=0
[2014-02-20 11:02:33(218)]        Invoke        LoginServer(username=test06)
[2014-02-20 11:02:33(260)]        CheckClientSocketLink         Connect(ip=192.168.8.209,port=8906)
[2014-02-20 11:02:33(311)]        Server version: V4.9(Build Time:2014-01-02 23:02:53, Server OS:Linux)
[2014-02-20 11:02:33(352)]        Message        OnConnect(bSuccess:1, errorcode=0)
[2014-02-20 11:02:33(464)]        Message        OnLoginSystem(userid=294,errorcode=0,username=test06), msg deliver worked(0)
[2014-02-20 11:02:33(475)]        Connection to streaming media server successfully!(udp delay:5ms)
[2014-02-20 11:02:33(763)]        Invoke        BRAC_SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC=1)
[2014-02-20 11:02:33(764)]        Invoke        SetSDKOption(BRAC_SO_AUDIO_ECHOCTRL,1)
[2014-02-20 11:02:33(764)]        Invoke        BRAC_SetSDKOption(BRAC_SO_CORESDK_USEHWCODEC=0)
[2014-02-20 11:02:40(157)]        Invoke        BRAC_SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC=1)
[2014-02-20 11:02:40(157)]        Invoke        SetSDKOption(BRAC_SO_AUDIO_ECHOCTRL,1)
[2014-02-20 11:02:40(157)]        Invoke        BRAC_SetSDKOption(BRAC_SO_CORESDK_USEHWCODEC=0)
[2014-02-20 11:03:12(239)]        Invoke        BRAC_SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC=1)
[2014-02-20 11:03:12(240)]        Invoke        SetSDKOption(BRAC_SO_AUDIO_ECHOCTRL,1)
[2014-02-20 11:03:12(240)]        Invoke        BRAC_SetSDKOption(BRAC_SO_CORESDK_USEHWCODEC=0)
[2014-02-20 11:03:16(937)]        Invoke        EnterRoom(roomid=541)
[2014-02-20 11:03:16(997)]        Message        OnEnterRoom(roomid=541,errorcode=0,siteindex=1)
[2014-02-20 11:03:16(998)]        Audio Playback Device Init(0, 1, 16000, 16), Default Playback Driver
[2014-02-20 11:03:16(998)]        Message        OnReceiveOnlineUser(count=2,roomid=541)
[2014-02-20 11:03:17(030)]        Invoke        UserCameraControl(userid=292,bOpen=1)
[2014-02-20 11:03:17(031)]        Invoke        UserSpeakControl(userid=292,bOpen=1)
[2014-02-20 11:03:17(034)]        Invoke        UserCameraControl(userid=-1,bOpen=1)
[2014-02-20 11:03:17(035)]        Invoke        UserSpeakControl(userid=-1,bOpen=1)
[2014-02-20 11:03:17(103)]        Audio Init, error:0, device:-1, 1, 16000, 16, capmode:0
[2014-02-20 11:03:17(122)]        Audio codec init, handle:1, 11, 1, 16000, 16, 15850
[2014-02-20 11:03:17(391)]        Message        OnP2PConnectState(userid=292, state=2)
[2014-02-20 11:03:17(402)]        Audio FX Status: VAD:1, NS:1, AGC:1, AEC:1
[2014-02-20 11:03:17(618)]        Message        OnP2PConnectState(userid=292, state=3)
[2014-02-20 11:03:20(133)]        On Remote UserCameraControl(dwUserId:292, bOpen:1)
[2014-02-20 11:03:20(174)]        On Remote UserSpeakControl(dwUserId:292, bOpen:1)
[2014-02-20 11:03:20(932)]        userid(292) video decode delay:47ms
[2014-02-20 11:03:38(194)]        Invoke        UserCameraControl(userid=-1,bOpen=0)
[2014-02-20 11:03:38(194)]        Invoke        UserSpeakControl(userid=-1,bOpen=0)
[2014-02-20 11:03:38(203)]        Invoke        UserCameraControl(userid=292,bOpen=0)
[2014-02-20 11:03:38(207)]        Invoke        UserSpeakControl(userid=292,bOpen=0)
[2014-02-20 11:03:38(808)]        Invoke        LeaveRoom(roomid=-1)        Elapse:114 ms
[2014-02-20 11:03:40(373)]        Invoke        LogoutServer(userid=294)        Elapse:24 ms
[2014-02-20 11:03:40(425)]        Invoke        BRAC_Release        Elapse:51 ms

作者: bdcn    时间: 2014-2-20 11:05
这是日志,看看有什么问题吗
作者: 廖斌    时间: 2014-2-20 11:31
日志没有问题。你昨天说的GetUserVideoWidth获取不到宽度的问题,我昨天在标准demo上面试过了,Java采集和显示模式确实获取不到,不过不影响视频的显示。实际上对于Java模式,标准demo中的CheckVideoStatus函数没有用到。
作者: bdcn    时间: 2014-2-20 11:40
                        if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
                                SurfaceHolder holder = myView.getHolder();
                                // 如果是采用内核视频显示(非Java驱动),则需要设置Surface的参数
                                if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
                                        holder.setFormat(PixelFormat.RGB_565);
                                        holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
                                }
                                Surface s = holder.getSurface();
                                anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
                                bSelfVideoOpened = true;
                        }

但是现在获取不到宽度,这段代码没法执行,视频不显示
作者: 廖斌    时间: 2014-2-20 11:47
bdcn 发表于 2014-2-20 11:40
if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
                                SurfaceHolder h ...

是什么视频不显示,本地视频还是远程?
作者: 廖斌    时间: 2014-2-20 11:55
廖斌 发表于 2014-2-20 11:47
是什么视频不显示,本地视频还是远程?

你视频采集和播放用的是Java模式还是内核模式?Java模式的话,不会涌动啊这端代码的
  1.   if (anychat.GetCameraState(-1) == 2 && anychat.GetUserVideoWidth(-1) != 0) {
  2.                                 SurfaceHolder holder = myView.getHolder();
  3.                                 // 如果是采用内核视频显示(非Java驱动),则需要设置Surface的参数
  4.                                 if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL) != AnyChatDefine.VIDEOSHOW_DRIVER_JAVA) {
  5.                                         holder.setFormat(PixelFormat.RGB_565);
  6.                                         holder.setFixedSize(anychat.GetUserVideoWidth(-1), anychat.GetUserVideoHeight(-1));
  7.                                 }
  8.                                 Surface s = holder.getSurface();
  9.                                 anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
  10.                                 bSelfVideoOpened = true;
  11.                         }
复制代码

作者: bdcn    时间: 2014-2-20 12:07
本地视频不显示
作者: 廖斌    时间: 2014-2-20 14:41
bdcn 发表于 2014-2-20 12:07
本地视频不显示

您用的是Java模式还是内核呢?如果是Java模式的话,调用到了
  1. myView.getHolder().addCallback(AnyChatCoreSDK.mCameraHelper);        
复制代码
吗?这行代码是直接打开摄像头
作者: bdcn    时间: 2014-2-20 14:52
我加了打印,看到这行代码执行了
作者: 廖斌    时间: 2014-2-20 15:06
bdcn 发表于 2014-2-20 14:52
我加了打印,看到这行代码执行了

这句代码是直接打开摄像头预览,照理说应该可以显示本地预览的。你本地surfaceview中布局中正常吧,有大小?背景透明?没有叠加在远程视频上面吧?
作者: bdcn    时间: 2014-2-20 15:09
大小为150x100,叠加在远程视频上面
作者: 廖斌    时间: 2014-2-20 15:54
本帖最后由 廖斌 于 2014-2-20 16:04 编辑
bdcn 发表于 2014-2-20 15:09
大小为150x100,叠加在远程视频上面


叠加显示需要将叠加在上面的surfaceview设置到最顶层(你的情况就是本地surfaceview)。在Activity的onCreate获取到surfaceview实例之后调用
  1.         surfaceview.setZOrderOnTop(true);
复制代码

作者: bdcn    时间: 2014-2-20 16:09
试了还是不行。问题的关键是anychat.GetUserVideoWidth(-1)一直等于0
作者: admin    时间: 2014-2-20 16:11
您好,用我们标准的demo程序,视频可以显示吗?
作者: bdcn    时间: 2014-2-20 16:13
没试过,估计能吧。我的项目其他模块都能正常显示,就是其中一个模块有问题
作者: admin    时间: 2014-2-20 16:17
建议您先运行一下我们标准的示例程序,看是否OK,确认我们的SDK是否可以在您的设备上正常工作?

可以运行最新版本SDK包里面的:AnyChatCallCenter.apk,也有示例源代码的,在SDK包的:src\AnyChatCallCenter目录下。
作者: bdcn    时间: 2014-2-20 17:31
标准的示例程序没问题
作者: admin    时间: 2014-2-20 17:49
建议您对比一下AnyChatCallCenter.apk的示例源代码,看看您的工程和示例工程有哪些差异,比如参数设置上是否有差异(HallActivity.java):

  1. // 根据配置文件配置视频参数
  2. private void ApplyVideoConfig() {
  3.     ......
  4. }
复制代码
再对比一下视频surface初始化(VideoActivity.java):
  1. private void initView() {
  2.     ......
  3. }
复制代码

作者: bdcn    时间: 2014-2-20 21:44
比对过了,逻辑没问题,ApplyVideoConfig()也调用了
作者: admin    时间: 2014-2-20 22:17
在“ApplyVideoConfig”里面,所有的参数是从配置文件中读取的,您还得对比一下,这些参数是否相一致,我怀疑问题就在这个地方?
作者: bdcn    时间: 2014-2-21 10:23
//  根据配置文件配置视频参数
        private void ApplyVideoConfig() {
                ConfigEntity configEntity = ConfigService.LoadConfig(this);
                if(configEntity.configMode == 1)                // 自定义视频参数配置
                {
                        // 设置本地视频编码的码率(如果码率为0,则表示使用质量优先模式)
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL, configEntity.videoBitrate);
                        if(configEntity.videoBitrate==0)
                        {
                                // 设置本地视频编码的质量
                                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL, configEntity.videoQuality);
                        }
                        // 设置本地视频编码的帧率
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL, configEntity.videoFps);
                        // 设置本地视频编码的关键帧间隔
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL, configEntity.videoFps*4);
                        // 设置本地视频采集分辨率
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL, configEntity.resolution_width);
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_HEIGHTCTRL, configEntity.resolution_height);
                        // 设置视频编码预设参数(值越大,编码质量越高,占用CPU资源也会越高)
                        AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL, configEntity.videoPreset);
                }
                // 让视频参数生效
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM, configEntity.configMode);
                // P2P设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC, configEntity.enableP2P);
                // 本地视频Overlay模式设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY, configEntity.videoOverlay);
                // 回音消除设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL, configEntity.enableAEC);
                // 平台硬件编码设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC, configEntity.useHWCodec);
                // 视频旋转模式设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL, configEntity.videorotatemode);
                // 视频采集驱动设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER, configEntity.videoCapDriver);
                // 本地视频采集偏色修正设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA, configEntity.fixcolordeviation);
                // 视频显示驱动设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL, configEntity.videoShowDriver);
                // 音频播放驱动设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_PLAYDRVCTRL, configEntity.audioPlayDriver);
                // 音频采集驱动设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_RECORDDRVCTRL, configEntity.audioRecordDriver);
                // 视频GPU渲染设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_GPUDIRECTRENDER, configEntity.videoShowGPURender);
                // 本地视频自动旋转设置
                AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION, configEntity.videoAutoRotation);
        }

        public static ConfigEntity LoadConfig(Context context)
        {
                ConfigEntity configEntity = new ConfigEntity();
            SharedPreferences  share = context.getSharedPreferences("perference", Context.MODE_WORLD_WRITEABLE);  

        configEntity.name = share.getString("name", "");
        configEntity.password = share.getString("password", "");
        configEntity.IsSaveNameAndPw = share.getString("IsSaveNameAndPw", "").equals("1") ? true : false;
      
//      configEntity.ip = share.getString("ip", "192.168.7.95");
        configEntity.ip = share.getString("ip", "192.168.8.209");
//      configEntity.ip = share.getString("ip", "192.168.7.115");
        configEntity.port = share.getInt("port", 8906);
        
        configEntity.configMode = share.getInt("configMode", ConfigEntity.VIDEO_MODE_SERVERCONFIG);
        configEntity.resolution_width = share.getInt("resolution_width", 320);
        configEntity.resolution_height = share.getInt("resolution_height", 240);
        configEntity.videoBitrate = share.getInt("videoBitrate", 200*1000);
        configEntity.videoFps = share.getInt("videoFps", 20);
        configEntity.videoQuality = share.getInt("videoQuality", ConfigEntity.VIDEO_QUALITY_BEST);
        configEntity.videoPreset = share.getInt("videoPreset", 3);
        configEntity.videoOverlay = share.getInt("videoOverlay", 1);
        configEntity.videorotatemode = share.getInt("VideoRotateMode", 0);
        configEntity.videoCapDriver = share.getInt("VideoCapDriver", AnyChatDefine.VIDEOCAP_DRIVER_JAVA);
        configEntity.fixcolordeviation = share.getInt("FixColorDeviation", 0);
        configEntity.videoShowGPURender = share.getInt("videoShowGPURender", 0);
        configEntity.videoAutoRotation = share.getInt("videoAutoRotation", 1);

        configEntity.enableP2P = share.getInt("enableP2P", 1);
        configEntity.useARMv6Lib = share.getInt("useARMv6Lib", 0);
        configEntity.enableAEC = share.getInt("enableAEC", 1);
        configEntity.useHWCodec = share.getInt("useHWCodec", 0);
        configEntity.videoShowDriver = share.getInt("videoShowDriver", AnyChatDefine.VIDEOSHOW_DRIVER_JAVA);
        configEntity.audioPlayDriver = share.getInt("audioPlayDriver", AnyChatDefine.AUDIOPLAY_DRIVER_JAVA);   
        configEntity.audioRecordDriver = share.getInt("audioRecordDriver", AnyChatDefine.AUDIOREC_DRIVER_JAVA);
                return configEntity;
        }

这是配置
作者: 廖斌    时间: 2014-2-21 10:26
如果用的是Java模式,调试一下,在AnyChatCameraer的surfaceCreated中打个断点,看执行情况
作者: bdcn    时间: 2014-2-21 12:26
// 如果是采用Java视频采集,则需要设置Surface的CallBack
if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER) == AnyChatDefine.VIDEOCAP_DRIVER_JAVA) {
      selfSurfaceHolder.addCallback(AnyChatCoreSDK.mCameraHelper);
}

上面这段代码执行了,但是下面这段代码没执行

@Override
        public void surfaceCreated(SurfaceHolder holder) {
                try {
                        mCamera = Camera.open(iCurrentCameraId);
                        currentHolder = holder;
                        mCamera.setPreviewDisplay(holder);//set the surface to be used for live preview
                        initCamera();
                } catch (Exception ex) {
                        if(null != mCamera) {
                                mCamera.release();
                                mCamera = null;
                                mVideoPixfmt = -1;
                        }
                }
        }
作者: 廖斌    时间: 2014-2-21 12:34
bdcn 发表于 2014-2-21 12:26
// 如果是采用Java视频采集,则需要设置Surface的CallBack
if(AnyChatCoreSDK.GetSDKOptionInt(AnyChatDef ...

这种情况通常原因有两方面
1、调用selfSurfaceHolder.addCallback(AnyChatCoreSDK.mCameraHelper);时机不对。需要在activity的oncreate中调用

2、selfSurfaceHolder不可见(invisiable,gone或者被遮挡)

上次说selfSurfaceHolder要设置setZOrderOnTop(true),远程surfaceview没有设置吧?远程设置了的话,那就没效果了




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