音视频开发流程

上传人:wt****50 文档编号:40365647 上传时间:2018-05-26 格式:DOCX 页数:15 大小:576.36KB
返回 下载 相关 举报
音视频开发流程_第1页
第1页 / 共15页
音视频开发流程_第2页
第2页 / 共15页
音视频开发流程_第3页
第3页 / 共15页
音视频开发流程_第4页
第4页 / 共15页
音视频开发流程_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《音视频开发流程》由会员分享,可在线阅读,更多相关《音视频开发流程(15页珍藏版)》请在金锄头文库上搜索。

1、音视频开发流程音视频开发流程音视频即时通讯是目前最为时尚、流行的通讯方式。可以实现一对一、一对多、多对多的通讯。而各种各样的即时通讯软件也层出不穷;服务提供商越来越丰富的通讯服务功能。随着社会的发展与网络技术的进步,音视频即时通讯的运用日益广泛。下面列举音视频聊天开发的简单流程:一、一、开发环境的搭建开发环境的搭建1.首先,虚拟机安装 linux 系统,我选取的是最新的 Ubuntu14.04-32bit ;2.然后,到 QT 官网 http:/qt-project.org/downloads,下载最新的 linux版本 QT5.3.2,如下所示:3.最后,到 AnyChat 官网 http:

2、/ linux 版本的 SDK,这里我们选取 32bit,如下图所示:二、二、软件功能软件功能在这里,我只需要如下几个功能即可:1.能够打开本地音视频;2.能够获取在线用户列表;3.能够请求在线用户音视频,实现视频聊天;4.能够发送文字聊天。三、三、真正的开始真正的开始需求确定之后,我们就开始创建我们的工程啦!1.现在我们打开 QT5 软件,创建一个新工程,首先就是布局我们的 UI,如下图所示;然后我们给我们的 UI 写上对象名字,如下所示:2.添加工程依赖性(包括 anychat sdk 依赖文件的添加)QT 软件配置头文件和库文件有两种方法:2.1 可以手动在.pro 为后缀的文件里面进行

3、添加;2.2 可以右键工程项目,然后添加相应的文件和库,此方法会自动修改.pro文件,如下左右两图所示(左图为手动添加,右图为添加后的 pro 文件,也可以按右图修改 pro 文件):其中 INCLUDEPATH 为头文件包含路径,这里添加 anychat sdk 目录;LIBS 为依赖库文件,这里添加 anychatcore 动态库;$PWD 表示 pro 文件当前目录;当然也可以使用绝对路径,直接填写路径和文件名即可,按左图方法添加绝对正确。我的 anychat sdk 文件如下所示:3.接下来我们需要编写具体功能的实现;3.1 初始化因为我们要使用 anychat sdk,因此我们在程序

4、初始化的时候对 sdk 初始化;SDK 初始化参数设置,其中,对于视频,我们设置为BRAC_FUNC_VIDEO_CBDATA,为视频数据回调方式,后续需要我们实现视频数据的处理,这里主要是渲染显示;对于音频,我们设置为BRAC_FUNC_AUDIO_AUTOPLAY,使用 SDK 自动播放模式,我们不用做任何处理。在 BRAC_InitSDK 函数之后我们又调用了四个 API 接口,分别设置视频回调、声音回调(这里实际不用设置,我们采用自动播放模式) 、系统消息回调、文字信息回调(文字聊天) ;至此初始化完毕!3.2 编写登录服务器接口void Widget:HelloChatLogin()

5、BRAC_Connect(““,8906); /连接服务器 :connect to serverBRAC_Login(“HelloChat“, “, 0); /登陆服务器 :loging to server这里为了方便,服务器地址、端口号、用户名、密码都写进来了;当我们登录成功之后,就可以继续往下啦。/设置 SDK 核心组件所在目录(注:demo 程序只是设置为当前目录,项目中需要设置为实际路径)QString szCoreSDKPath;szCoreSDKPath = QCoreApplication:applicationDirPath(); /获取当前应用程序路径(strrchr(cha

6、r*)szCoreSDKPath.toStdString().c_str(),/)1 = 0;BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,(char*)szCoreSDKPath.toStdString().c_str(),strlen(char*)szCoreSDKPath.toStdString().c_str();/ 根据 BRAC_InitSDK 的第二个参数:dwFuncMode,来告诉 SDK 该如何处理相关的任务(详情请参考开发文档)DWORD dwFuncMode = BRAC_FUNC_VIDEO_CBDATA/*BRAC_FUNC_VIDE

7、O_AUTODISP*/ | 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_AUDIO_VOLUMECALC | BRAC_FUNC_CONFIG_LOCALINI;BRAC_InitSDK(HWND*)this-winId(), dwFuncMode);BRAC_SetVideoDataCal

