AnyChat技术支持论坛

标题: BRAC_StreamRecordCtrlEx相应的服务器端“设置服务器录像通知回调函数”是哪个? [打印本页]

作者: lincy    时间: 2015-4-20 10:43
标题: BRAC_StreamRecordCtrlEx相应的服务器端“设置服务器录像通知回调函数”是哪个?
我在客户端调用BRAC_StreamRecordCtrlEx进行服务器端录制,请问服务器端的“设置服务器录像通知回调函数”是哪个?

我模仿BRAS_SetOnServerRecordCallBack,在SDK文件中加了设置服务器录像通知回调函数 BRAS_SetOnServerRecordExCallBack,但是报错:
无法在 DLL“AnyChatServerSDK.dll”中找到名为“BRAS_SetOnServerRecordExCallBack”的入口点。

请问应该是哪个函数?
作者: lincy    时间: 2015-4-20 11:01
不好意思,我已经明白了,直接用BRAS_SetOnServerRecordCallBack设置就可以了。
作者: lincy    时间: 2015-4-20 11:33
本帖最后由 lincy 于 2015-4-20 11:40 编辑

还有个问题,调用BRAC_StreamRecordCtrlEx后,为啥回调函数里得到的lpFileName、lpUserStr都为null,而dwUserId是对的。

