免费开源建站系统源码,百度seo培训课程,网站建设域名有哪些类型,动漫网站建设前期策划互联网的不断发展#xff0c;各种新技术的兴起#xff0c;原本做管理软件的我也逐渐转向从事着互联网相关的运营产品的开发。尤其是目前抄得最火热的音视频互动平台技术#xff0c;今天我先列出最基本开发流程#xff0c;适用于开发视频会议系统、语音视频聊天系统、远程教… 互联网的不断发展各种新技术的兴起原本做管理软件的我也逐渐转向从事着互联网相关的运营产品的开发。尤其是目前抄得最火热的音视频互动平台技术今天我先列出最基本开发流程适用于开发视频会议系统、语音视频聊天系统、远程教育平台以及即时通讯平台IM等。希望对喜欢这方面的朋友有所帮助。同时欢迎各大高手参与讨论相互交流、学习。 首先知其然先看看如何开始工作。 下载http://anychat.storage.aliyun.com/AnyChatCoreSDK_Win32(MBCS)_V4.5.zip 一、初始化 该部分是首先要完成的包括设置对应的回调函数、设置SDK组件路径、设置是否产生日志文件等通常初始化的代码如下C 01.// 打开关闭的日志记录功能 02.BRAC_ActiveCallLog(TRUE); 03. 04.// 设置核心组件所在目录 05.CHAR szCoreSDKPath[MAX_PATH] {0}; 06.GetModuleFileName(NULL,szCoreSDKPath,sizeof(szCoreSDKPath)); 07.(strrchr(szCoreSDKPath,\\))[1] 0; 08.BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,szCoreSDKPath,strlen(szCoreSDKPath)); 09. 10.// 根据BRAC_InitSDK的第二个参数dwFuncMode来告诉该如何处理相关的任务详情请参考开发文档 11.DWORD dwFuncMode BRAC_FUNC_VIDEO_CBDATA | BRAC_FUNC_AUDIO_AUTOPLAY | BRAC_FUNC_CHKDEPENDMODULE | BRAC_FUNC_AUDIO_VOLUMECALC | BRAC_FUNC_NET_SUPPORTUPNP | BRAC_FUNC_FIREWALL_OPEN | 12.BRAC_FUNC_AUDIO_AUTOVOLUME | BRAC_FUNC_CONFIG_LOCALINI; 13.BRAC_InitSDK(this-GetSafeHwnd()/*NULL*/,dwFuncMode); 14. 15.// 设置录像临时文件保存路径 16.CHAR szRecordDirectory[MAX_PATH] {0}; 17.::GetModuleFileName(NULL,szRecordDirectory,MAX_PATH); 18.(strrchr(szRecordDirectory,\\))[1] 0; 19.strcat(szRecordDirectory,Record); 20.BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,szRecordDirectory,strlen(szRecordDirectory)); 21. 22.// 设置录像文件质量参数 23.DWORD dwVideoBitrate 200 * 1000; // 200kbps 24.BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR,(PCHAR)dwVideoBitrate,sizeof(DWORD)); 25.DWORD dwAudioBitrate 96 * 1000; // 96kbps 26.BRAC_SetSDKOption(BRAC_SO_RECORD_AUDIOBR,(PCHAR)dwAudioBitrate,sizeof(DWORD)); 27. 28.// 设置快照临时文件保存路径 29.CHAR szSnapShotDirectory[MAX_PATH] {0}; 30.::GetModuleFileName(NULL,szSnapShotDirectory,MAX_PATH); 31.(strrchr(szSnapShotDirectory,\\))[1] 0; 32.strcat(szSnapShotDirectory,SnapShot); 33.BRAC_SetSDKOption(BRAC_SO_SNAPSHOT_TMPDIR,szSnapShotDirectory,strlen(szSnapShotDirectory)); 34. 35.// 设置临时文件路径 36.CHAR szTempPath[MAX_PATH] {0}; 37.::GetModuleFileName(NULL,szTempPath,MAX_PATH); 38.(strrchr(szTempPath,\\))[1] 0; 39.strcat(szTempPath,Temp); 40.BRAC_SetSDKOption(BRAC_SO_CORESDK_TMPDIR,szTempPath,strlen(szTempPath)); 41. 42.// 启用音频自动参数功能默认关闭 43.DWORD bAudioAutoParam TRUE; 44.BRAC_SetSDKOption(BRAC_SO_AUDIO_AUTOPARAM,(PCHAR)bAudioAutoParam,sizeof(DWORD)); 二、登录系统 当第一步初始化完成之后便可以连接服务器、验证用户身份。通常调用代码如下C 1.// 连接服务器 2.BRAC_Connect(211.155.25.90,8906); 3.// 登录系统 4.BRAC_Login(testuser,,0); 连接服务器与登录系统都是一个异步的过程调用后会立即返回其中 a、连接服务器成功或是失败将会触发异步消息网络连接消息 b、登录系统成功或是失败将会触发异步消息登录系统消息 所以应用程序需要响应这些异步消息或处理异步消息通知回调函数才能知道连接服务器、登录系统是否成功。 登录系统成功后如果需要实现即时通讯应用中的好友列表AnyChat默认没有实现则需要利用AnyChat的扩展API接口与Server SDK来配合实现登录系统成功后服务器会返回一个32位的用户ID如果登录时没有传入密码参数则系统会认为是游客登录并分配一个独立的用户ID如-1、-2等如果登录时传入了密码参数则登录请求将会交给“SDK Filter Plus”接口或“Server SDK”对应的接口用户可开发一个自己的服务器插件“SDK Filter Plus”或是调用“Server SDK”所对应的API来处理用户身份验证的请求完成对用户ID的管理实现与第三方系统的互联互通详细内容可参考SDK包中的doc\server\目录下的相关文档。 三、进入房间 在第二步登录系统成功之后就可以进入房间因为只有在房间中才能完成语音和视频的交互。通常调用代码如下C 1.// 进入房间 2.BRAC_EnterRoom(1,,0); 房间由服务器动态管理由32位的房间ID号来唯一标示当客户端指定的房间ID号不存在时服务器将会自动创建。进入房间也是一个异步的过程是否成功将会触发异步消息自己进入房间消息进入房间成功后服务器会把当前房间的在线用户列表传给客户端传输完成后将会触发异步消息 当前房间在线用户消息该消息只触发一次只有收到服务器的在线用户列表后才能对房间内的用户进行音视频的相关操作。 当自己进入房间成功且收到服务器的在线用户消息后有新的用户进入房间或是老用户离开房间将会触发异步消息用户进入离开房间消息这样自己便知道谁进入或是离开了房间。 1、打开自己的音视频 进入房间成功之后便可以打开自己的音视频设备通常调用代码如下C 1.// 打开自己的视频设备 2.BRAC_UserCameraControl(-1,TRUE); 3.// 打开自己的音频设备 4.BRAC_UserSpeakControl(-1,TRUE); 打开自己的设备后并不会立即上传音视频流只有当其它用户请求自己的音视频数据时可单独请求音频流或视频流才对外传输打开自己的音视频设备默认是按服务器的配置信息来初始化设备如采样分辨率、视频帧率、音频的采样频率等如需要在客户端程序中调节音、视频质量 2、请求其它用户的音视频 如果需要显示其它用户的音视频则必须在收到房间用户列表消息后请求对方的音视频流然后对方才将音视频流传输过来通常请求其它用户的音视频数据调用代码如下C 1.// 请求对方的视频流 2.BRAC_UserCameraControl(dwUserId,TRUE); 3.// 请求对方的音频流 4.BRAC_UserSpeakControl(dwUserId,TRUE); 数据传输优先P2P方式只有当P2P不通时才由服务器转发P2P的NAT打洞过程以及数据流传输策略均由服务器控制只要有请求而且对方已打开了自己的音视频设备则就能收到对方的音视频流数据。 3、音视频的播放与显示 当收到其它用户的音频数据后 a如果在初始化时设置了“BRAC_FUNC_AUDIO_AUTOPLAY”标志则SDK内部将会自动播放自动混音 b如果在初始化时设置了“BRAC_FUNC_AUDIO_CBDATA”标志则SDK会将解码后的音频数据PCM格式通过回调函数回调给上层应用。 当收到其它用户的视频数据后 a如果在初始化时设置了“BRAC_FUNC_VIDEO_AUTODISP”标志并且调用了API BRAC_SetVideoPos则SDK内部将会把视频显示到指定的窗体的指定位置在指定位置上自动迭加一个视频窗口 b如果在初始化时设置了“BRAC_FUNC_VIDEO_CBDATA”标志则SDK会将解码后的视频数据RGB、YUV通过回调函数回调给上层应用由上层应用自己来绘制或渲染该模式适合于DirectX、HGE等没有窗口模式下的应用程序或是上层应用需要对视频进行特殊处理的场合如迭加文字、logo等。 4、文字交互 成功进入房间后 便可以调用API接口向指定用户或是房间中的所有用户发送文字消息 1.// 发送文字消息 2.CString strInput hello world; 3.BRAC_SendTextMessage(-1,FALSE,strInput.GetBuffer(0),strInput.GetLength()); 其它用户收到自己发送的文字消息后便会触发回调函数文字消息回调函数通过处理回调消息然后将收到的文字消息显示在界面上便可实现文字的交互。 5、业务逻辑处理 AnyChat SDK内置的基本逻辑是当自己的音视频设备打开后别的用户有请求便会将流媒体数据传输给对方而没有任何何业务逻辑。 a如要实现视频会议系统则用户进入房间后就需要知道谁是主持人然后打开主持人的视频 b如要实现视频聊天系统则用户进入房间后就需要知道当前房间有几个公麦谁在公麦上然后打开对应公麦用户的视频等 c…… 这些业务逻辑需要与服务器端的“SDK Filter Plus”或“AnyChat Server SDK”互相配合来实现具体的实现方案可参考SDK包中的doc\server\目录下的《AnyChat Server SDK 开发指南》第6章节。 四、释放资源 与前面连接服务器、登录系统、进入房间对应的退出系统的过程是离开房间、注销系统、释放资源通常调用代码如下C 1.// 离开房间 2.BRAC_LeaveRoom(-1); 3.// 注销系统将关闭网络连接 4.BRAC_Logout(); 5.// 释放资源 6.BRAC_Release(); 离开房间后可以进入新的房间系统注销之后可以再次调用连接服务器的API接口但是释放资源后将不再工作。 需要特别注意一下释放资源的时机。 完了之后我们就来知其所以然了如果你喜欢这个项目请继续关注。也可加QQ992139738