- ICE收集完成的条件
- 连接状态的变化
WebRtc连接状态变化
2019-12-05 11:14:44WebRTC被发现泄漏本地IP地址
2019-12-05 11:13:33使用WebRTC广播IP摄像头视频流
2019-12-05 11:12:53技术上来说,从IP摄像头实现在线广播并不需要WebRTC。IP摄像头本身就是服务器,可以自行连接路由器并传输视频内容。既然这样,我们为什么还需要WebRTC?
有两个原因:
1.随着观看以太网广播的观众增加,他们会逐步感受到带宽的不足,然后是摄像头资源,如果观众持续增加的话;
2.如上面提到的,一个IP摄像头就是一个服务器。但是它使用什么协议传输视频到浏览器或者移动设备?一个使用HTTP的摄像头很有可能基于HTTP传输视频帧或者JPEG图像。但是,HTTP流并不完全适用于实时视频传输。对于请求式视频,它确实工作良好,但是仅限于互动性和延迟要求不高的场合。确实,如果你在线观看一部电影,延迟5-10秒确实不太重要。好吧,除非你在和其他人同时观看:“oh,不,杰克谋杀了她!”爱丽丝给鲍勃发送信息10s之后,鲍勃才看到了这一幕悲剧。
另外一个选项是RTSP/RTP加上H.264。但是这种情况下浏览器需要安装一个视频播放插件,例如VLC或者QuickTime。这类插件将会接受并播放视频,就像播放器一样。但我们需要真实的基于浏览器的流,不需要任何附加的工具。
好,现在让我们“sniff”我们的IP摄像头,学习一下它到底向浏览器发送了什么。我们采用D-Link DCS 7010L来做测试:
WebRTC 的三个“陷阱”
2019-12-05 11:12:07关于我们WebRTC APP的故事起始于2018年2月份,形象地来说,一个叫 Redacted 的人在开会时想要我们实现一个具有 redacted 特性的 redacted APP。你可以将它理解为实时视频交流。
陷阱1:不理解WebRTC技术。
起初,我们对WebRTC没有任何实际经验。尽管2011年就发布了WebRTC,但是它的想法包含了许多已经建立的领域,例如VoIP交流,网站开发, 视频流等等。
但是WebRTC是一种新技术,它在浏览器中的实现经常变化,你所了解的WebRTC信息经常有可能是过时或者错误的。
因此我的建议是在你开发App之前充分了解WebRTC:
1.你应该了解关于你必须用来开发WebRTC App的服务器的一切.
2.学习建立点对点连接的发信过程。
3.明确媒体是如何处理传输的。
4.有必要时咨询专家。
webRTC base模块MessageQueue消息队列的实现
2019-12-05 11:09:22WebRtc: PeerConnection demo测试
2019-12-05 11:08:36系统: ubuntu14.04 工程: webrtc-linux 网络:本机localhost
webrtc工程编译过后会在out/linux目录下生成一些测试用可执行程序
其中有 peerconnection_server 和 peerconnection_client可以用于测试连接
- 后台执行server
./peerconection_server &
可以看到执行后提示正在监听8888端口 - 后台执行第一个client
./peerconnection_client &
会弹出一个ui对话框 按enter键确认 - 执行第二个client
./peerconnection_client
执行后可以看到ui框中会出现可点击的主机名 双击
注意: 由于在ubuntu下测试 视频对话框并不会跳出显示在屏幕下,而是运行但不显示在屏幕上,注意在图标栏中寻找一下视频对话框
我的视频对话框图像是红色的,不正常 有待解决问题.
webRTC入门: 打包webRTC库应用到自己的工程中
2019-12-05 11:07:38打包webRTC库
在linux下打包webRTC库链接到自己的工程中
webRTC Linux SDK编译静态库
webRTC指定target_os为Linux后,根据gn的编译规则 并不像android那样会生成动态库so。想要使用webRTC库 需要自己提取静态库
静态库分布
打开webRTC SDK目录
cd out/linux
编译目录下会生成例如peerconection_client这样的测试用例 同时还有许多的webRTC模块静态库。
对 webRTC并不像常见的开源工程那样生成一个整体的库 而是根据模块来生成,类似ffmpeg的做法
这样一来 想要避免在cmake中手动链接如此多的静态库 就需要我们自己链接生成统一的libwebrtc.a
WebRTC SDP协议
2019-12-05 11:06:41SDP Session Description Protocol 会话描述协议
SDP协议用来在SIP终端之间交换媒体信息,WebRTC标准中同样选用了
SDP协议来交换媒体信息.
WebRTC Peer之间交换SDP包括的信息有transport protocols,ports,codecs等等
相关的IETF文档:
https://tools.ietf.org/pdf/draft-nandakumar-rtcweb-sdp-08.pdf
语法
SDP由多部分信息组成 每部分信息占一行.
<type>=<value>
v= 表示版本
o= 表明会话源 ssrc
s= 表明会话名
a= 表明会话属性
m= 表明媒体协议信息
webRTC PeerConnection连接过程
2019-12-05 11:05:08PeerConnection是webRTC的顶层接口,代表一个通话对象.
要建立点对点的音视频通话需要的双方各建立一个PeerConnection并交互信令完成对接.
signal信令
webRTC的信令指的是 SDP和Candidate
1. SDP是session description,描述local的多媒体情况
2. Candidate是候选,包含了p2p的信息
webRTC文档中描述的需要用户自定义实现的信令交互过程其实就是两个
PeerConnection交换sdp和candidate的过程.
最简单的信令可以直接通过socket来实现,webRTC的官方demo
PeerConnection client就是将sdp和candidate json序列化后通过socket发生出去的.
WebRTC 连接Linux端和Android端
2019-12-05 11:02:48WebRTC的通常连接流程:
http://blog.csdn.net/qq_21358401/article/details/79190561
WebRTC SDP协议:
http://blog.csdn.net/qq_21358401/article/details/79341031
连接不同平台的PeerConnection的流程和通常流程没有什么区别.
但很容易遇到这些一个问题:
1. 不支持的音视频编解码器
WebRTC报错: failed to set video send codecs
意为不支持收到的SDP里声明的某个视频编码
我在连接linux和android端时 就出现了android端不支持97和98(编码协议的RTP序号)
所以需要在设置local或remote的SDP前 修改sdp 去掉不支持的codec
2. 不支持的传输协议
这个错误常见于和浏览器的peer连接
浏览器通常不支持 UDP/TLS 这两个传输选项(firefox上发现问题)
解决方法同样是修改SDP 去除不支持的传输协议