而且有时候能触发回调函数,有时候不触发。
作者: 佰锐科技-邵光清    时间: 2015-4-20 11:40
您好,,,方便发具体日志过来参考一下不?
作者: lincy    时间: 2015-4-20 11:41
你好,日志如下:
[2015-04-20 11:17:24(397)]        ---------------------------AnyChat Platform Core SDK Client Log---------------------------
[2015-04-20 11:17:24(398)]        Load BRAnyChatCore.dll success!(V5.2 Build Time:Feb 10 2015 14:09:19)
[2015-04-20 11:17:24(447)]        Load BRMiscUtil.dll success!(V5.2 Build Time:Feb 10 2015 14:07:32)
[2015-04-20 11:17:24(477)]        Load BRMediaUtil.dll success!(V5.2 Build Time:Feb 10 2015 14:07:48)
[2015-04-20 11:17:24(479)]        Load BRMediaShow.dll success!(V5.2 Build Time:Feb 10 2015 14:07:40)
[2015-04-20 11:17:24(483)]        Load BRMediaCore.dll success!(V5.2 Build Time:Feb 10 2015 14:08:00)
[2015-04-20 11:17:24(514)]        Apply video parameter:1280x720, bitrate:600000, quality:0, gop:20, fps:12, preset:3, codec:0
[2015-04-20 11:17:24(516)]        Invoke        BRAC_Connect(192.168.52.144,8906)=0
[2015-04-20 11:17:24(516)]        Invoke        LoginServer(username=lincy1)
[2015-04-20 11:17:24(517)]        Invoke        EnterRoom(lincy1)
[2015-04-20 11:17:24(573)]        CheckClientSocketLink         Connect(ip=192.168.52.144,port=8906)
[2015-04-20 11:17:24(724)]        Server version: V5.2(Build Time:2015-02-10 14:08:34, Server OS:Windows)
[2015-04-20 11:17:24(930)]        Message        OnConnect(bSuccess:1, errorcode=0)
[2015-04-20 11:17:25(361)]        Message        OnLoginSystem(userid=4,errorcode=0,username=lincy1), msg deliver worked(1)
[2015-04-20 11:17:25(362)]        Server running time: 10 days, 0 hours, 23 minutes, license mode:0
[2015-04-20 11:17:25(403)]        Connection to streaming media server successfully!(udp delay:23ms)
[2015-04-20 11:17:25(613)]        Message        OnEnterRoom(roomid=217,errorcode=0,siteindex=0)
[2015-04-20 11:17:25(614)]        Message        OnReceiveOnlineUser(count=1,roomid=217)
[2015-04-20 11:17:25(614)]        Invoke        BRAC_SetVideoPos(dwUserId:-1, hWnd:0x610dc, l:0, t:0, r:340, b:284)
[2015-04-20 11:17:25(615)]        Invoke        UserCameraControl(userid=-1,bOpen=1)
[2015-04-20 11:17:25(615)]        Invoke        UserSpeakControl(userid=-1,bOpen=1)
[2015-04-20 11:17:25(632)]        WaveIn Audio Capture Driver(麦克风 (HD Webcam C270))
[2015-04-20 11:17:25(633)]        Audio Init, error:0, device:0, 1, 16000, 16, capmode:0
[2015-04-20 11:17:25(633)]        Audio codec init, handle:1, 11, 1, 16000, 16, 15850
[2015-04-20 11:17:25(644)]        Audio Playback Device Init(0, 1, 16000, 16), WaveOut Playback Driver
[2015-04-20 11:17:25(666)]        Audio FX Status: VAD:1, NS:1, AGC:1, AEC:1
[2015-04-20 11:17:25(742)]        MinCroppingSize(640, 480)        MaxCroppingSize(640, 480)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(743)]        MinCroppingSize(160, 120)        MaxCroppingSize(160, 120)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(743)]        MinCroppingSize(176, 144)        MaxCroppingSize(176, 144)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(744)]        MinCroppingSize(320, 176)        MaxCroppingSize(320, 176)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(745)]        MinCroppingSize(320, 240)        MaxCroppingSize(320, 240)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(745)]        MinCroppingSize(352, 288)        MaxCroppingSize(352, 288)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(746)]        MinCroppingSize(432, 240)        MaxCroppingSize(432, 240)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(746)]        MinCroppingSize(544, 288)        MaxCroppingSize(544, 288)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(747)]        MinCroppingSize(640, 360)        MaxCroppingSize(640, 360)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(747)]        MinCroppingSize(752, 416)        MaxCroppingSize(752, 416)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(748)]        MinCroppingSize(800, 448)        MaxCroppingSize(800, 448)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(748)]        MinCroppingSize(800, 600)        MaxCroppingSize(800, 600)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(749)]        MinCroppingSize(864, 480)        MaxCroppingSize(864, 480)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(749)]        MinCroppingSize(960, 544)        MaxCroppingSize(960, 544)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(750)]        MinCroppingSize(960, 720)        MaxCroppingSize(960, 720)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(750)]        MinCroppingSize(1024, 576)        MaxCroppingSize(1024, 576)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(751)]        MinCroppingSize(1184, 656)        MaxCroppingSize(1184, 656)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(751)]        MinCroppingSize(1280, 720)        MaxCroppingSize(1280, 720)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(752)]        MinCroppingSize(1280, 960)        MaxCroppingSize(1280, 960)        Format(RGB24, 0x0)
[2015-04-20 11:17:25(753)]        MinCroppingSize(640, 480)        MaxCroppingSize(640, 480)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(753)]        MinCroppingSize(160, 120)        MaxCroppingSize(160, 120)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(754)]        MinCroppingSize(176, 144)        MaxCroppingSize(176, 144)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(754)]        MinCroppingSize(320, 176)        MaxCroppingSize(320, 176)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(754)]        MinCroppingSize(320, 240)        MaxCroppingSize(320, 240)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(755)]        MinCroppingSize(352, 288)        MaxCroppingSize(352, 288)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(755)]        MinCroppingSize(432, 240)        MaxCroppingSize(432, 240)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(756)]        MinCroppingSize(544, 288)        MaxCroppingSize(544, 288)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(756)]        MinCroppingSize(640, 360)        MaxCroppingSize(640, 360)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(757)]        MinCroppingSize(752, 416)        MaxCroppingSize(752, 416)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(757)]        MinCroppingSize(800, 448)        MaxCroppingSize(800, 448)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(758)]        MinCroppingSize(800, 600)        MaxCroppingSize(800, 600)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(758)]        MinCroppingSize(864, 480)        MaxCroppingSize(864, 480)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(759)]        MinCroppingSize(960, 544)        MaxCroppingSize(960, 544)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(759)]        MinCroppingSize(960, 720)        MaxCroppingSize(960, 720)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(760)]        MinCroppingSize(1024, 576)        MaxCroppingSize(1024, 576)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(760)]        MinCroppingSize(1184, 656)        MaxCroppingSize(1184, 656)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(766)]        MinCroppingSize(1280, 720)        MaxCroppingSize(1280, 720)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(767)]        MinCroppingSize(1280, 960)        MaxCroppingSize(1280, 960)        Format(YUV420P, 0x30323449)
[2015-04-20 11:17:25(768)]        Video Config Size(1280, 720)        Format(RGB24, 12fps)
[2015-04-20 11:17:26(100)]        video init finish:1280x720, RGB24, fps:12
[2015-04-20 11:17:26(104)]        Message        OnUserEnterRoom(userid=3,nickname=customerTTTNETPF_600500_1_321043067856330650_100003,siteindex=1)
[2015-04-20 11:17:26(318)]        Invoke        BRAC_SetVideoPos(dwUserId:3, hWnd:0x330dbe, l:0, t:0, r:557, b:300)
[2015-04-20 11:17:26(319)]        Invoke        UserCameraControl(userid=3,bOpen=1)
[2015-04-20 11:17:26(319)]        Invoke        UserSpeakControl(userid=3,bOpen=1)
[2015-04-20 11:17:26(564)]        On Remote UserCameraControl(dwUserId:3, bOpen:1)
[2015-04-20 11:17:26(564)]        On Remote UserSpeakControl(dwUserId:3, bOpen:1)
[2015-04-20 11:17:26(605)]        Message        OnP2PConnectState(userid=3, state=1)
[2015-04-20 11:17:26(735)]        Message        OnP2PConnectState(userid=3, state=3)
[2015-04-20 11:17:27(668)]        video codec init:codec:1, 12fps, 1280x720, bitrate:600kbps, quality:0, preset:3, gop:20, handle:3
[2015-04-20 11:17:28(031)]        userid(3) video decode delay:0ms
[2015-04-20 11:17:31(465)]        Invoke        StreamRecordCtrlEx(3, 1, 0x137, 0, )=0
[2015-04-20 11:17:34(106)]        Invoke        StreamRecordCtrlEx(3, 0, 0x137, 0, )=0
[2015-04-20 11:17:51(631)]        Invoke        StreamRecordCtrlEx(3, 1, 0x137, 0, )=0
[2015-04-20 11:17:56(478)]        Invoke        StreamRecordCtrlEx(3, 0, 0x137, 0, )=0
[2015-04-20 11:18:34(347)]        Invoke        StreamRecordCtrlEx(3, 1, 0x137, 0, )=0
[2015-04-20 11:18:44(875)]        Invoke        StreamRecordCtrlEx(3, 0, 0x137, 0, )=0
[2015-04-20 11:21:49(087)]        Message        OnP2PConnectState(userid=3, state=2)
[2015-04-20 11:21:49(247)]        Message        OnUserLeaveRoom(userid=3,siteindex=1)
[2015-04-20 11:32:29(867)]        Invoke        LeaveRoom(roomid=-1)        Elapse:1373 ms
[2015-04-20 11:32:29(871)]        Message        OnLinkClose(reason=2, dwErrorCode:105)

