视频会议简单认识
引言音视频通话主要需要解决以下几个问题,怎么找到对方;如何与对方连接以及如何看到(听到)对方。那么音视频会议就是要解决如何管理控制音视频通话。
如何发现对方信令视频会议系统经过几十年的发展,信令层面两分天下。传统视频会议设备一般走 H323 协议,互联网一般走 SIP 协议。但是随着互联网的高速发展,目前的会议设备与会议系统都同时支持 H323 与 SIP 协议,其中 H323 一般作为网关用于支持一些专业的视频会议终端,SIP 作为集群部署时服务间的信令通信。其中代表有华为、思科等老牌视频会议方案供应商。至于提供公共视频会议的方案的厂商(如腾讯、阿里),一般采用自有的私有协议,需要第三方厂商或自己去开发以支持 SIP 协议。
库
sofia-sip
h323Plus
jssip
如何与对面连接SDP 与 COTURN音视频在复杂网络环境下的音视频流传输一直是一个问题,此问题一般只有大厂(如:思科、华为等)才能有成熟的解决方案。目前,开源的 WebRTC 通过 SDP 与 COTURN 解决了在复杂网络环境的连接问题。
库
coturn
rtpegine
如何看到与听到对方音视频采 ...
FFmpeg的配置安装错误记录
本文主要记录本人在编译安装 FFmpeg 的时候出现的各种问题,这种问题出现在各种环境中,因而我会标明不同的环境下面。
当然主要环境分为三大类 Win、Linux和交叉编译,Mac本人没有就不算在里面。
“libavutil/avconfig.h”: No such file or directory
背景:我在 Win 环境中编译 FreeSWITCH 的 mod_av 模块的时候,这个模块依赖于 FFmpeg,因而总是报这个错误。
错误信息:
解决:
方案一:这个文件是中的内容是自动生成的,最好的方式让其能够自己生成(由于 FreeSWITCH 的 FFmpeg 只配置了x64 平台的,所以 debug 运行时需要选择 x64 平台,否则会出现这个问题)
方案二:直接从外部拷贝一个已经生成好的文件到此处即可,在 Linux 平台上编译了的话就会搜索到这个文件
方案三:直接创建该文件并复制其中的内容 123456/* Generated by ffmpeg configure */#ifndef AVUTIL_AVCONFIG_H#define AVUTIL_AVCONF ...
FreeSWITCH中管理依赖下载方式
由于本人不是纯正的 VS 开发人员,本人一直很疑惑 FreeSWITCH 是如何管理它的所有依赖下载的,以及下载后的依赖如何编译进入 FreeSWWITCH 的整体项目中的。
因而这里记录下在我实际开发过程中,发现的 FreeSWITCH 的管理依赖的方式。
依赖下载我们首先要确定 FreeSWITCH 都有哪些依赖内容,他们的依赖内容是什么样子的。
FreeSWITCH 依赖的都是例如 ffmpeg、libyuv 等这种成熟的项目,因而肯定需要从外部进行下载,这些从外部的下载肯定有具体的配置位置。
开发中发现本地的依赖项目都是通过 vs 的属性管理器进行依赖管理,这个属于 vs 的依赖管理,因而很容易就思考到是否也是采用同样的方式进行远程的这种依赖。
那么,我们就要在属性管理器中看下这些依赖是否在这里配置,很显然属性配置器中无法看到具体的下载内容。我们立即想到去看源文件。
最终,我们可以在 w32 中发现各种标有 download 开头的 props 文件,直接打开文件就可以看到里面的带有 http 下载链接的属性
依赖如何打包进 FS 中从上面我们已经知道了 FS 中的依赖下载,下 ...
FreeSWITCH解析originate命令
我们在实现任何外部呼叫能力的时候无论如何都绕不开 originate 命令或者说 bridge。
当然为了简单起见,我这里先跟着 originate 进行源代码分析。
环境
环境名
版本
WIN
WIN10
FS
1.10.0
VS
vs2017
originate_functionmod_commands 这个模块,集成 FreeSWITCH 大部分的命令,而 originate 命令就是其中的一个命令。位于 mod_commands.c 中,
其中代码如下 :
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697#define ORIGINATE_SYNTAX ...
FreeSWTICH中自定义命令的添加
本文将介绍如何在 FreeSWITCH 中开发自己的命令。本文需要在FreeSWTICH在vs中添加一个测试模块作为基础知识。
环境
环境名
版本
WIN
WIN10
FS
1.10.0
VS
vs2017
FreeSWITCH 模块基础知识关于模块的定义、生命周期的开启与结束都在以下所示的定义中:
12345SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xx_shutdown);SWITCH_MODULE_LOAD_FUNCTION(mod_xx_load);SWITCH_MODULE_RUNTIME_FUNCTION(mod_xx_runtime);SWITCH_MODULE_DEFINITION(mod_xx, mod_xx_load, mod_xx_shutdown, mod_xx_runtime);
此行我们着重关注模块的启动,因为我们将要在里面放置我们需要添加的命令。那我们直接开始上代码把!
添加一个命令在 SWITCH_MODULE_LOAD_FUNCTION中添加指向处理命令的 mod_name_function 并告知 ...
WebRTC 在 Win 中源代码编译
本文主要讲解本人在 win 中编译 WebRTC 的过程中所遇到的问题与思考。
gclient“工欲善其事,必先利其器”。那么我们必须先对这个工具有一定的认知。
为什么需要 gclientgclient 是谷歌开发的一款跨平台 git 仓库管理平台。
为什么要有这个呢?因为像这种大项目,被拆分成很多个子项目,子项目分别进行研发,这样的好处就是能够复用大量代码,方便多人开发(每个团队只负责一个项目),每个子项目都有版本规划。
那么集成代码的时候怎么办呢?难道要开发人员记得每个项目的版本号吗?比如:我们需要 webrtc M87,里面分成很多子项目,每个子项目都有对应的版本号,如果版本号错了可能存在接口兼容问题。
通过上诉问题,我们就知道 gclient 的作用了。本质就是方便集成所有的仓库的内容
gclient是如何运行gclient 将多个仓库组成一个 solution(解决方案)进行管理。这个解决方案用 .gclient 文件进行描述,其中描述了需要拉取那个解决方案,可以通过gclient conf创建文件。例如:我们要拉取 webrtc 这个解决方案,就在里面配置 webrtc 的 ...
webrtc源码解析-音频调用流程
本文主要记录下我阅读 webrtc 时候的其中关于从音频启动 voice-engine 到通过创建 source 获取到数据的整个流程,至于如何通过 source 传输 rtp 有待后续阅读分析。
本人阅读的代码在 window 端,因而可能更关于 window 的实现
create adm整个过程主要是创建 adm (audio device manager) 的过程,这里通过创建获取到了 window 的音频采集能力
123456789101112api/create_peerconnection_factory.cc:70 CreateModularPeerConnectionFactorypc/peer_connection_factory.cc:71 PeerConnectionFactory::Create Createpc/peer_connection_factory.cc:85 ConnectionContext::Create Createpc/connection_context.cc:126 ChannelManager ...
win中有用的命令
win 测试内网中所有连接设备1for /l %i in (1,1,255) do ping -n 1 -w 60 192.168.1.%i | find "回复" >> pingall.txt
FreeSWTICH在vs中添加一个测试模块
本文主要记录如何在 vs2017 中添加一个模块,并编译运行。然后,测试 event 内容
环境
环境名
版本
WIN
WIN10
FS
1.10.0
VS
vs2017
添加一个模块手动添加各种参数
在 vs2017 的资源管理中,选择一个文件夹,添加一个 c++ -> dll 项目,添加完成后删除多余的内容。
添加引用,直接在项目处添加引用,选择项目中的引用 FreeswitchCoreLib
增加库文件,选择 项目-> 属性 -> c/c++ -> 所有选项 -> 附加包含目录 增加项目解决方案的 lib 即可,目录内容为$(SolutionDir)\src\include
修改预处理器。在 fs 项目中,通过 vs 添加的项目默认为导入,我们需要在 项目->属性->c/c++->预编译头->预处理器定义 中添加MOD_EXPORTS,将项目标识为导出。源代码如下所示:
1234567891011121314// 我们在使用 SWITCH_MODULE_DEFINITION 时会被扩展为带有 SWI ...
C与FS中内存分配简析
本文将会讲解C标准库中内存分配在不同平台的不同实现方式,以及fs对标准的一个工具化封装。主要是对fs的内存分配有一个简单的认识。
C中的内存分配C中的内存分配主要有以下三个方法。此处只是对其做简单的介绍,我发现一篇文章写得很好,可以阅读calloc、malloc、realloc函数的区别及用法!一文
malloc:其原型为void *malloc(unsigned int num_bytes),其中此处的num_bytes不是Bytes,所以需要将c语言中的基础类型sizeof求值
calloc:其原型为void *calloc(size_t n, size_t size),这个本质还是malloc进行分配,分配完后并进行了初始化。可以看引用中malloc和calloc的差别一文
realloc:其原型为void *realloc(void *ptr, size_t new_Size),就是对空间进行扩充。扩充过程中如果比较大,那么会重新开辟空间并将原来空间内容拷贝过去,并将以前的空间释放。此处的大以系统为准,在以前的地址申请,如果能够申请那么大就直接返回以前的地址。
注意: ...