V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
juice123
V2EX  ›  2018

花了一天时间,将我们 andriod 上音视频通信编译步骤写下来

  •  
  •   juice123 · 2018-01-16 21:16:05 +08:00 · 1362 次点击
    这是一个创建于 2538 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前两天,图鸭君给大家介绍了如何在 iOS 端搭建音视频通信系统,今天我就给大家介绍一下如何搭建一个完整的 Android 音视频通信系统。

    一、准备:

    首先在图鸭官网: http://tucodec.com 进行注册,获得 SDK 中所需要的 AppKey、AppSecret.

    其次到开发者里选择下载 android 中所需 SDK

    最后解压.

    voip_android_demo1.0 是用于演示的 demo,图鸭君也将要按照这个 demo 以及 SDK 开发文档进行讲解,打开 resource 资源文件

    将 voip_android.aar 提取出来导入到工程,里面包含了提供相关操作的 java 类以及 so 库,配置相关的环境。

    导入” voip_android.aar ”文件 在“ libs ”文件夹下添加 aar 包,在 build 文件夹下添加: repositories { flatDir { dirs 'libs' } }

    在 dependencies 下添加: compile(name: 'voip_android', ext: 'aar')

    配置其他三方库 在 gradle 文件里面的 dependencies 下添加下面三方库: api "com.alibaba:fastjson:1.1.63.android"

    加入权限 AndroidManifest.xml 加入以下权限: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    完成上述操作后,我们的音视频通讯 App 所需的大体框架已经完成啦,之后就是码代码,完成系统 UI 界面绘制和用户之间通讯的逻辑操作。

    在图鸭科技提供的 SDK 中,我们可以看到只需要调用三个类进行操作,可见快速集成音视频通信并不是那么复杂。

    二、操作类定义:

    1、TYVoipAndroid:提供所有 Voip 相关方法 2、TYVoipVideoCapture:摄像头管理类 3、TYVoipVideoRender:Voip 客户端视频渲染视图.,渲染在此视图上进行

    了解上述主要接口文件及其定义后,我们来了解 SDK 中的通信原理:在 SDK 中,所有用户都以通讯节点的形式存在,作为节点的用户都拥有自己唯一的表示—— UserID,整个 SDK 会根据每个用户的 UserID 来进行通讯。

    例如,甲和乙之间进行通讯,假设甲的 UserID 为 401,乙的 UserID 为 402,甲登录后向乙发送我要和你开视频,乙登录后向甲发送我要和你开视频,甲开始渲染乙的视图,乙开始渲染甲的视图 。完成上述所有操作后,甲乙建立通讯。

    三、完整的 SDK 使用步骤简介:

    <1>初始化 TYVoipAndroid、TYVoipVideoCapture 类: mTYVoipAndroid = new TYVoipAndroid(new Handler(), Context,null); mVideoCapture = TYVoipVideoCapture(mTYVoipAndroid , TYVoipVideoCapture.CaptureParam(mTYVoipAndroid.config.videoWidth,
    mTYVoipAndroid.config.videoHeight));

    <2>登录转发服务器(建议写成单例,一次登录,多次调用): loginRelayServer(String ip, short port, int userId, int sessionId, int AppKey, int AppSecret);

    <3>开启相机,注册音视频回调,初始化 Voip 客户端,开启传输 mVideoCapture.start(false, mTYVoipAndroid.config, mMainRender.parent as ViewGroup); mTYVoipAndroid.registerVideoCallback(mVideoCallback); mTYVoipAndroid.registerAudioCallback(mAudioCallback); mTYVoipAndroid.initVoip(mVideoCapture); mTYVoipAndroid.startVoip(int videoBitRate, int audioBitRate, int userId);

    <4>根据逻辑,添加(删除)需要通话的节点: mTYVoipAndroid.addClientNode(int userId); //mTYVoipAndroid.removeClientNode(int userId);

    <5>不需要通话时,停止 voip: mTYVoipAndroid.stopCall() //清空现有的连接节点(不再接收节点的数据) mTYVoipAndroid.clearClientNodeList();

    <6>根据具体的业务逻辑重复步骤 3、4、5

    <7>在程序结束时销毁 voip mTYVoipAndroid.release()

    四、部分代码解释:(从用户甲的实现代码来解释)

    private TYVoipVideoRender preView; //渲染甲的视图 private TYVoipVideoRender otherView; //渲染乙的视图

    <1>登录操作: 甲( UserID:401 )登录操作,返回值为是否登录成功(非 0 即为成功):

    /** *连接转发服务器 *@param ip @param 端口号 @param userId @param sessionId *@param AppKey @param AppSecret @return !0 即为成功 */ mTYVoipAndroid.loginRelayServer(ip, port, 401, sessionId, AppKey, AppSecret);

    <2>连接操作 甲连接乙操作: ...一系列操作 / //甲自己加入到通讯中 mTYVoipAndroid.startVoip(512, 16000, 401); //添加节点(添加乙的 USerID ) mTYVoipAndroid.addClientNode(402);

    //在 videoCallBack 上进行视图渲染

    private TYVoipAndroid.VideoCallback mVideoCallback = new TYVoipAndroid.VideoCallback() { @Override public void renderVoipVideoData(VoipImage voipImage) { if (voipImage.isLocal){ //本地视频渲染(甲的数据流) preView.pushVideoFrame(voipImage); }else { //非本地视频渲染(乙的数据流) otherView.pushVideoFrame(voipImage); } } }; //在 audioCallBack 回调方法目前还未用到,忽视此回调

    <3>断开操作 甲进行断开通信操作 //停止相机视频捕捉 mVideoCapture.stop() //清空现有的连接节点(不再接收节点的数据) mTYVoipAndroid.clearClientNodeList(); //结束 Voip 通话 mTYVoipAndroid.stopCall() //释放资源 mTYVoipAndroid.release()

    项目中最重要的代码介绍完啦,一套完整的 android 音视频通信系统就完成了。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:53 · PVG 07:53 · LAX 15:53 · JFK 18:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.