设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 97921|回复: 107
打印 上一主题 下一主题

AnyChat视频呼叫业务逻辑详解

[复制链接]

7

主题

332

帖子

1539

积分

金牌会员

Rank: 6Rank: 6

积分
1539
跳转到指定楼层
#
发表于 2013-9-6 15:12:16 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 佰锐技术-卓剑锐 于 2014-10-11 11:31 编辑

新版本AnyChat已经内置视频呼叫(VideoCall)业务逻辑,简化应用层开发工作量,下面详细讲解视频呼叫业务逻辑:
一、视频呼叫业务逻辑概述
视频呼叫业务逻辑主要实现两个终端(PC、手机、Pad等)之间的通话请求流程控制,包括请求(Request)、回复(Reply)、开始(Start)以及结束(Finish)等过程,可以形象理解为打电话的流程:拨号、等待、通话、挂断。

二、视频呼叫业务逻辑流程图


三、视频呼叫业务逻辑API接口
客户端新增回调函数:

  1. // 视频通话消息通知回调函数定义
  2. typedef void (CALLBACK * BRAC_VideoCallEvent_CallBack)(DWORD dwEventType, DWORD dwUserId, DWORD dwErrorCode, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);
  3. // 设置视频通话消息通知回调函数
  4. BRAC_API DWORD BRAC_SetVideoCallEventCallBack(BRAC_VideoCallEvent_CallBack lpFunction, LPVOID lpUserValue);
复制代码
客户端新增API接口:

  1. // 视频呼叫事件控制(请求、回复、挂断等)
  2. BRAC_API DWORD BRAC_VideoCallControl(DWORD dwEventType, DWORD dwUserId, DWORD dwErrorCode, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);
复制代码
服务器新增回调函数

  1. // 视频通话消息通知回调函数定义
  2. typedef DWORD (CALLBACK * BRAS_OnVideoCallEvent_CallBack)(DWORD dwEventType, DWORD dwSrcUserId, DWORD dwTarUserId, DWORD dwErrorCode, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr, LPVOID lpUserValue);
  3. // 设置视频通话消息通知回调函数
  4. BRAS_API DWORD BRAS_SetOnVideoCallEventCallBack(BRAS_OnVideoCallEvent_CallBack lpFunction, LPVOID lpUserValue=NULL);
复制代码
服务器新增API接口:

  1. // 视频呼叫事件控制(请求、回复、挂断等)
  2. BRAS_API DWORD BRAS_VideoCallControl(DWORD dwEventType, DWORD dwUserId, DWORD dwErrorCode, DWORD dwFlags, DWORD dwParam, LPCTSTR lpUserStr);

复制代码
常量定义

  1. // 视频呼叫事件类型定义(API:BRAC_VideoCallControl 传入参数、VideoCallEvent回调参数)
  2. #define BRAC_VIDEOCALL_EVENT_REQUEST              1        ///< 呼叫请求
  3. #define BRAC_VIDEOCALL_EVENT_REPLY                2        ///< 呼叫请求回复
  4. #define BRAC_VIDEOCALL_EVENT_START                3        ///< 视频呼叫会话开始事件
  5. #define BRAC_VIDEOCALL_EVENT_FINISH               4        ///< 挂断(结束)呼叫会话

  6. // 视频呼叫标志定义(API:BRAC_VideoCallControl 传入参数)
  7. #define BRAC_VIDEOCALL_FLAGS_AUDIO             0x01        ///< 语音通话
  8. #define BRAC_VIDEOCALL_FLAGS_VIDEO             0x02        ///< 视频通话
  9. #define BRAC_VIDEOCALL_FLAGS_FBSRCAUDIO        0x10        ///< 禁止源(呼叫端)音频
  10. #define BRAC_VIDEOCALL_FLAGS_FBSRCVIDEO        0x20        ///< 禁止源(呼叫端)视频
  11. #define BRAC_VIDEOCALL_FLAGS_FBTARAUDIO        0x40        ///< 禁止目标(被呼叫端)音频
  12. #define BRAC_VIDEOCALL_FLAGS_FBTARVIDEO        0x80        ///< 禁止目标(被呼叫端)视频

  13. // 视频呼叫
  14. #define AC_ERROR_VIDEOCALL_CANCEL             100101       ///< 源用户主动放弃会话
  15. #define AC_ERROR_VIDEOCALL_OFFLINE            100102       ///< 目标用户不在线
  16. #define AC_ERROR_VIDEOCALL_BUSY               100103       ///< 目标用户忙
  17. #define AC_ERROR_VIDEOCALL_REJECT             100104       ///< 目标用户拒绝会话
  18. #define AC_ERROR_VIDEOCALL_TIMEOUT            100105       ///< 会话请求超时
  19. #define AC_ERROR_VIDEOCALL_DISCONNECT         100106       ///< 网络断线
