安卓平台下的音视频即时通讯应用的开发
现在安卓很是火热,一大堆开发人员在捣鼓安卓平台的开发,相信大家也使用过QQ的语音视频对话功能,但是不知道大家有没有试过自己来开发一个基于安卓平台的音视频即时通讯的应用,这个应用必须能够做到跨平台
- 兼容Google、HTC、Moto、Samsung等主流硬件设备
- 支持iOS、Web、PC等设备和Android之间的互联互通
- 视频会话时,默认打开前置摄像头;
- 能够有Java音视频采集、显示驱动,兼容更多Android设备;
- 想要在Android平台下实现音视频通信,最快捷的方法是寻找开源项目或调用其他公司封装好的API,接下来小编介绍一款不错的SDK包给大家,(安卓平台的音视频互动开发平台)下面是一些关于如何调用相关API接口的方法,大家可以相互交流交流。
Android通信平台相关API方法
- // 初始化SDK
- public native int InitSDK(int osver, int flags);
- // 连接服务器
- public native int Connect(String serverip, int port);
- // 登录系统
- public native int Login(String username, String password);
- // 进入房间(房间ID)
- public native int EnterRoom(int roomid, String password);
- // 进入房间(房间名称)
- public native int EnterRoomEx(String roomname, String password);
- // 退出房间
- public native int LeaveRoom(int roomid);
- // 设置视频显示位置
- public native int SetVideoPos(int userid, Surface surface, int lef,
- int top, int right, int bottom);
- /**
- * 功能: 设置视频显示位置,或是刷新视频显示 返回值:0表示成功,否则为出错代码
- * 参数:
- * userid 用户ID
- * surface 视频显示界面,android客户端只需提供SurfaceView控件,内核自动将视频显示在控件上
- * lef,top,right,bottom视频显示位置信息
- */
- // 注销登录
- public native int Logout();
- // 释放资源
- public native int Release();
一、初始化SDK
初始化SDK是首先要完成的,用于设置SDK的一些行为,包括设置对应的回调函数。代码如下:
- //初始化SDK
- private void InitialSDK() {
- if (anychat == null) {
- anychat = new AnyChatCoreSDK();
- //设置基本事件回调函数
- anychat.SetBaseEvent(this);
- if (configEntity.useARMv6Lib != 0)
- anychat.SetSDKOptionInt(AnyChatDefine.
- BRAC_SO_CORESDK_USEARMV6LIB, 1); //使用ARMv6指令集
- anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0); //初始化SDK 的一个参数是android API版本
- bNeedRelease = true;
- }
- }
二、登录系统
当初始化SDK完成之后,便可以实现连接服务器、验证用户身份、用户登录等。
- //连接服务器
- anychat.Connect("211.155.25.90", 8906);
- //登录系统
- anychat.Login("android","");
连接服务器和登录系统都是一个异步的过程,调用后会立即返回。在回调函数中根据返回代码判断服务器是否连接成功和登录成功。
三、进入房间
登录成功后就可进入相应的房间,只有在相同房间的用户才能进行音视频通信。代码如下
1、进入房间
- //进入1号房间
- anychat.EnterRoom(1, "");
进入房间后系统会将该房间在线用户发送给客户端,只有在同一个房间用户才能进行音视频互交、文字聊天、文件传输等。当新用户进入房间或用户下线,都会触发异步消息通知上层应用更改状态。
2、文字聊天
成功进入房间后,便可调用API接口向指定用户或房间中所有在线用户发送文字 聊天消息。
- //发送文字聊天消息
- String message = messageEditText.getText().toString();
- anychat.SendTextMessage(-1, 0,message);
其他用户收到文字聊天消息会触发相应的回调函数并将聊天消息显示在界面上。
3、请求其他用户的音视频
- // 请求对方的视频流
- anychat.UserCameraControl(userID, 1);
- // 请求对方的音频流
- anychat.UserSpeakControl(userID, 1);
4、音视频的显示与播放
- //判断远程用户视频是否已打开
- if (!bOtherVideoOpened) {
- if (anychat.GetCameraState(userID) == 2
- && anychat.GetUserVideoWidth(userID) != 0) {
- SurfaceHolder holder = otherView.getHolder(); //获得SurfaceView控件
- holder.setFormat(PixelFormat.RGB_565); //设置显示格式
- holder.setFixedSize(anychat.GetUserVideoWidth(userID),
- anychat.GetUserVideoHeight(userID)); //设置视频显示宽高
- Surface s = holder.getSurface(); //获得视频画面
- anychat.SetVideoPos(userID, s, 0, 0, 0, 0); //调用API显示视频画面
- bOtherVideoOpened = true;
- }
- }
- //判断本地视频是否已打开
- if (!bSelfVideoOpened) {
- if (anychat.GetCameraState(-1) == 2
- && anychat.GetUserVideoWidth(-1) != 0) {
- SurfaceHolder holder = myView.getHolder(); //获得SurfaceView控件
- holder.setFormat(PixelFormat.RGB_565); //设置显示格式
- holder.setFixedSize(anychat.GetUserVideoWidth(-1),
- anychat.GetUserVideoHeight(-1)); //设置视频显示宽高
- Surface s = holder.getSurface(); //获得视频画面
- anychat.SetVideoPos(-1, s, 0, 0, 0, 0); //调用API显示视频画面
- bSelfVideoOpened = true;
- }
- }
Android程序中,当收到用户的媒体流数据时,Android客户端只需提供一个SurfaceView控件,内核自动将视频媒体流数据显示在该控件上并播放声音。
四、释放资源
与前面讲的连接服务器、登录系统、进入房间对应的的是离开房间、注销系统、释放资源。代码如下:
- protected void onDestroy() {
- //离开房间
- anychat.LeaveRoom(-1);
- //注销登录
- anychat.Logout();
- //释放资源 关闭SDK 不再返回登录界面
- anychat.Release();
- }
离开房间后可再进入房间,但是注销登录和释放资源后,SDK将不再工作。在Activity生命周期结束的时候可以将占用资源释放,程序退出。
转载于:https://blog.51cto.com/6359515/1165339
安卓平台下的音视频即时通讯应用的开发相关推荐
- 在linux系统下实现音视频即时通讯的部分代码
由于使用习惯,Linux在中国受欢迎程度远不如windows,相应的软件也比较少,尤其是音视频类的软件,但是,这并不代表就完全没有.下面介绍一款强大的音视频即时通讯平台给大家,它就是--Anychat ...
- 音视频即时通讯二次开发
用于二次开发企业即时通讯源码(C++/MFC),现在,做一个普通的即时通讯软件不是一件难事,网上有很多很好的这类软件的源代码可以拿来使用.今天就介绍一个我用过,觉得不错的给大家.软件叫 ANYCHAT ...
- 从三网融合看音视频即时通讯的市场与挑战
一.市场渗透力以及存在问题 第一,有需求就有市场,有市场就有商机.利字当头,当仁不让.众多服务商就是盯准了即时通讯市场潜在的无限商机,才会不遗余力地开发各类新的即时通讯软件. 第二,即时通讯软件的特点 ...
- 2014年音视频即时通讯市场的割据
当腾讯微信几年下来获取了几亿用户量之后,上个月双11晚上,腾讯微信正式推出"微信电话本"应用,利用网络通信技术,微信一键登录之后使用流量便可与微信好友直接通话,整体交互界面.流程和 ...
- 音视频即时通讯的介绍与前景
音视频即时通讯是目前最为时尚.流行的通讯方式.可以实现一对一.一对多.多对多的通讯.而各种各样的即时通讯软件也层出不穷:服务提供商越来越丰富的通讯服务功能.随着社会的发展与网络技术的进步,音视频即时通 ...
- 音视频即时通讯领域的发展
网络的融合与业务应用的融合,以及IP基础架构在通信核心网络上的实施,正在使视讯业发生着多元化的变革.在这里,我们将从应用.运营.行业.技术以及市场价格竞争的角度来观测视频通信领域新的发展趋势. 应用趋 ...
- 在Android平台下实现音视频语音聊天
音视频通信 作为独立开发者或想缩短音视频开发周期的公司来说,想要在Android平台下实现音视频通信,最快捷的方法是寻找开源项目或调用其他公司API.之所以这么说是因为音视频通信技术涉及到底层音视频采 ...
- 音视频即时通讯中P2P的流媒体技术
摘 要:P2P流媒体技术已成为网络应用中热门的技术之一,本文主要介绍流媒体,P2P的相关概念,并着重对P2P流媒体的关键技术进行了研究,最后又提出了P2P流媒体技术应该面对的挑战. 1 引言 随 ...
- Linux平台上的音视频互动开发平台
由于使用习惯,Linux在中国受欢迎程度远不如windows,相应的软件也比较少,尤其是音视频类的软件,但是,这并不代表就完全没有.下面介绍一款强大的音视频即时通讯平台给大家,它就是--Anychat ...
最新文章
- PHP sprintf() 函数
- 文巾解题 1179. 重新格式化部门表
- 真强啊!建议每一位Java程序员都读读Dubbo心跳设计的源码...
- Entity Framework 学习中级篇3—存储过程(中)
- CH4402 小Z的袜子(莫队)
- python的pygame游戏开始结束信息_从0开始学python第14.8节-pygame射击游戏(一)
- python把单词拆成字母_如何在Python里把独立字母组成单词
- 01_传智播客iOS视频教程_课程介绍与知识点回顾
- 无聊时对连分数的思考
- mysql+分页脚本_MySql实现分页查询的SQL
- 基于AT89S52单片机的汽车LED尾灯控制器设计
- 医院信息系统等级保护
- 有关windows10修改C盘用户中文名文件夹相关问题的具体解决方案
- Java:求两个正整数的最大公约数和最小公倍数
- Win10不进行操作很快自动睡眠、休眠的解决方法
- 工作之后必备计算机知识,2021工作必备计算机技巧知识
- Guass列选主元消去法和三角分解法
- 基于深度学习的三维人体姿态估计
- Java图结构-模拟校园地图-迪杰斯特拉(Dijkstra)算法求最短路径 #谭子
- 名帖344 怀素 草书《佛说四十二章经》