自研视频会议库XNet介绍 (不使用webrtc sip等,实现视频会议,音视频通话,连麦,对讲等)

实现视频会议有很多方案,比如现在比较流行的webrtc(服务端结合coturn和licode), 还有sip协议相关的开源方案,服务端freeswitch或者opensips,客户端linphone,pjsip等,都可以很容易实现音视频通话系统。linphone本身是个成品软件,app应用商店上就能下载,很多人在其基础上改一下界面,做成自己的产品。像webrtc,freeswitch这种,确实做的不错,但实现也比较复杂,没有一些技术功底,并且对其代码很熟悉的话,不容易针对业务进行修改,做成视频会议更是困难。 使用开源代码,如果代码更新了,自己的代码也得随之更新,业务逻辑就得随之更改,比较麻烦。
之前和朋友一起搞过一个视频通话项目,也借鉴了一些开源实现,写了一个网络库XNet,使用简单方便,自己可以自由修改扩展,不需要的东西也可以去掉,比如音视频编解码只支持h264和opus,其他编解码库看需求添加。网络库是纯c++实现,只包括网络传输模块,加入了jitterbuffer,qos控制等。上层用c++写相关业务逻辑,实现服务器和客户端。cmake编译各个平台库。各个平台单独搞音视频采集和编解码,可以针对系统进行优化,当成库给第三方集成的话占空间也比较小,开源的那些库一般包含的东西很多,所以占空间比较大,自己写的库也不会有库冲突的问题,例如有些视频app继承了很多第三方的cdn库,有些cdn库又用了相同的开源库(例如libevent,libev,ffmpeg等),版本却不一样,这样就会出现崩溃或者很多莫名其妙的问题。XNet 内部没有使用任何开源库,基于socket使用select,poll,epoll跨平台实现高并发异步模型,音视频传输使用udp并进行了qos优化。此库适用于不用第三方sdk,自研视频会议,实时音视频通话,连麦等的开发人员 demo地址如下:
XNet服务端demo代码地址,
iOS端XNet demo代码地址
安卓XNet demo端代码地址
另外 开源代码里边对底层采集播放等内容封装的比较厉害,新手短时间内不容易看明白。在我的另外一篇博客已经讲过了iOS rtmp 摄像头/录屏直播以及观看
。想了解iOS 底层的音视频采集播放等在视频通话中的具体实现。 也可以看一下上边的XNet iOS端demo。视频通话和直播的区别,主要在音频采集和播放方面。iOS 通话主要使用AudioUnit,效率和功能更多一些。AudioUnit提供了降噪(kAudioUnitSubType_VoiceProcessingIO),混音(kAudioUnitSubType_MultiChannelMixer)接口,具体还需注意采样率音频格式等, 安卓降噪采用了webrtc相关技术,可以参考上述代码。
目前服务器端网络库提供了mac和Linux版本,提供给大家使用。大家只需要下载下来用xcode运行,或者cmake编译运行都可以。c++网络编程,音视频等方面如有问题探讨,欢迎联系qq(592979271),一起探讨。

你可能感兴趣的:(流媒体开发)