复制代码
四、其它
1、客户端API(BRAC_VideoCallControl)和回调函数(BRAC_VideoCallEvent_CallBack)中的dwUserId均为对方的用户ID;2、被呼叫方拒绝通话时,发送回复(Reply)指令,dwErrorCode=100104;
3、被呼叫方同意通话时,发送回复(Reply)指令,dwErrorCode=0,然后服务器会向双方发送通话开始(Start)指令,dwParam=RoomId,房间号由核心服务器自动分配;
4、结束通话时,任何一方(包括业务服务器)均可以发送结束(Finish)指令,然后服务器会向双方发送通话结束(Finish)指令;
5、业务服务器可干预呼叫流程:在BRAS_OnVideoCallEvent_CallBack收到呼叫请求指令后,返回0表示允许呼叫,否则为出错代码,不允许呼叫;在会话过程中可以发送结束(Finish)指令,强制挂断指定用户的通话;
6、API接口中的dwParam(整型)、lpUserStr(字符串)均为用户自定义用途;
7、一个用户同时只能发起一路呼叫请求,也同时只能被一个用户呼叫;
8、视频呼叫业务流程可以脱离业务服务器,由核心服务器独立支撑,可以不需要在服务器端进行二次开发。







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

107#
发表于 2017-11-28 14:19:07 | 只看该作者
是的,视频呼叫业务流程可以脱离业务服务器,由核心服务器独立支撑,可以不需要在服务器端进行二次开发。
回复 支持 反对

使用道具 举报

5

主题

18

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
106#
发表于 2017-11-28 13:59:02 | 只看该作者
视频呼叫业务是不是可以不依赖于业务服务器,单独一个核心服务器就能实现。
回复 支持 反对

使用道具 举报

105#
发表于 2017-10-27 15:21:21 | 只看该作者
一个用户同时只能发起一路呼叫请求,也同时只能被一个用户呼叫;您可以根据返回产生自己再做逻辑实现您需要的效果。
回复 支持 反对

使用道具 举报

5

主题

18

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
104#
发表于 2017-10-27 09:52:39 | 只看该作者
目标用户如果正在进行视频通话,再有其他用户对目标用户进行视频呼叫能实现呼叫等待的功能吗,能实现等待用户的顺序接听或选择接听吗?
回复 支持 反对

使用道具 举报

103#
发表于 2016-12-28 14:16:46 | 只看该作者
baoxp 发表于 2016-12-28 12:08
[2016-12-28 12:07:09(009)]        ---------------------------AnyChat Platform Core SDK Client Log---------- ...

你好,这个日志显示本地并没有打开音视频,但是有请求对方的音视频,可以看到对方;
注意需要进入房间之后,即收到OnAnyChatEnterRoomMessage之后才能调用UserCameraControl和UserSpeakControl打开自己的视频和音频;
回复 支持 反对