作者: 佰锐科技-邵光清    时间: 2015-4-20 11:47
有时候能触发回调函数,有时候不触发
请问没有触发的时候,是不是录制时间很短?
作者: lincy    时间: 2015-4-20 12:32
佰锐科技-邵光清 发表于 2015-4-20 11:47
请问没有触发的时候,是不是录制时间很短?

是的,录制时间是较短
作者: lincy    时间: 2015-4-20 12:33
录制时间一定要超过一定的时长才行吗?
作者: 佰锐科技-邵光清    时间: 2015-4-20 12:42
lincy 发表于 2015-4-20 12:33
录制时间一定要超过一定的时长才行吗?

您好,录制时间超过5秒才能生成录制文件。
作者: admin    时间: 2015-4-20 12:47
我模仿BRAS_SetOnServerRecordCallBack,在SDK文件中加了设置服务器录像通知回调函数 BRAS_SetOnServerRecordExCallBack,但是报错:
无法在 DLL“AnyChatServerSDK.dll”中找到名为“BRAS_SetOnServerRecordExCallBack”的入口点。
您好,请升级AnyChat Server SDK到V5.2版本,以前的老版本是不支持“OnServerRecordExCallBack”回调函数的。
作者: lincy    时间: 2015-4-20 13:30
另外,得到的lpFileName、lpUserStr都为null是为什么呢?

录制结束代码为:AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, false, flags, 0, ChannelId); //结束录像


回调函数定义为 :   public delegate void OnServerRecordExCallBack(int dwUserId, string lpFileName, int dwElapse, int dwFlags, int dwParam, string lpUserStr, int dwRecordServerId, IntPtr lpCallBackUserValue);

作者: lincy    时间: 2015-4-20 13:33
佰锐科技-邵光清 发表于 2015-4-20 12:42
您好,录制时间超过5秒才能生成录制文件。

好的,明白了
作者: lincy    时间: 2015-4-20 13:36
本帖最后由 lincy 于 2015-4-20 13:37 编辑
admin 发表于 2015-4-20 12:47
您好,请升级AnyChat Server SDK到V5.2版本,以前的老版本是不支持“OnServerRecordExCallBack”回调函数的 ...


请问我应该用哪个sdk包,我目前用的是AnyChatCoreSDK_Win32_r4509。客户端是5.2,服务器端是5.1.

作者: 佰锐科技-杨子鳄    时间: 2015-4-20 13:39
lincy 发表于 2015-4-20 13:36
请问我应该用哪个sdk包,我目前用的是AnyChatCoreSDK_Win32_r4509。客户端是5.2,服务器端是5.1.

AnyChatCoreSDK_Win32_r4509 是5.2的版本支持OnServerRecordExCallBack”回调函数
作者: admin    时间: 2015-4-20 13:45
您好,服务器也建议升级到V5.2版本。
作者: lincy    时间: 2015-4-20 13:59
佰锐科技-杨子鳄 发表于 2015-4-20 13:39
AnyChatCoreSDK_Win32_r4509 是5.2的版本支持OnServerRecordExCallBack”回调函数

