Android IOS WebRTC 音视频开发总结(三十)

本文主要介绍ICE与SDP交互过程中的一些知识,支持原创,文章来博客园RTC.Blacker,转载请说明出处。

用过libjingle模块的同学都知道连接过程中candidate的获取与连接流程,一边获取candidate,一边进行连接,所以整个过程很快,

但我们有时候用一些其他基于webrtc的产品来测试时发现很久才能看到对方的画面,这是啥原因呢?是不是程序有漏洞?

不是的,主要是他们采用了不同类型的ICE,详细区别见下图:

如上:右边就是libjingle所采用的ICE连接模式,左边是传统模式,主要差别就是candidate获取与建立连接的时间点不一样。

以下是traditional ICE下SDP交互的例子:

sdpOffer:v=0
 o=- 1610437942022958275 2 IN IP4 127.0.0.1
 s=-
 t=0 0
 a=group:BUNDLE audio video
 a=msid-semantic: WMS WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs
 m=audio 49290 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
 c=IN IP4 43.251.159.28
 a=rtcp:49290 IN IP4 43.251.159.28
 a=candidate:4011286938 1 udp 2122260223 172.16.36.4 49290 typ host generation 0
 a=candidate:4011286938 2 udp 2122260223 172.16.36.4 49290 typ host generation 0
 a=candidate:3671821981 1 udp 2122194687 192.168.232.1 49291 typ host generation 0
 a=candidate:3671821981 2 udp 2122194687 192.168.232.1 49291 typ host generation 0
 a=candidate:209874304 1 udp 2122129151 192.168.234.1 49292 typ host generation 0
 a=candidate:209874304 2 udp 2122129151 192.168.234.1 49292 typ host generation 0
 a=candidate:430735571 1 udp 2122063615 192.168.1.102 49293 typ host generation 0
 a=candidate:430735571 2 udp 2122063615 192.168.1.102 49293 typ host generation 0
 a=candidate:2710871402 1 tcp 1518280447 172.16.36.4 0 typ host tcptype active generation 0
 a=candidate:2710871402 2 tcp 1518280447 172.16.36.4 0 typ host tcptype active generation 0
 a=candidate:2488824429 1 tcp 1518214911 192.168.232.1 0 typ host tcptype active generation 0
 a=candidate:2488824429 2 tcp 1518214911 192.168.232.1 0 typ host tcptype active generation 0
 a=candidate:1107399024 1 tcp 1518149375 192.168.234.1 0 typ host tcptype active generation 0
 a=candidate:1107399024 2 tcp 1518149375 192.168.234.1 0 typ host tcptype active generation 0
 a=candidate:1462729763 1 tcp 1518083839 192.168.1.102 0 typ host tcptype active generation 0
 a=candidate:1462729763 2 tcp 1518083839 192.168.1.102 0 typ host tcptype active generation 0
 a=candidate:1179184719 1 udp 1686052607 43.251.159.28 49290 typ srflx raddr 172.16.36.4 rport 49290 generation 0
 a=candidate:1179184719 2 udp 1686052607 43.251.159.28 49290 typ srflx raddr 172.16.36.4 rport 49290 generation 0
 a=ice-ufrag:8HnoGRmjieejKco5
 a=ice-pwd:acjBERhAuMGJhSKh+QV1RfYc
 a=fingerprint:sha-256 42:01:CE:4C:B3:00:75:C1:3D:71:91:85:55:D9:89:16:1F:F8:DC:13:45:C6:01:20:73:50:3F:68:F7:9B:42:A3
 a=setup:actpass
 a=mid:audio
 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
 a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
 a=sendrecv
 a=rtcp-mux
 a=rtpmap:111 opus/48000/2
 a=fmtp:111 minptime=10; useinbandfec=1
 a=rtpmap:103 ISAC/16000
 a=rtpmap:104 ISAC/32000
 a=rtpmap:9 G722/8000
 a=rtpmap:0 PCMU/8000
 a=rtpmap:8 PCMA/8000
 a=rtpmap:106 CN/32000
 a=rtpmap:105 CN/16000
 a=rtpmap:13 CN/8000
 a=rtpmap:126 telephone-event/8000
 a=maxptime:60
 a=ssrc:914767615 cname:I7njJbRyQNJXY+i8
 a=ssrc:914767615 msid:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs fbe366c6-6ac9-44b2-866f-0c629c9d2e45
 a=ssrc:914767615 mslabel:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs
 a=ssrc:914767615 label:fbe366c6-6ac9-44b2-866f-0c629c9d2e45
 m=video 49290 RTP/SAVPF 100 116 117 96
 c=IN IP4 43.251.159.28
 a=rtcp:49290 IN IP4 43.251.159.28
 a=candidate:4011286938 1 udp 2122260223 172.16.36.4 49290 typ host generation 0
 a=candidate:4011286938 2 udp 2122260223 172.16.36.4 49290 typ host generation 0
 a=candidate:3671821981 1 udp 2122194687 192.168.232.1 49291 typ host generation 0
 a=candidate:3671821981 2 udp 2122194687 192.168.232.1 49291 typ host generation 0
 a=candidate:209874304 1 udp 2122129151 192.168.234.1 49292 typ host generation 0
 a=candidate:209874304 2 udp 2122129151 192.168.234.1 49292 typ host generation 0
 a=candidate:430735571 1 udp 2122063615 192.168.1.102 49293 typ host generation 0
 a=candidate:430735571 2 udp 2122063615 192.168.1.102 49293 typ host generation 0
 a=candidate:2710871402 1 tcp 1518280447 172.16.36.4 0 typ host tcptype active generation 0
 a=candidate:2710871402 2 tcp 1518280447 172.16.36.4 0 typ host tcptype active generation 0
 a=candidate:2488824429 1 tcp 1518214911 192.168.232.1 0 typ host tcptype active generation 0
 a=candidate:2488824429 2 tcp 1518214911 192.168.232.1 0 typ host tcptype active generation 0
 a=candidate:1107399024 1 tcp 1518149375 192.168.234.1 0 typ host tcptype active generation 0
 a=candidate:1107399024 2 tcp 1518149375 192.168.234.1 0 typ host tcptype active generation 0
 a=candidate:1462729763 1 tcp 1518083839 192.168.1.102 0 typ host tcptype active generation 0
 a=candidate:1462729763 2 tcp 1518083839 192.168.1.102 0 typ host tcptype active generation 0
 a=candidate:1179184719 1 udp 1686052607 43.251.159.28 49290 typ srflx raddr 172.16.36.4 rport 49290 generation 0
 a=candidate:1179184719 2 udp 1686052607 43.251.159.28 49290 typ srflx raddr 172.16.36.4 rport 49290 generation 0
 a=ice-ufrag:8HnoGRmjieejKco5
 a=ice-pwd:acjBERhAuMGJhSKh+QV1RfYc
 a=fingerprint:sha-256 42:01:CE:4C:B3:00:75:C1:3D:71:91:85:55:D9:89:16:1F:F8:DC:13:45:C6:01:20:73:50:3F:68:F7:9B:42:A3
 a=setup:actpass
 a=mid:video
 a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
 a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
 a=sendrecv
 a=rtcp-mux
 a=rtpmap:100 VP8/90000
 a=rtcp-fb:100 ccm fir
 a=rtcp-fb:100 nack
 a=rtcp-fb:100 nack pli
 a=rtcp-fb:100 goog-remb
 a=rtpmap:116 red/90000
 a=rtpmap:117 ulpfec/90000
 a=rtpmap:96 rtx/90000
 a=fmtp:96 apt=100
 a=ssrc-group:FID 1771045130 811642261
 a=ssrc:1771045130 cname:I7njJbRyQNJXY+i8
 a=ssrc:1771045130 msid:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs 79fdc2d6-85c1-4d67-bd7e-44bbe6334926
 a=ssrc:1771045130 mslabel:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs
 a=ssrc:1771045130 label:79fdc2d6-85c1-4d67-bd7e-44bbe6334926
 a=ssrc:811642261 cname:I7njJbRyQNJXY+i8
 a=ssrc:811642261 msid:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs 79fdc2d6-85c1-4d67-bd7e-44bbe6334926
 a=ssrc:811642261 mslabel:WPIpgsjC7ygH2f9MdWrqxrkG26wUHzt3zzLs
 a=ssrc:811642261 label:79fdc2d6-85c1-4d67-bd7e-44bbe6334926