使用道具 举报

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
102#
发表于 2016-12-28 12:08:38 | 只看该作者
[2016-12-28 12:07:09(009)][I]        ---------------------------AnyChat Platform Core SDK Client Log---------------------------
[2016-12-28 12:07:09(022)][I]        Load libanychatcore.so success!(V6.2 Build Timeec 20 2016 16:57:55)
[2016-12-28 12:07:09(023)][I]        Android OS SDK Version:19, Support ARMv7:2, Support Neon:4
[2016-12-28 12:07:09(041)][I]        Load libmediautil_v7.so success!(V6.0 Build Time:May  6 2016 07:33:33)
[2016-12-28 12:07:09(050)][I]        Load libmediashow.so success!(V6.2 Build Timeec 20 2016 16:59:55)
[2016-12-28 12:07:09(058)][I]        Load libmediacore.so success!(V6.2 Build Timeec 20 2016 16:59:59)
[2016-12-28 12:07:09(060)][I]        vivo Y913(vivo) msm8916  4.4.4
[2016-12-28 12:07:09(061)][I]        Start network engine(IPv4 mode)...
[2016-12-28 12:07:09(061)][I]        Invoke        Connect(demo.anychat.cn,8906)=0
[2016-12-28 12:07:09(062)][I]        Invoke        Login(username:电梯一)=0
[2016-12-28 12:07:09(062)][I]        Invoke        SetSDKOption(BRAC_SO_LOCALVIDEO_AUTOROTATION=1)
[2016-12-28 12:07:09(072)][I]        Invoke        UserCameraControl(userid=-1, bOpen=1, stream=0)
[2016-12-28 12:07:09(072)][I]        Invoke        UserSpeakControl(userid=-1,bOpen=1)
[2016-12-28 12:07:09(102)][I]        Create anychatdnsserver connect:121.199.51.198(8906)
[2016-12-28 12:07:09(173)][I]        On pre-connection result, errorcode:0, anychatcoreserver, 121.199.51.198(8906, tcp:1)
[2016-12-28 12:07:09(174)][I]        CheckClientSocketLink         Connect(ip=121.199.51.198,port=8906)
[2016-12-28 12:07:09(205)][I]        On connect return, errorcode:0
[2016-12-28 12:07:09(237)][I]        Message        OnConnect(bSuccess:1, errorcode=0)
[2016-12-28 12:07:09(530)][I]        Server version: V6.1(Build Time:2016-08-17 11:02:06, Windows server)
[2016-12-28 12:07:09(588)][I]        APPLOG        Camera Preview size: 640 x 480
[2016-12-28 12:07:09(588)][I]        APPLOG        Camera FrameRate: 7500 , 30000
[2016-12-28 12:07:09(602)][I]        Message        OnLoginSystem(userid=18813,errorcode=0,username=电梯一), msg deliver worked(0)
[2016-12-28 12:07:09(603)][I]        Server running time: 132 days, 21 hours, 42 minutes, license mode:1, cloud:0
[2016-12-28 12:07:09(624)][I]        Connection to streaming media server successfully!(udp delay:10ms)
[2016-12-28 12:07:09(670)][I]        Invoke        SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT=1)
[2016-12-28 12:07:09(671)][I]        Invoke        SetInputVideoFormat(pixfmt:8, 640x480, 30fps, flags:0)
[2016-12-28 12:07:09(740)][I]        video(stream:0) codec init:codec:1, 15fps, 640x480, bitrate:90kbps, quality:3, preset:3, gop:30, handle:1
[2016-12-28 12:07:09(741)][I]        video(stream:0) init finish:640x480, NV21, fps:30, codecid:1
[2016-12-28 12:07:09(812)][I]        Invoke        VideoCallControl(EventType:1, UserId:18812, ErrorCode:0, dwFlags:0, dwParam:0, UserStr:电梯一)=0
[2016-12-28 12:07:09(903)][I]        Message        OnVideoCallEvent(EventType:2, UserId:18812, ErrorCode:0, dwFlags:0x0, dwParam:0
[2016-12-28 12:07:12(123)][I]        Message        OnVideoCallEvent(EventType:3, UserId:18812, ErrorCode:0, dwFlags:0x0, dwParam:1
[2016-12-28 12:07:12(135)][I]        Invoke        EnterRoom(roomid=1)
[2016-12-28 12:07:12(247)][I]        Message        OnEnterRoom(roomid=1,errorcode=0,siteindex=2)
[2016-12-28 12:07:12(248)][I]        Audio Playback Device Init(0, 1, 16000, 16), Default Playback Driver
[2016-12-28 12:07:12(248)][I]        Message        OnReceiveOnlineUser(count=3,roomid=1)
[2016-12-28 12:07:12(266)][I]        Invoke        UserCameraControl(userid=18812, bOpen=1, stream=0)
[2016-12-28 12:07:12(266)][I]        Invoke        UserSpeakControl(userid=18812,bOpen=1)
[2016-12-28 12:07:12(893)][I]        On Remote UserCameraControl(dwUserId:18812, bOpen:1, streamindex:0)
[2016-12-28 12:07:13(116)][I]        On Remote UserSpeakControl(dwUserId:18812, bOpen:1, streamindex:0)
[2016-12-28 12:07:13(169)][I]        userid(18812) video decode, codec:1, 320x240, delay:4ms
[2016-12-28 12:07:23(206)][I]        userid(18812) audio decode, codec:11, 1 channel, 16000Hz
[2016-12-28 12:07:33(331)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18812), list:0

[2016-12-28 12:07:33(669)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18772), list:0

[2016-12-28 12:07:36(336)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18812), list:0

[2016-12-28 12:07:36(362)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18812), list:0

[2016-12-28 12:07:36(477)][I]        Message        OnVideoCallEvent(EventType:4, UserId:18812, ErrorCode:0, dwFlags:0x0, dwParam:18812
[2016-12-28 12:07:36(682)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18772), list:0

[2016-12-28 12:07:36(693)][I]        OnSocketClose, index(3)-errorcode(0-11), flags:0x10201, bTcp(1),userid(18772), list:0

[2016-12-28 12:07:37(154)][I]        On Remote UserSpeakControl(dwUserId:18812, bOpen:0, streamindex:0)
[2016-12-28 12:07:37(154)][I]        On Remote UserCameraControl(dwUserId:18812, bOpen:0, streamindex:0)
[2016-12-28 12:07:37(155)][I]        Message        OnUserLeaveRoom(userid=18812,siteindex=1)

留个qq号
回复 支持 反对

使用道具 举报

2

主题

336

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
101#
发表于 2016-12-28 11:59:01 | 只看该作者

这个日志不全啊  你复制内容 然后粘贴上来啊
回复 支持 反对

使用道具 举报

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
100#
发表于 2016-12-28 11:53:32 | 只看该作者
图片如下:

1.png (222.74 KB, 下载次数: 7214)

1.png
回复 支持 反对

使用道具 举报

2

主题

336

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
99#
发表于 2016-12-28 11:37:38 | 只看该作者
baoxp 发表于 2016-12-28 11:33
我是安卓开发的

安卓日志信息在cdcard里面BRAnyChatCore.log
回复 支持 反对

使用道具 举报

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
98#
发表于 2016-12-28 11:33:40 | 只看该作者
佰锐科技-刘洋 发表于 2016-12-28 11:12
你好 请发一下日志信息 日志在插件安装目录下 插件默认安装在C盘 C:\Program Files (x86)\AnyChatWeb 下 ...

我是安卓开发的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 18:58 , Processed in 0.156402 second(s), 25 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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