前面写了那几篇Webrtc方面理论性的知识,从这篇文章开始终于开始进入Janus WebRTC server的源码阅读和分析;
注意:
后面的文章要求:
工欲善其事,必先利其器,这篇文章我们来说下阅读Janus-gateway源码准备的工具和环境;同时了解下如何利用这些工具阅读Janus源码
Janus WebRTC server是由C语言编写,依赖了Linux系统的一些特有库,所以不支持在Window下进行编译调试,由于linux和MacOS其实最终是同宗同源,所以Janus也能在Mac系统下面进行编译和安装; 所以为了方便开发调试及体验,我们这里需要准备一个Linux或者Mac系统的机器;我这里是Visualbox虚拟机+Ubuntu16.04;并且我把环境及依赖库导出来存在网盘中,如果有网友觉得从头到尾搭建环境比较麻烦可以留言找我要网盘地址,总大小4G左右,这个虚拟机镜像包括【ubuntu+Janus编译环境+Janus源码+VisualStudoCode的C调试环境+Wireshark】;
这里我使用轻量级的编辑器Viusal studio code和C/C++插件如下图:
在ubuntu中安装了Wireshark,用Wireshark抓包分析信令协议和Webrtc中的各种协议例如ICE,SDP,RTP等等;这样抓包分析协议再结合Janus WebRTC server源码比纯粹只阅读Janus源码上手要快的多
使用VisualStudio Code调试Janus代码之前,请确保你正确的编译了源码;编译方式请看这篇文章
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/opt/janus/bin/janus", // Janus编译后的二进制文件,看前面编译Janus源码相关文章
"args": ["--config=/opt/janus/etc/janus/janus.jcfg"], // Janus配置文件目录,看前面编译Janus源码相关文章
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
经过以上两步后,直接打断点进行RUN就可以调试Janus WebRTC server源码了
安装完Wireshark后要root权限启动Wireshark,Ubuntu系统也就是执行【 sudo wireshark 】,否则无法获取网卡接口,会列出很多网卡包括一些虚拟网卡通道,如果不确定需要抓取哪个,就选择any进行抓包,也就是抓所有网卡的包;
因为我配置Janus WebRTC server 使用Websocket作为信令transport;所以我过滤只抓包websocket 和udp的包,Websocket是信令通道,UDP是Webrtc的相关协议通道,例如RTP,ICE……
如下图:
请看上面第一个Websocket信息和第二个Websocket信息,我们知道Janus信令是自定义的Json格式,第一个,第一个信令告诉Janus WebRTC server 创建,其实就是创建一个客户端UDP的Session用户记录一个客户端连接,后续详细剖析源码的时候会知道;创建Session成功后Janus WebRTC server回通过Websocket返回成功的信令,并且我们还能看出来一来一个会的信令的transaction标志是相同的,也就是属于同一个事务;
通过以上的步骤把UDP包转成RTP包进行分析,这样更直观;但是要进行详细的分析必须要了解RTP协议,否则其中RTP的Header和Body看不懂也不知道如何分析啊
这里我进行抛砖引玉,说明我后续如何进行分析Janus 源码和其中的协议;要想很好的理解和分析,这些协议还是需要我们详细的了解;否则也没法进行分析
引用文章请标明出处,否则可以保留一切追究责任的权利
技术交流:
qq:408365330
微信:egojit