sdpAnser:v=0
 o=- 1610437942022958275 0 IN IP4 0.0.0.0
 s=Kurento Media Server
 c=IN IP4 0.0.0.0
 t=0 0
 a=group:BUNDLE audio video
 m=audio 49350 RTP/SAVPF 111 0
 c=IN IP4 115.28.63.56
 a=rtpmap:111 opus/48000/2
 a=rtpmap:0 PCMU/8000
 a=sendrecv
 a=rtcp:49350 IN IP4 115.28.63.56
 a=rtcp-mux
 a=ssrc:4085612173 cname:[email protected]
 a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
 a=mid:audio
 a=ice-ufrag:k69i
 a=ice-pwd:2OEh/hwoKondNA67xmXQ1s
 a=fingerprint:sha-256 00:C2:77:EF:2C:B1:73:01:10:29:3D:53:AB:81:29:59:F3:AA:9A:EB:91:B9:A8:F1:16:12:2D:6C:5A:5D:78:B2
 a=candidate:1 1 UDP 2013266431 115.28.63.56 49350 typ host
 a=candidate:2 1 UDP 2013266431 10.144.37.152 58353 typ host
 m=video 49350 RTP/SAVPF 100
 c=IN IP4 115.28.63.56
 b=AS:500
 a=rtpmap:100 VP8/90000
 a=sendrecv
 a=rtcp-fb:100 ccm fir
 a=rtcp-fb:100 nack
 a=rtcp-fb:100 nack pli
 a=rtcp-fb:100 goog-remb
 a=rtcp:49350 IN IP4 115.28.63.56
 a=rtcp-mux
 a=ssrc:1728895 cname:[email protected]
 a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
 a=mid:video
 a=ice-ufrag:k69i
 a=ice-pwd:2OEh/hwoKondNA67xmXQ1s
 a=fingerprint:sha-256 00:C2:77:EF:2C:B1:73:01:10:29:3D:53:AB:81:29:59:F3:AA:9A:EB:91:B9:A8:F1:16:12:2D:6C:5A:5D:78:B2
 a=candidate:1 1 UDP 2013266431 115.28.63.56 49350 typ host
 a=candidate:2 1 UDP 2013266431 10.144.37.152 58353 typ host

