Android音频开发,android视频通话开发
Android现在非常火,很多开发者都在修补Android平台的开发。相信你也用过QQ的语音视频对话功能,但是不知道你有没有尝试过开发一款基于Android平台的音视频即时通讯应用。这个应用程序必须是跨平台的。
兼容谷歌、HTC、Moto、三星等主流硬件设备。
支持iOS、Web、PC等设备与Android的互联
有Java音视频采集和显示驱动,兼容更多安卓设备;
Android平台下实现音视频通信最快的方法就是寻找开源项目或者调用其他公司打包的API。接下来,边肖向您介绍一个不错的SDK包。(安卓平台音视频交互开发平台)下面是一些关于如何调用相关API接口的方法,大家可以互相交流。
//初始化SDK
publicnativentinitsdk(intos ver,int flags);
//连接到服务器
publicnativeintConnect(string serverip,int port);
//登录系统
publicnativentlogin(string username,string password);
//输入房间(房间ID)
publicnativeinterroom(intro omid,string password);
//输入房间(房间名称)
publicnativeinterroomex(string groom name,string password);
//退出房间
publicnativentleaveroom(intro omid);
//设置视频显示位置
publinativeintsetvideopos(intuserid,Surfacesurface,intlef,
inttop,intright,int bottom);
/**
*功能:设置视频显示位置,或刷新视频显示。返回值:0表示成功,否则为错误代码。
*参数:
*userID用户ID
*surface视频显示界面,android客户端只需要提供SurfaceView控件,内核自动在控件上显示视频。
*左、上、右、下视频显示位置信息
*/
//注销登录
publicnativeintLogout();
//释放资源
publicnativeintRelease();
首先,初始化SDK
初始化SDK是首先要做的事情,用来设置SDK的一些行为,包括设置相应的回调函数。代码如下:
//初始化SDK
privatevoinitialsdk(){
if(anychat==null){
any chat=newAnyChatCoreSDK();
//设置基本事件回调函数
任何聊天。SetBaseEvent(this);
if(configEntity.useARMv6Lib!=0)
任何聊天。SetSDKOptionInt(AnyChatDefine。
BRAC_SO_CORESDK_USEARMV6LIB,1);//使用ARMv6指令集
任何聊天。init SDK(Android . OS . build . version . SDK _ INT,0);//初始化SDK的一个参数是androidAPI版本
bNeedRelease=true
}
}
二、登录系统
当SDK初始化后,您可以连接到服务器,验证用户身份,登录等等。
//连接到服务器
任何聊天。连接( 211.155.25.90 ,8906);
//登录系统
任何聊天。登录(安卓, );
连接服务器和登录系统是一个异步过程,被调用后会立即返回。在回调函数中,根据返回码判断服务器是否连接成功并登录。
第三,进入房间
登录成功后,可以进入相应的房间,只有同一个房间的用户才能进行音视频交流。代码如下所示
1.进入房间
//进入1号房间
任何聊天。EnterRoom(1, );
进入房间后,系统会将房间的在线用户发送给客户端。只有同处一室的用户才能进行音视频交换、文字聊天、文件传输等。当新用户进入房间或注销时,将触发异步消息来通知上层应用程序改变其状态。
2.文本聊天
成功进入房间后,可以调用API接口向指定用户或房间内所有在线用户发送文字聊天消息。
//发送文本聊天消息
string message=messageedittext . gettext()。toString();
任何聊天。SendTextMessage(-1,0,message);
其他收到文字聊天消息的用户会触发相应的回调函数,并在界面上显示聊天消息。
3.请求其他用户的音频和视频。
//请求对方的视频流
任何聊天。UserCameraControl(userID,1);
//请求对方的音频流
任何聊天。UserSpeakControl(userID,1);
如果(!botherviodeoopened){
如果(anychat。GetCameraState(userID)==2
任何聊天。getuserveodwidth(userID)!=0){
surface holder holder=other view . get holder();//获取SurfaceView控件
holder.setFormat(PixelFormat。RGB _ 565);//设置显示格式
holder.setFixedSize(anychat。getuserveodwidth(userID),
任何聊天。getuservideheight(userID));//设置视频显示的宽度和高度
surfaces=holder . get surface();//获取视频图片
任何聊天。SetVideoPos(userID,s,0,0,0,0);//调用API显示视频画面
botherviodeoopened=true;
}
}
//确定本地视频是否打开。
如果(!bselvideopened){
如果(anychat。GetCameraState(-1)==2
任何聊天。getuservidewidth(-1)!=0){
surface holder holder=my view . get holder();//获取SurfaceView控件
holder.setFormat(PixelFormat。RGB _ 565);//设置显示格式
holder.setFixedSize(anychat。getuserveodwidth(-1),
任何聊天。getuservideheight(-1));//设置视频显示的宽度和高度
surfaces=holder . get surface();//获取视频图片
任何聊天。SetVideoPos(-1,s,0,0,0,0);//调用API显示视频画面
bSelfVideoOpened=true
}
}
在Android程序中,当接收到用户的媒体流数据时,Android客户端只需要提供一个SurfaceView控件,内核自动在控件上显示视频媒体流数据并播放声音。
四。释放资源
对应连接服务器,登录系统进入房间,离开房间,退出系统,释放资源。代码如下:
protectedvodindestroy(){
//离开房间
任何聊天。leave room(-1);
//注销登录
任何聊天。logout();
//释放资源,关闭SDK,永不返回登录界面。
任何聊天。发布();
离开房间后,您可以重新进入房间,但注销并释放资源后,SDK将不再工作。在活动生命周期结束时,被占用的资源可以被释放,程序退出。