花了一天时间,将我们 andriod 上音视频通信编译步骤写下来 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
juice123
V2EX    2018

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

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

    前两天,图鸭君给大家介绍了如何在 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     Solana     917 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86