SDP answer received, setting remote description

搞懂了这两者的区别,相信对你理解ICE和SDP会有所帮助!

时间: 2024-10-11 20:23:11

Android IOS WebRTC 音视频开发总结(三十)的相关文章

Android IOS WebRTC 音视频开发总结(十九)

折腾了一个多星期终于将kurento的环境搭建好(开发阶段的产品,有些BUG要自己解决),所以单独写篇文件来介绍. 下面开始介绍kurento,文章来自博客园RTC.Blacker,转载请说明出处. 一.kurento是什么? 搞视频会议就会涉及一对多.多对多.广播.转码.混音.合屏.录制,这就需要用到流媒体服务器,而kurento就具有这些功能. 他主要用来作为webrtc的流媒体服务器,因为BUG多,目前不适于商用,不过前景可期,具体说明见下图: 说明: 1.看到这里您可不要讲他的功能和IC

Android IOS WebRTC 音视频开发总结(十九)- kurento

转自:http://www.cnblogs.com/lingyunhu/p/4232348.html 折腾了一个多星期终于将kurento的环境搭建好(开发阶段的产品,有些BUG要自己解决),所以单独写篇文件来介绍. 下面开始介绍kurento,文章来自博客园RTC.Blacker,转载请说明出处. 一.kurento是什么? 搞视频会议就会涉及一对多.多对多.广播.转码.混音.合屏.录制,这就需要用到流媒体服务器,而kurento就具有这些功能. 他主要用来作为webrtc的流媒体服务器,因为