好的,谢谢,貌似是debug目录下的dll文件还是老版的,所以是5.1
作者: lincy    时间: 2015-4-20 13:59
admin 发表于 2015-4-20 13:45
您好,服务器也建议升级到V5.2版本。

好的,谢谢
作者: lincy    时间: 2015-4-20 14:10
服务器现在也是5.2了,然后我应该怎么设置回调函数?
作者: lincy    时间: 2015-4-20 14:17
需要在sdk文件里 导入 类似[DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnServerRecordCallBack", CallingConvention = CallingConvention.Cdecl)]
                public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordCallBack function, int lpUserValue);
的接口吗?
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 14:22
您好。是接口。您如果有什么不清楚的请参考AnyChatCoreSDK_Win32_r4509 /src/server/c#  业务服务器的开发
作者: lincy    时间: 2015-4-20 14:22
目前,我是这样改的:// 设置服务器录像通知回调函数
                //BRAS_API DWORD BRAS_SetOnServerRecordCallBack(BRAS_OnServerRecord_CallBack lpFunction, LPVOID lpUserValue=NULL);
                [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnServerRecordCallBack", CallingConvention = CallingConvention.Cdecl)]
                        public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordExCallBack function, int lpUserValue);

但是lpFileName、lpUserStr还是为null
作者: admin    时间: 2015-4-20 14:23
您好,请确认客户端、核心服务器、业务服务器全部是最新的V5.2版本,谢谢。
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 14:25
本帖最后由 佰锐科技-杨子鳄 于 2015-4-20 14:27 编辑
lincy 发表于 2015-4-20 14:22
目前,我是这样改的:// 设置服务器录像通知回调函数
                //BRAS_API DWORD BRAS_SetOnServerRecordCallBack ...


您好。您的录制是否成功。如果不成功的话lpFileName、lpUserStr是为null
作者: lincy    时间: 2015-4-20 14:34
佰锐科技-杨子鳄 发表于 2015-4-20 14:25
您好。您的录制是否成功。如果不成功的话lpFileName、lpUserStr是为null

录制应该是成功的,dwUserId是能返回的,录像文件也生成了,可以正常播放。
作者: lincy    时间: 2015-4-20 14:37
我看过AnyChatCoreSDK_Win32_r4509 /src/server/c# 中的AnyChatServerSDK.cs文件了,其中也只有// 设置服务器录像通知回调函数
                //BRAS_API DWORD BRAS_SetOnServerRecordCallBack(BRAS_OnServerRecord_CallBack lpFunction, LPVOID lpUserValue=NULL);
                [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnServerRecordCallBack", CallingConvention = CallingConvention.Cdecl)]
                public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordCallBack function, int lpUserValue);这个接口定义
没有//设置服务器录像通知回调函数(扩展)的定义

作者: lincy    时间: 2015-4-20 14:40
admin 发表于 2015-4-20 14:23
您好,请确认客户端、核心服务器、业务服务器全部是最新的V5.2版本,谢谢。

