如何利用 tucodec,搭建完整的 windows 版音视频通信系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
juice123
V2EX    2018

如何利用 tucodec,搭建完整的 windows 版音视频通信系统

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

    前两天介绍了如何搭建 iOS、Android 版音视频通信,本文就简单讲解一下如何在 Windows 系统上搭建音视频通讯系统。

    一、准备:

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

    点击 SDK 下载按钮跳转到下载界面,择下载 Windows 中所需 SDK 和 Demo。 我们提供的版本是 vs2013 版本和 vs2015 版本的 SDK 及相应的 WinDemo。

    2、下载 visual studio 开发工具并安装,因为 vs2013 和 vs2015 自带的一些库和编译选项有些许不同,所以必须选择与 SDK 匹配的 VS 工具进行开发。

    3、安装完成后双击打开图 3 中的 WinDemo.sln ,便可以看到如图 4 的工程界面,把生成类型调整为 Debug/x86,然后编译 WinDemo 项目。

    4、在 vs 中点击“本地调试器”即可运行本 demo,main 函数的两个参数已在工程配置选项中赋予

    或者手动将 opencv 和 Tucodec_SDK_Windows 的 bin 目录下的文件拷贝到 exe 所在的目录。然后在该文件夹下打开“命令提示符”或者“ Windows PowerShell ”,在命令行下面赋予 WinDemo.exe 两个参数,分别是自己的 ID 和对方的 ID,然后运行即可。

    5、SDK 相关说明在《 Windows 端 VoIP SDK 使用说明》一文,已经做了详细介绍,本文接下来主要介绍 WinDemo 的代码结构,方便开发者理清开发流程。

    二、WinDemo 介绍

    总的来说,Windows 端的音视频通信系统主要包括音视频采集、音视频播放和 VoIP 负责的音视频传输三个模块。利用图鸭科技提供的 SDK 及由图鸭科技公司开源的转发服务器代码( http://www.tucodec.com ),开发者可以搭建自己的音视频通信服务器。因此,开发者主要面对的问题就是 Windows 端的音视频采集与播放问题,也是本文着重介绍的地方。

    1、视频采集和播放

    有经验的开发者看到压缩包内的 opencv 目录便知道了在本 Demo 中对视频的处理借助了 opencv 的帮助,其优点是可以非常方便的进行视频采集和播放,为开发者屏蔽了与 Windows 硬件交互的诸多繁杂任务。Demo 中的 CVideoCap 和 CVideoRender 两个类就是利用了 opencv 库进行视频的采集和渲染。

    当然,opencv 有一个比较大的缺点儿就是耗费系统资源比较多,如果电脑配置一般的话会发现开启 opencv 渲染视频后电脑的 CPU 负荷会出现大幅上涨。所以如果想把我们的 SDK 用于产品研发的话,推荐自己实现客户端的采集和播放功能,常用的有 DirectShow,SDL,DirectX SDK 等官方提供的 SDK。

    2、音频采集和播放

    由于 opencv 不能完成音频相关的处理任务,所以 Demo 中使用了微软提供的 Windows MultiMedia 相关 API 完成音频采集和渲染功能,详见 Demo 中的 CAudioCap 和 CAudioRender 两个类。

    3、CVoipManager 类

    这个类封装了音视频操作与 VoIP 之间的交互,是整个 Demo 的核心部分。

    部分方法和属性介绍:

    m_clientNetwork:ClientNetwork 实例,负责转发服务器的登录

    m_voip:TYVoip 实例,负责打通数据传输

    m_voipCallback:TYVoip 中的接口实现,是 voip 的视频回调接口,客户端从这个类中获得 voip 传过来的视频数据

    m_selfID:本地的 usrID

    m_sessionID:会话 ID

    m_audioCap,m_audioRender,m_videoCap,m_videoRender:音视频采集渲染

    m_ac,m_ai,m_vc,m_vi:音视频格式配置

    m_nodeList:添加的通信节点列表

    LoginServer:登录转发服务器(转发服务器需要提前配置好),因为是通过转发服务器做数据传输或 P2P 打洞,所以在添加对方为节点的时候要保证两者都是在线状态,当然这个在登录模块做了处理,如果对方还没上线会一直请求下去。

    AddNote:添加一个通信节点

    RemoveNote:移除一个通信节点

    StartVoipTransmit:开始音视频采集和渲染以及传输

    EndVoipTransmit:结束音视频采集和渲染以及传输

    三、效果展示

    1、自己登陆 ID 为 1,添加节点为 2,但 2 未上线的情况

    只能看到本地视频回路已被打开,控制台打印信息主要有:

    login success:表示登陆转发服务器成功

    add node 2:表示添加节点 2

    get p2p addr of uid:2 fail:是在请求添加 2 节点,但是 2 节点还没有上线

    2、本地 ID 为 1,添加节点 2,且节点 2 已上线

    就完成了 Windows 端的音视频通信。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2558 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 02:14 PVG 10:14 LAX 19:14 JFK 22:14
    Do have faith in what you're doing.
    ubao msn 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