Android IOS WebRTC 音视频开发总结(十)

继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 转载请说明出处: http://www.cnblogs.com/lingyunhu. 英文来自:http://www.html5rocks.com/en/tutorials/webrtc/infrastru

Android IOS WebRTC 音视频开发总结(十二)

谈到音视频不得不谈谈对视频呈现的理解,为了让大家能有一个更好的理解,先看看android里面SurfaceView的原理,后续陆续分享其绘画原理. 说明:本文是转载的,转载自哪里我也不知道,貌似经过很多层转载了,在这里先对原创者表示谢意.  cnblogs RTC.Blacker 通过自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行20次,这样就会形成一个20帧的补间

Android IOS WebRTC 音视频开发总结(十六)

本节主要分享视频通话中android和ios上操作音频设备的方式,如调解音量大小,启用扬声器(本系列文章转载请说明出处,博客园RTC.Blacker). 先看看webrtc中处理音频设备代码的目录结构: 第一种方式就是直接调用Android或ObjectC的API,代码如下(WebRtcAudioTrack.java): 通过调用Android提供的AudioManager类来操作音频设备(webrtc是用C++写的,通过JNI来调用这些JAVA方法). 下面是IOS中操作音频设备的方式(aud

Android IOS WebRTC 音视频开发总结(十五)--内部培训大纲

最近在给公司做内部培训,主要是关于即时通讯和移动视频通话,包括android与android,ios与ios,android与ios,以及手机与PC 不打无准备之仗,所以认真整理了一份比较详细的大纲,下面这份大纲主要针对移动视频通话, 虽然讲的内容没发直接分享出来,不过这份大纲对大家理清整个视频通话的思路会有所帮助, 当然如果您觉得这份大纲有遗漏或觉得某些内容不对,请告诉我,我将及时补充和纠正, 如果您对某些内容特别感兴趣也可以告诉我,后面安排时间整理出详细文档,或者在底下留言交流.

Android IOS WebRTC 音视频开发总结(十八)

本文主要介绍上次碰到的某些机器上看不到视频的问题,文章来自博客园RTC.Blacker,转载请说明出处. 之前做的视频聊天App一直运行良好,前几天客户反馈说在三星9100. Android4.0.3上看不到自己的图像. 一翻查找后才发现是WebRTC底层的BUG,现已修复并反馈给社区了,下面主要分析BUG原因及解决方案. Bug主要原因: 设置摄像头参数时使用了不支持的参数,导致Camera.setParameters出错,导致后面的内存分配出错,视频流读取出错,最终导致看不到视频. Bug具

Android IOS WebRTC 音视频开发总结(十四)

这篇文章主要介绍XMPP与SIP,很多人容易混淆这两个概念,转载请说明出处, cnblogs_RTC.Blacker. 简介:XMPP和SIP都是应用层协议,主要用于互联网上发送语音和即时通讯. SIP在RFC 3621中定义,XMPP在RFC 3920中定义, XMPP是从即时通讯中演变而来,SIP是从VOIP中演变而来,XMPP为了会话协商添加了一个扩展叫做Jingle,SIP为了即时通讯业务添加了一个扩展叫做SIMPLE. SIP (Session Initiation Protocol)

转:?Android IOS WebRTC 音视频开发总结 (系列文章集合)

随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测阅读全文 posted @ 2016-07-22 08:24

Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 回顾:Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上) 连接网络摄像头 正如上文所提,我们选用一款简单的D-Link DCS-7010L网络摄像头.关键原因在于它支持RTSP协议,因此服务