您是说要用AnyChatCoreSDK_Win32_r4568这个SDK包吗?
作者: lincy    时间: 2015-4-20 14:46
那我换一个问法吧:public delegate void OnServerRecordExCallBack(int dwUserId, string lpFileName, int dwElapse, int dwFlags, int dwParam, string lpUserStr, int dwRecordServerId, IntPtr lpCallBackUserValue)这个委托怎么用?
是这个public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordCallBack function, int lpUserValue)接口的参数吗?
还是另外要声明一个接口?
作者: lincy    时间: 2015-4-20 14:48
AnyChatCoreSDK_Win32_r4509 /src/server/c# 中的AnyChatServerSDK.cs文件中没有相关代码
AnyChatCoreSDK_Win32_r4568 /src/server/c# 中的AnyChatServerSDK.cs文件中也没有
作者: lincy    时间: 2015-4-20 15:06
类似
  // 设置用户注销回调函数
        //BRAS_API DWORD BRAS_SetOnUserLogoutActionCallBack(BRAS_OnUserLogoutAction_CallBack lpFunction, LPVOID lpUserValue=NULL);
        [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnUserLogoutActionCallBack", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BRAS_SetOnUserLogoutActionCallBack(OnUserLogoutActionCallBack function, int userValue);
               
// 设置用户注销回调函数(扩展)
        //BRAS_API DWORD BRAS_SetOnUserLogoutActionExCallBack(BRAS_OnUserLogoutActionEx_CallBack lpFunction, LPVOID lpUserValue=NULL);
        [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnUserLogoutActionExCallBack", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BRAS_SetOnUserLogoutActionExCallBack(OnUserLogoutActionExCallBack function, int userValue);
这样两个接口
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 15:11
lincy 发表于 2015-4-20 14:48
AnyChatCoreSDK_Win32_r4509 /src/server/c# 中的AnyChatServerSDK.cs文件中没有相关代码
AnyChatCoreSDK_ ...

// 服务器录像回调函数定义(扩展)
        //typedef void (CALLBACK * BRAS_OnServerRecordEx_CallBack)(DWORD dwUserId, LPCTSTR lpFileName, DWORD dwElapse, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, DWORD dwRecordServerId, LPVOID lpUserValue);
        public delegate void OnServerRecordExCallBack(int dwUserId, string lpFileName, int dwElapse, int dwFlags, int dwParam, string lpUserStr, int dwRecordServerId, IntPtr lpCallBackUserValue);

作者: 佰锐科技-杨子鳄    时间: 2015-4-20 15:20
您好,您想知道函数的调用请参考AnyChatCoreSDK_Win32_r4509 /src/server/c#/AnyChatServerSDK.cs
作者: lincy    时间: 2015-4-20 15:20
本帖最后由 lincy 于 2015-4-20 15:22 编辑
佰锐科技-杨子鳄 发表于 2015-4-20 15:11
// 服务器录像回调函数定义(扩展)
        //typedef void (CALLBACK * BRAS_OnServerRecordEx_CallBa ...


是的,这个委托定义是有的,但是没有使用它的代码
没有类似// 设置用户注销回调函数(扩展)
        //BRAS_API DWORD BRAS_SetOnUserLogoutActionExCallBack(BRAS_OnUserLogoutActionEx_CallBack lpFunction, LPVOID lpUserValue=NULL);
         [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnUserLogoutActionExCallBack", CallingConvention = CallingConvention.Cdecl)]
         public static extern int BRAS_SetOnUserLogoutActionExCallBack(OnUserLogoutActionExCallBack function, int userValue);
的// 设置服务器录像回调函数定义(扩展)接口
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 15:26
lincy 发表于 2015-4-20 15:20
是的,这个委托定义是有的,但是没有使用它的代码
没有类似// 设置用户注销回调函数(扩展)
        ...

用户注销回调函数定义
        //typedef void (CALLBACK* BRAS_OnUserLogoutAction_CallBack)(DWORD dwUserId, LPVOID lpUserValue);
        public delegate void OnUserLogoutActionCallBack(int userId, int userValue);
               
                // 用户注销回调函数定义(扩展)
        //typedef void (CALLBACK* BRAS_OnUserLogoutActionEx_CallBack)(DWORD dwUserId, DWORD dwErrorCode, LPVOID lpUserValue);
        public delegate void OnUserLogoutActionExCallBack(int userId, int errorcode, int userValue);

作者: lincy    时间: 2015-4-20 15:30
我的意思是:有没有类似// 设置用户注销回调函数(扩展)
        //BRAS_API DWORD BRAS_SetOnUserLogoutActionExCallBack(BRAS_OnUserLogoutActionEx_CallBack lpFunction, LPVOID lpUserValue=NULL);
        [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnUserLogoutActionExCallBack", CallingConvention = CallingConvention.Cdecl)]
        public static extern int BRAS_SetOnUserLogoutActionExCallBack(OnUserLogoutActionExCallBack function, int userValue);

// 设置服务器录像回调函数(扩展)
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 16:23
本帖最后由 佰锐科技-杨子鳄 于 2015-4-20 16:26 编辑

您参考 SystemSettingServer.cs

%OAG6H2IFKJ)U4QE74XJIPP.jpg (174.21 KB, 下载次数: 2557)

%OAG6H2IFKJ)U4QE74XJIPP.jpg

作者: lincy    时间: 2015-4-20 16:34
本帖最后由 lincy 于 2015-4-20 16:37 编辑
佰锐科技-杨子鳄 发表于 2015-4-20 16:23
您参考 SystemSettingServer.cs


这里只有 录像成功回调函数定义,没有 录像成功扩展回调函数定义

这两个回调函数的参数是不一样的,我现在要用 录像成功扩展回调函数(需要用到里面的UserStr)
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 16:39
lincy 发表于 2015-4-20 16:34
这里只有 录像成功回调函数定义,没有 录像成功扩展回调函数定义

这两个回调函数的参数是不一样的, ...

您好。参考录像成功回调函数定义加上去。参数要赋正确。
作者: lincy    时间: 2015-4-20 16:47
本帖最后由 lincy 于 2015-4-20 16:48 编辑
佰锐科技-杨子鳄 发表于 2015-4-20 16:39
您好。参考录像成功回调函数定义加上去。参数要赋正确。


那么,我应该把public delegate void OnServerRecordExCallBack(int dwUserId, string lpFileName, int dwElapse, int dwFlags, int dwParam, string lpUserStr, int dwRecordServerId, IntPtr lpCallBackUserValue)这个委托作为public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordCallBack function, int lpUserValue)的第一个参数吗?

也就是是否可写成public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordExCallBack  function, int lpUserValue)?
作者: lincy    时间: 2015-4-20 17:00
也就是“设置服务器录像通知回调函数(扩展)”的API是哪个?,在SDK.cs里找不到
作者: 佰锐科技-杨子鳄    时间: 2015-4-20 17:06
lincy 发表于 2015-4-20 17:00
也就是“设置服务器录像通知回调函数(扩展)”的API是哪个?,在SDK.cs里找不到

