草上爬
专注技术,热爱分享
展开
-
WebRTC笔记之二十二:基于WebRTC的视频聊天室—QHTalkGenius
利用空余时间,前后历时5个月,在公司大佬杰哥的指导下,QHTalkJanus终于搞定了。功能很简单,参考Janus的web客户端来做的,主要实现了三部分:1.Janus信令解析—这个用的是开源库WebSocketPP;2.PeerClient—基于WebRTC封装了Publisher和Subscriber;3.UI—当然是Qt啦。各部分之间低耦合,可以独立封装成库。当然小的bug肯定会有,毕竟这只是个Demo,不过比网上那些编都编不过的....,肯定会好很多,而且实现的每一步都记录在了专栏中,方便查阅。原创 2022-02-28 22:12:40 · 6058 阅读 · 39 评论 -
WebRTC笔记之二十一:基于WebSocketPP的Janus客户端
此客户端在WebRTC笔记之十三:Qt版PeerConnection的基础上修改而来,将信令模块由http换成了WebSocket一.效果1.浏览器与Janus客户端2.两个Janus客户端二.实现在WebRTC笔记之二十:Janus信令交互流程 介绍了信令的交互,这里只需用WebSocketPP来收发这些信令即可。WebRTC笔记之二十:Janus信令交互流程只抓包分析了单个客户端加入房间时的流程,本篇中将要参考share/janus/demos/janus.js和share/原创 2022-01-15 17:50:54 · 3438 阅读 · 6 评论 -
WebRTC笔记之二十:Janus信令交互流程
Janus包含三种类型的节点:1.根节点 server root (可配置,默认是/janus),只能在该节点中创建janus会话2.会话节点 session endpoint (例如/janus/12345678)3.插件handle节点 plugin handle endpoint (例如/janus/12345678/98765432),插件handle节点会被添加到会话中会话节点用来处理与会话相关的消息,插件handle节点用来处理与插件相关的消息,一个会话节点中可以管理多个插件handle原创 2022-01-15 12:35:23 · 4232 阅读 · 1 评论 -
WebRTC笔记之十九:基于WebSocketPP的TLS客户端和服务器
一.前言要验证WebSocketPP的TLS功能,很自然会想到源码examples目录中的print_client_tls.cpp和echo_server_tls.cppwebsocketpp/examples/print_client_tls/print_client_tls.cppwebsocketpp/examples/echo_server_tls/echo_server_tls.cpp但是直接使用这两个examples会报错握手失败的错误:[error] handle_transpo.原创 2021-12-22 16:52:52 · 5046 阅读 · 2 评论 -
WebRTC笔记之十八:WebSocketPP
一.WebSocketPP简介1.WebSocketWebSocket是HTML5 引入的新特性,它通常用 Web端,为构建实时全双工的Web应用提供方便。WebSocket是一个基于TCP的应用层协议,它复用了HTTP握手规范,通过HTTP来建立WebSockt通道,客户端和服务器端都可以通过这条通道主动发起请求,通道建立完成后是持久化的,因而 WebSocket有着“Web 的 TCP”之称。协议的实现可以是多样化的,除了可以在前端开发的JavaScript中使用WebSocket之外,我们也原创 2021-12-14 22:16:34 · 5997 阅读 · 2 评论 -
WebRTC笔记之十七:腾讯云CentOS 7.6搭建Janus之参数配置
一.效果这里测试web与web的通话浏览器打开音视频采集的话需要HTTPS加密访问,否则会报错二.参数配置1.安装nginx下载:http://nginx.org/download/tar -zxvf nginx-1.15.12.tar.gzcd nginx-1.15.12# 配置,一定要支持https./configure --with-http_ssl_modulemakemake install2.生成自签名证书mkdir -p ~/certcd ~.原创 2021-12-09 23:30:16 · 4870 阅读 · 1 评论 -
WebRTC笔记之十六:腾讯云CentOS 7.6搭建Janus之编译安装
一.Janus编译环境在配置之前我已获取root权限将config和lib路径添加到临时环境变量,这样可以避免库已安装,却找不到的问题export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATHexport LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/原创 2021-12-09 20:04:25 · 4111 阅读 · 1 评论 -
WebRTC笔记之十五:将WebRTC用于多人音视频通信(续)
在上篇博文中WebRTC笔记之十四:将WebRTC用于多人音视频通信已经旗帜鲜明的指出WebRTC采用的是SFU架构的服务器,这篇在详述一下SFU的原理和实现。一.SFU (Selective Forwarding Unit)架构现在互联网行业比较流行的是SFU(Selective Forwarding Unit),简单说就是只负责转发流,不负责合流,压力很小。这样的模式可以依托CDN进行分布式的部署,不过拉流的方数限于客户端的带宽和处理能力。SFU架构最核心的特点是服务器除了处理信令之外,还原创 2021-12-02 12:05:28 · 3353 阅读 · 2 评论 -
WebRTC笔记之十四:将WebRTC用于多人音视频通信
WebRTC非常适合点对点(即一对一)通信。 但是,当我与客户讨论超出一对一(即一对多或多对多)的解决方案和服务时,问题就出现了:“我应该采用哪种架构?”。 有些服务提供商希望复用他们网络中的组播支持(我们正在为此尝试做一些实验),有些正在探索基于联播(simulcast)的解决方案,还有一些正在考虑像MCU /Mixer这样的集中式解决方案,而其中一些 只是愿意通过使用基于Mesh的技术将负担放翻译 2018-04-02 17:11:46 · 7781 阅读 · 2 评论 -
WebRTC笔记之十三:Qt版PeerConnection
用惯Qt Creator后再用VS感觉很不习惯,VS现在也只偶尔调试用一下。而且VS版PeerConnection里面回调太多,跳来跳去一不小心就迷失方向,还是Qt信号和槽的机制比较利于代码阅读。因此按照自己的习惯改写成Qt版PeerConnection。一.环境WebRTC版本:2021.03.07的master分支,详见 WebRTC笔记之二:编译Qt版本:Qt5.12.6 VS2017二.效果客户端A客户端B服务端:与原生PeerConnection例子不..原创 2021-12-01 21:36:39 · 5901 阅读 · 22 评论 -
WebRTC笔记之十二:原生PeerConnection例子简析
几年前使用早期版本的WebRTC做了几个Demo,后因为工作原因,没再深入研究。最近在做直播客户端,用到了WebRTC,系列笔记可以继续写下去了!原创 2021-11-30 17:24:42 · 3665 阅读 · 2 评论 -
WebRTC笔记之十一:最简单的聊天升级版
一.环境WebRTC版本:2021.03.07的master分支,详见WebRTC学习之二:编译Qt版本:Qt5.12.6 VS2017二.效果三.实现在上一篇WebRTC笔记之十:最简单的聊天(音频+视频)中,音频和视频分别使用了一个webrtc::Call对象,这里精简代码,让音频和视频公用一个webrtc::Call对象,如下所示:bool QHMediaEngine::SetupCall(){ if(video_engine_) { ..原创 2017-01-17 17:43:45 · 13091 阅读 · 25 评论 -
WebRTC笔记之十:最简单的聊天(音频+视频)
一.环境WebRTC版本:2021.03.07的master分支,详见WebRTC学习之二:编译Qt版本:Qt5.12.6 VS2017二.效果三.实现这里直接将WebRTC笔记之八:最简单的音频聊天(使用WebRtcVoiceEngine)和WebRTC笔记之九:最简单的视频聊天(使用WebRtcVideoEngine)组合起来。为了使代码更加简洁,我们可以参考WebRTC源码,使用多继承。比如视频部分如下所示:class QHVideoEngine : publi..原创 2017-01-11 08:58:27 · 13687 阅读 · 4 评论 -
WebRTC笔记之九:最简单的视频聊天(使用WebRtcVideoEngine)
一.环境WebRTC版本:2021.03.07的master分支,详见WebRTC学习之二:编译Qt版本:Qt5.12.6 VS2017二.效果这里使用的是虚拟摄像头,虚拟摄像头那家强,当属OBS的插件。右下角是本地视频,比较大的是远端视频。三.实现1.数据发送翻看WebRTC源码,可以发现rtp/rtcp的发送最终会调用到cricket::MediaChannel::NetworkInterface接口中的SendPacket和SendRtcp方法。因此我们只要子类化这个.原创 2017-01-03 13:59:24 · 7433 阅读 · 1 评论 -
WebRTC笔记之八:最简单的音频聊天(使用WebRtcVoiceEngine)
一.环境WebRTC版本:2021.03.07的master分支,详见WebRTC学习之二:编译Qt版本:Qt5.12.6 VS2017二.效果三.实现1.数据发送翻看WebRTC源码,可以发现rtp/rtcp的发送最终会调用到cricket::MediaChannel::NetworkInterface接口中的SendPacket和SendRtcp方法。因此我们只要子类化这个接口,并重写SendPacket和SendRtcp方法,在这两个方法中用udp协议将数据发送出去。当然.原创 2017-01-03 14:08:45 · 7052 阅读 · 2 评论 -
WebRTC笔记之七:函数的异步执行
一.理论这部分转自转自:[WebRTC架构分析]WebRTC的线程模型 作者:陈子兴为了降低系统的复杂性,提高系统的运行效率,WebRTC设计了一套多线程框架,并且做了精心的设计。下来我们就分析一下 WebRTC 中的线程模型。1.线程结构图WebRTC 的线程模型相对复杂一些,哪些模块要在哪些线程下运行,都是有规定的。要想更好的理解 WebRTC 的实现,分析 WebRTC 的线程框架是必不可少的。线程框架结构图如下:图中每一个矩形框都代表了一个线程,我们这里列出了 11 个线程,当然原创 2017-01-09 12:12:04 · 6967 阅读 · 1 评论 -
WebRTC笔记之六:精炼的信号和槽机制
关于信号和槽有一个非常精炼的C++实现,作者是Sarah Thompson,该实现只有一个头文件sigslot.h,源码在:http://sigslot.cvs.sourceforge.net/viewvc/sigslot/sigslot/sigslot.h?revision=1.1.1.1&content-type=text%2Fplain在WebRTC中,sigslot .h是其基原创 2017-01-05 09:06:52 · 6016 阅读 · 1 评论 -
WebRTC笔记之五:摄像头的捕捉和显示
头文件包含的类说明voe_base.hVoiceEngineObserverVoiceEngineVoEBase1.默认使用G.711通过RTP进行全双工的VoIP会话2.初始化和终止3.通过文件和回调函数跟踪信原创 2016-12-26 21:18:52 · 12290 阅读 · 3 评论 -
WebRTC笔记之四:录音和播放
说明voe_base.hVoiceEngineObserverVoiceEngineVoEBase1.默认使用G.711通过RTP进行全双工的VoIP会话2.初始化和终止3.通过文件和回调函数跟踪信原创 2016-12-03 20:06:05 · 16375 阅读 · 0 评论 -
WebRTC笔记之三:VS工程转换工具
上文中用gn工具生成的VS工程被默认配置为GN,如何转换成普通的VS工程呢,比较简单但是很繁琐的方式就是去源码目录中摘出需要的源文件添加到新建的VS工程中。当然这种方法有两个比较严重的缺陷:1.耗时,2.WebRTC迭代速度快,更新源码后还得去摘哪些变化的文件。本VS工程转换工具的使命就是为了解决上面两个问题,先上图,原理稍后介绍。一.效果转换中:转换结果:二.原理...原创 2021-11-29 20:51:56 · 4320 阅读 · 5 评论 -
WebRTC笔记之一:开篇
一.无插件的实时通讯 想像一下,如果你的手机、电视、电脑都可以通过一个平台进行通信,想像一下,你可以在Web应用中轻松地加入视频聊天和p2p数据分享,这就是WebRTC的愿景。 想试一试吗?WebRTC现在已经被集成到Chrome、Opera和Firefox,在apprtc.appspot.com有个简单的视频聊天应用可供测试。1.在Chrome、Opera或F翻译 2016-11-23 17:25:19 · 49447 阅读 · 7 评论