8、lBack(BRAC_PIX_FMT_RGB32,VideoData_CallBack, this);/设置视频数据回调BRAC_SetAudioDataCallBack(AudioData_CallBack, this); /设置声音数据回调BRAC_SetNotifyMessageCallBack(NotifyMessage_CallBack,this); /设置异步消息回调BRAC_SetTextMessageCallBack(TextMessage_CallBack,this); /设置消息发送回调3.3 进入相应的房间RoomId_lineEdit 就是我们的 ui 控件,我们在编辑

9、控件填写相应的房号即可;3.4 刷新在线用户列表/单击进入房间事件void Widget:on_EnterRoom_Btn_clicked()QString roomId = ui-RoomId_lineEdit-text(); /房间号QString pwd = “; /密码BRAC_EnterRoom(roomId.toInt(), (LPCTSTR)pwd.toStdString().c_str() , 0); /进入房间我单独写了一个接口,实现由用户进入房间和离开房间时会刷新列表;3.5 打开本地音视频int m_iUserIDMAX_USER_NUM; /其他用户 ID 号int m

10、_SelfId; /自己的 IDvoid Widget:HelloChatRefreshUserList()/先清空列表ui-UserlistWidget-clear();memset(m_iUserID,-1,sizeof(MAX_USER_NUM);/获取在线用户人数DWORD dwUserNum = 0;BRAC_GetOnlineUser(NULL, dwUserNum);if(!dwUserNum)return ;/获取在线用户 ID 列表LPDWORD lpdwUserList = (LPDWORD)malloc(sizeof(DWORD) *dwUserNum);BRAC_Get

11、OnlineUser(lpdwUserList, dwUserNum);/获取在线用户 id/重新入列for(int i = 0; i UserlistWidget-insertItem(i,cUserName); /对应的用户名添加到列表中elsebreak;free(lpdwUserList);当我们成功进入房间时,我们首先打开自己的音视频,这里用到了两个API,BRAC_UserCameraControl()和 BRAC_UserSpeakControl(),分别打开音视频;这个函数有系统消息回调函数来调用,而系统消息回调函数我们在初始化的时候已经设置了,下面将我们的系统消息回调函数贴出

12、来:/ 收到消息:客户端进入房间 wParam (INT)表示所进入房间的 ID 号,/ lParam (INT)表示是否进入房间:0 成功进入,否则/ 为出错代码long Widget:OnGVClientEnterRoom(WPARAM wParam, LPARAM lParam)QString logstr;int roomid = (int)wParam;if(lParam = 0) /自己成功进入房间,然后打开视频和音频logstr.sprintf(“#INFO# success enter room:%d,user “,roomid);/Open Local CameraBRAC_

13、UserCameraControl(-1,TRUE);BRAC_UserSpeakControl(-1,TRUE);elselogstr.sprintf(“#INFO# can not enter room,error code: %d “,lParam);emit changeSysLogs(logstr);return 0;/ 异步消息通知回调函数定义void CALLBACK Widget:NotifyMessage_CallBack(DWORD dwNotifyMsg, DWORD wParam, DWORD lParam, LPVOID lpUserValue)Widget*pAny

14、ChatSDKProc = (Widget*)lpUserValue;if(!pAnyChatSDKProc)return;switch(dwNotifyMsg)case WM_GV_CONNECT: pAnyChatSDKProc-OnGVClientConnect(wParam,NULL); break;case WM_GV_LOGINSYSTEM: pAnyChatSDKProc-OnGVClientLogin(wParam,lParam); break;case WM_GV_ENTERROOM: pAnyChatSDKProc-OnGVClientEnterRoom(wParam,lP

15、aram); break;case WM_GV_MICSTATECHANGE:pAnyChatSDKProc-OnGVClientMicStateChange(wParam,lParam); break;case WM_GV_USERATROOM: pAnyChatSDKProc-OnGVClientUserAtRoom(wParam,lParam); break;case WM_GV_LINKCLOSE: pAnyChatSDKProc-OnGVClientLinkClose(wParam, lParam); break;case WM_GV_ONLINEUSER: pAnyChatSDKProc-OnGVClientOnlineUser(wParam,lParam);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号