// 设置服务器录像通知回调函数
                //BRAS_API DWORD BRAS_SetOnServerRecordCallBack(BRAS_OnServerRecord_CallBack lpFunction, LPVOID lpUserValue=NULL);
                [DllImport(AnyChatServerSDKDll, EntryPoint = "BRAS_SetOnServerRecordCallBack", CallingConvention = CallingConvention.Cdecl)]
                public static extern int BRAS_SetOnServerRecordCallBack(OnServerRecordCallBack function, int lpUserValue);
作者: lincy    时间: 2015-4-20 17:11
佰锐科技-杨子鳄 发表于 2015-4-20 17:06
// 设置服务器录像通知回调函数
                //BRAS_API DWORD BRAS_SetOnServerRecordCallBack(BRAS_OnServerReco ...

但是我现在是要设置对应于BRAC_StreamRecordCtrlEx这个录像方式的回调函数,不是BRAC_StreamRecordCtrl的回调函数,两者返回的参数是不一样的。
作者: admin    时间: 2015-4-20 21:24
我现在是要设置对应于BRAC_StreamRecordCtrlEx这个录像方式的回调函数

您好,请使用这个API来设置:BRAS_SetCallBack(BRAS_CBTYPE_SERVERRECORDEX,  BRAS_OnServerRecordEx_CallBack, ...);
作者: lincy    时间: 2015-4-21 09:21
admin 发表于 2015-4-20 21:24
您好,请使用这个API来设置:BRAS_SetCallBack(BRAS_CBTYPE_SERVERRECORDEX,  BRAS_OnServerRecordEx_Cal ...

好的,谢谢,我试试
作者: lincy    时间: 2015-4-21 11:31
admin 发表于 2015-4-20 21:24
您好,请使用这个API来设置:BRAS_SetCallBack(BRAS_CBTYPE_SERVERRECORDEX,  BRAS_OnServerRecordEx_Cal ...

我用了这,现在回调正常了。
但是在客户端调用StreamRecordCtrlEx时,参数userstr为“”,但其实应该是有值的。日志如下:
[2015-04-21 11:32:39(029)]        ---------------------------AnyChat Platform Core SDK Client Log---------------------------
[2015-04-21 11:32:39(030)]        Load BRAnyChatCore.dll success!(V5.2 Build Time:Feb 10 2015 14:09:19)
[2015-04-21 11:32:39(036)]        Load BRMiscUtil.dll success!(V5.2 Build Time:Feb 10 2015 14:07:32)
[2015-04-21 11:32:39(067)]        Load BRMediaUtil.dll success!(V5.2 Build Time:Feb 10 2015 14:07:48)
[2015-04-21 11:32:39(068)]        Load BRMediaShow.dll success!(V5.2 Build Time:Feb 10 2015 14:07:40)
[2015-04-21 11:32:39(069)]        Load BRMediaCore.dll success!(V5.2 Build Time:Feb 10 2015 14:08:00)
[2015-04-21 11:32:39(083)]        Apply video parameter:1280x720, bitrate:600000, quality:0, gop:20, fps:12, preset:3, codec:0
[2015-04-21 11:32:39(084)]        Invoke        BRAC_Connect(192.168.52.144,8906)=0
[2015-04-21 11:32:39(084)]        Invoke        LoginServer(username=lincy)
[2015-04-21 11:32:39(085)]        Invoke        EnterRoom(lincy)
[2015-04-21 11:32:39(176)]        CheckClientSocketLink         Connect(ip=192.168.52.144,port=8906)
[2015-04-21 11:32:39(297)]        Server version: V5.2(Build Time:2015-02-10 14:08:34, Server OS:Windows)
[2015-04-21 11:32:39(487)]        Message        OnConnect(bSuccess:1, errorcode=0)
[2015-04-21 11:32:39(938)]        Message        OnLoginSystem(userid=24,errorcode=0,username=lincy), msg deliver worked(1)
[2015-04-21 11:32:39(939)]        Server running time: 0 days, 18 hours, 3 minutes, license mode:0
[2015-04-21 11:32:39(970)]        Connection to streaming media server successfully!(udp delay:16ms)
[2015-04-21 11:32:40(180)]        Message        OnEnterRoom(roomid=83,errorcode=0,siteindex=0)
[2015-04-21 11:32:40(181)]        Message        OnReceiveOnlineUser(count=1,roomid=83)
[2015-04-21 11:32:40(181)]        Invoke        BRAC_SetVideoPos(dwUserId:-1, hWnd:0x311ca, l:0, t:0, r:340, b:284)
[2015-04-21 11:32:40(183)]        Invoke        UserCameraControl(userid=-1,bOpen=1)
[2015-04-21 11:32:40(183)]        Invoke        UserSpeakControl(userid=-1,bOpen=1)
[2015-04-21 11:32:40(201)]        WaveIn Audio Capture Driver(麦克风 (HD Webcam C270))
[2015-04-21 11:32:40(202)]        Audio Init, error:0, device:0, 1, 16000, 16, capmode:0
[2015-04-21 11:32:40(203)]        Audio codec init, handle:1, 11, 1, 16000, 16, 15850
[2015-04-21 11:32:40(215)]        Audio Playback Device Init(0, 1, 16000, 16), WaveOut Playback Driver
[2015-04-21 11:32:40(245)]        Audio FX Status: VAD:1, NS:1, AGC:1, AEC:1
[2015-04-21 11:32:40(311)]        MinCroppingSize(640, 480)        MaxCroppingSize(640, 480)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(311)]        MinCroppingSize(160, 120)        MaxCroppingSize(160, 120)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(312)]        MinCroppingSize(176, 144)        MaxCroppingSize(176, 144)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(312)]        MinCroppingSize(320, 176)        MaxCroppingSize(320, 176)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(313)]        MinCroppingSize(320, 240)        MaxCroppingSize(320, 240)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(313)]        MinCroppingSize(352, 288)        MaxCroppingSize(352, 288)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(314)]        MinCroppingSize(432, 240)        MaxCroppingSize(432, 240)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(314)]        MinCroppingSize(544, 288)        MaxCroppingSize(544, 288)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(315)]        MinCroppingSize(640, 360)        MaxCroppingSize(640, 360)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(315)]        MinCroppingSize(752, 416)        MaxCroppingSize(752, 416)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(316)]        MinCroppingSize(800, 448)        MaxCroppingSize(800, 448)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(316)]        MinCroppingSize(800, 600)        MaxCroppingSize(800, 600)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(317)]        MinCroppingSize(864, 480)        MaxCroppingSize(864, 480)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(317)]        MinCroppingSize(960, 544)        MaxCroppingSize(960, 544)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(318)]        MinCroppingSize(960, 720)        MaxCroppingSize(960, 720)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(318)]        MinCroppingSize(1024, 576)        MaxCroppingSize(1024, 576)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(319)]        MinCroppingSize(1184, 656)        MaxCroppingSize(1184, 656)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(319)]        MinCroppingSize(1280, 720)        MaxCroppingSize(1280, 720)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(320)]        MinCroppingSize(1280, 960)        MaxCroppingSize(1280, 960)        Format(RGB24, 0x0)
[2015-04-21 11:32:40(320)]        MinCroppingSize(640, 480)        MaxCroppingSize(640, 480)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(321)]        MinCroppingSize(160, 120)        MaxCroppingSize(160, 120)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(321)]        MinCroppingSize(176, 144)        MaxCroppingSize(176, 144)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(322)]        MinCroppingSize(320, 176)        MaxCroppingSize(320, 176)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(322)]        MinCroppingSize(320, 240)        MaxCroppingSize(320, 240)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(323)]        MinCroppingSize(352, 288)        MaxCroppingSize(352, 288)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(323)]        MinCroppingSize(432, 240)        MaxCroppingSize(432, 240)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(324)]        MinCroppingSize(544, 288)        MaxCroppingSize(544, 288)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(325)]        MinCroppingSize(640, 360)        MaxCroppingSize(640, 360)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(325)]        MinCroppingSize(752, 416)        MaxCroppingSize(752, 416)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(326)]        MinCroppingSize(800, 448)        MaxCroppingSize(800, 448)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(326)]        MinCroppingSize(800, 600)        MaxCroppingSize(800, 600)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(327)]        MinCroppingSize(864, 480)        MaxCroppingSize(864, 480)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(327)]        MinCroppingSize(960, 544)        MaxCroppingSize(960, 544)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(328)]        MinCroppingSize(960, 720)        MaxCroppingSize(960, 720)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(328)]        MinCroppingSize(1024, 576)        MaxCroppingSize(1024, 576)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(329)]        MinCroppingSize(1184, 656)        MaxCroppingSize(1184, 656)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(329)]        MinCroppingSize(1280, 720)        MaxCroppingSize(1280, 720)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(329)]        MinCroppingSize(1280, 960)        MaxCroppingSize(1280, 960)        Format(YUV420P, 0x30323449)
[2015-04-21 11:32:40(330)]        Video Config Size(1280, 720)        Format(RGB24, 12fps)
[2015-04-21 11:32:40(665)]        Message        OnUserEnterRoom(userid=-240,nickname=customerTTTNETPF_123458,siteindex=1)
[2015-04-21 11:32:40(681)]        video init finish:1280x720, RGB24, fps:12
[2015-04-21 11:32:40(705)]        Invoke        BRAC_SetVideoPos(dwUserId:-240, hWnd:0x311d4, l:0, t:0, r:557, b:300)
[2015-04-21 11:32:40(706)]        Invoke        UserCameraControl(userid=-240,bOpen=1)
[2015-04-21 11:32:40(706)]        Invoke        UserSpeakControl(userid=-240,bOpen=1)
[2015-04-21 11:32:41(077)]        On Remote UserCameraControl(dwUserId:-240, bOpen:1)
[2015-04-21 11:32:41(157)]        Message        OnP2PConnectState(userid=-240, state=1)
[2015-04-21 11:32:41(277)]        On Remote UserSpeakControl(dwUserId:-240, bOpen:1)
[2015-04-21 11:32:41(317)]        Message        OnP2PConnectState(userid=-240, state=3)
[2015-04-21 11:32:42(251)]        video codec init:codec:1, 12fps, 1280x720, bitrate:600kbps, quality:0, preset:3, gop:20, handle:3
[2015-04-21 11:32:51(443)]        Invoke        StreamRecordCtrlEx(-240, 1, 0x137, 0, )=0
[2015-04-21 11:32:57(866)]        Invoke        StreamRecordCtrlEx(-240, 0, 0x137, 0, )=0

