即时通讯 音视频聊天室开发建议

来源:互联网 发布:安信通达信软件 编辑:程序博客网 时间:2024/05/22 12:13
目前网上视频聊天室、视频会议软件、可视IP电话软件随处可见,你是否想自己做一个玩玩?其实这类软件无非是视频加上网络而建成的。如果熟悉视频捕 捉和网络传输技术,根本就难不倒你。本文详细介绍了如何利用别人提供的sdk来开发视频聊天室
首先介绍一下视频聊天技术发展历程
  1、 C/S结构的视频聊天软件或插件。这是最早的视频聊天开发技术,已经被淘汰。
  2、 P2P模式的视频聊天软件或插件。这是前几年以及目前很多大型视频聊天项目的主要使用技术。也是很多小型视频聊天室使用的技术。
  3、基于P2P模式+C/S模式混合。这是目前来说,性能最高的技术架构模式。比如QQ等聊天工具的视频聊天功能。在P2P双方网络连接速度快的情况下使用P2P,速度慢的情况下使用C/S模式。
  4、纯WEB的,基于视频服务器搭建的B/S结构视频聊天网站。这是前1-2年视频技术的主要研究方向。这种模式准确的说是在网站上可以使用的C/S结构。和第一阶段C/S结构性能差别不大,但拥有强大的跨平台优势。由于其性能上无法和第2、第3阶段的性能相比,而导致研究的多,但实用少,产品少。
5、 纯WEB的基于视频服务器的B/S结构+加上FLASH P2P结构。此阶段是目前视频技术的主要研究方向。但是目前的FLASH P2P无法实现数据分发、转发等功能,采用1个人和多个人同时建立P2P连接传输数据的模式,所以,当人数比较多的时候,此模式会很大的占用客户端的带宽。所以,此模式需要和B/S模式进行搭配。当人数多的时候,使用视频服务器,当人数少的时候,使用P2P。
接下来就是开发所会用到的工具以及用什么语言来开发的介绍
为了让大家更好的开发自己所需要的与音视频即时通讯相关的系统。我向大家介绍介绍如何利用这个SDK来去开发,大家可以理解成为开发指南吧
首先下载这个SDK,已经上传到了51cto的网站上面去,大家放心使用。(windows平台音视频即时通讯应用开发包
支持Windows平台音频即时通讯应用开发
支持C++、C#、Java、Delphi、VB.Net、Qt等开发语言
集成H.264、AAC、AMR等编解码技术
封装音视频的采集、编解码、传输、显示和播放等模块
提供客户端SDK和服务器SDK API接口
 
下面是使用指南:(以c++为例子)
一、初始化
该部分是首先要完成的,用于设置SDK的一些行为,包括设置对应的回调函数、设置SDK组件路径、设置是否产生日志文件等,通常初始化AnyChat SDK的代码如下(C++):
 
 
// 打开(关闭)SDK的日志记录功能
BRAC_ActiveCallLog(TRUE);
    
// 设置SDK核心组件所在目录
CHAR szCoreSDKPath[MAX_PATH] = {0};
GetModuleFileName(NULL,szCoreSDKPath,sizeof(szCoreSDKPath));
(strrchr(szCoreSDKPath,'\\'))[1] = 0; 
BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,szCoreSDKPath,strlen(szCoreSDKPath));
    
// 根据BRAC_InitSDK的第二个参数:dwFuncMode,来告诉SDK该如何处理相关的任务(详情请参考开发文档)
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 |
BRAC_FUNC_AUDIO_AUTOVOLUME | BRAC_FUNC_CONFIG_LOCALINI;
BRAC_InitSDK(this->GetSafeHwnd()/*NULL*/,dwFuncMode);
    
// 设置录像临时文件保存路径
CHAR szRecordDirectory[MAX_PATH] = {0};
::GetModuleFileName(NULL,szRecordDirectory,MAX_PATH);
(strrchr(szRecordDirectory,'\\'))[1] = 0; 
strcat(szRecordDirectory,"Record");
BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,szRecordDirectory,strlen(szRecordDirectory));

// 设置录像文件质量参数
DWORD dwVideoBitrate = 200 * 1000;    // 200kbps
BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR,(PCHAR)&dwVideoBitrate,sizeof(DWORD));
DWORD dwAudioBitrate = 96 * 1000;    // 96kbps
BRAC_SetSDKOption(BRAC_SO_RECORD_AUDIOBR,(PCHAR)&dwAudioBitrate,sizeof(DWORD));
    
// 设置快照临时文件保存路径
CHAR szSnapShotDirectory[MAX_PATH] = {0};
::GetModuleFileName(NULL,szSnapShotDirectory,MAX_PATH);
(strrchr(szSnapShotDirectory,'\\'))[1] = 0; 
strcat(szSnapShotDirectory,"SnapShot");
BRAC_SetSDKOption(BRAC_SO_SNAPSHOT_TMPDIR,szSnapShotDirectory,strlen(szSnapShotDirectory));
    
// 设置SDK临时文件路径
CHAR szTempPath[MAX_PATH] = {0};
::GetModuleFileName(NULL,szTempPath,MAX_PATH);
(strrchr(szTempPath,'\\'))[1] = 0; 
strcat(szTempPath,"Temp");
BRAC_SetSDKOption(BRAC_SO_CORESDK_TMPDIR,szTempPath,strlen(szTempPath));

// 启用音频自动参数功能(默认关闭)
DWORD bAudioAutoParam = TRUE;
BRAC_SetSDKOption(BRAC_SO_AUDIO_AUTOPARAM,(PCHAR)&bAudioAutoParam,sizeof(DWORD));
 
二、登录系统
当第一步初始化完成之后,便可以连接服务器、验证用户身份。通常调用代码如下(C++):
 
1.    3.// 登录系统 
4.    2.BRAC_EnterRoom(1,"",0); 
房间由服务器动态管理,由32位的房间ID号来唯一标示,当客户端指定的房间ID号不存在时,服务器将会自动创建。进入房间也是一个异步的过程,是否成功将会触发异步消息,进入房间成功后,服务器会把当前房间的在线用户列表传给客户端,传输完成后,将会触发异步消息(该消息只触发一次),只有收到服务器的在线用户列表后,才能对房间内的用户进行音视频的相关操作。
 
当自己进入房间成功,且收到服务器的在线用户消息后,有新的用户进入房间,或是老用户离开房间,将会触发异步消息,这样自己便知道谁进入,或是离开了房间。
 
1、打开自己的音视频
进入房间成功之后,便可以打开自己的音视频设备,通常调用代码如下(C++):
 
1.    3.// 打开自己的音频设备 
4.    2.BRAC_UserCameraControl(dwUserId,TRUE); 
3.    1.// 发送文字消息 
2.    1.// 离开房间 
2.    4.BRAC_Logout(); 
5.<span times="" new="" roman';="" "="" style="padding: 0px; margin: 0px; font-size: 7pt; line-height: normal;">    5.// 释放资源 
6.<span times="" new="" roman';="" "="" style="padding: 0px; margin: 0px; font-size: 7pt; line-height: normal;">    6.BRAC_Release(); 
离开房间后,可以进入新的房间,系统注销之后,可以再次调用连接服务器的API接口,但是释放资源后,SDK将不再工作。
0 0
原创粉丝点击