作者: lincy    时间: 2015-4-21 11:33
调用代码如下:
ulong flags = AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_SERVER + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_VIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_AUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXAUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXVIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_ABREAST;
            AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, true, flags, 0, "ChannelId"); //开始录像

ulong flags = AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_SERVER + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_VIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_AUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXAUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXVIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_ABREAST;
                AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, false, flags, 0, "ChannelId"); //结束录像
作者: 佰锐科技-颜荣芝    时间: 2015-4-21 12:01
lincy 发表于 2015-4-21 11:33
调用代码如下:
ulong flags = AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_SERVER + AnyChatCoreSDK.ANYCHAT_RE ...

Invoke        StreamRecordCtrlEx(-240, 0, 0x137, 0, )=0
AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, false, flags, 0, "ChannelId"); //结束录像
看代码是正确的,但是日志并没有展示,是不是代码并没有保存并且正常执行
作者: lincy    时间: 2015-4-21 13:01
本帖最后由 lincy 于 2015-4-21 13:05 编辑
佰锐科技-颜荣芝 发表于 2015-4-21 12:01
Invoke        StreamRecordCtrlEx(-240, 0, 0x137, 0, )=0
AnyChatCoreSDK.StreamRecordCtrlEx(custom ...


代码应该执行了吧,不然日志里不会有,而且我在这两句代码处设置了断点,应该是执行到了,且程序中只有这两处用到了StreamRecordCtrlEx。
[2015-04-21 11:32:51(443)]        Invoke        StreamRecordCtrlEx(-240, 1, 0x137, 0, )=0
[2015-04-21 11:32:57(866)]        Invoke        StreamRecordCtrlEx(-240, 0, 0x137, 0, )=0

这两句有问题吧,最后那个参数的位置是空的。
作者: admin    时间: 2015-4-21 13:05
请尝试转一下字符串的格式,AnyChat目前是多字节编码(GB2312)的,如果您是Unicode的字符串则需要转换一下,
作者: lincy    时间: 2015-4-21 13:45
admin 发表于 2015-4-21 13:05
请尝试转一下字符串的格式,AnyChat目前是多字节编码(GB2312)的,如果您是Unicode的字符串则需要转换一下 ...


我转换了,但日志显示还是老样子。转换代码如下:
Encoding gb2312 = Encoding.GetEncoding("GB2312");
string gbChannelId = gb2312.GetString(Encoding.Convert(Encoding.Unicode, gb2312, Encoding.Unicode.GetBytes(ChannelId)));
ulong flags = AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_SERVER + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_VIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_AUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXAUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXVIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_ABREAST;
AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, true, flags, 0, gbChannelId); //开始录像

Encoding gb2312 = Encoding.GetEncoding("GB2312");
string gbChannelId = gb2312.GetString(Encoding.Convert(Encoding.Unicode, gb2312, Encoding.Unicode.GetBytes(ChannelId)));
ulong flags = AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_SERVER + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_VIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_AUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXAUDIO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_MIXVIDEO + AnyChatCoreSDK.ANYCHAT_RECORD_FLAGS_ABREAST;
AnyChatCoreSDK.StreamRecordCtrlEx(customerUID, false, flags, 0, gbChannelId); //结束录像




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