音视频开发学习(-)续,协议

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

stun, turn, ice协议概述

stun,turn,ice是ietf提出的处理voip网络中nat穿越问题的协议族。
    stun 可以处理大部分nat问题,turn是stun协议的一个增强版,专用于处理对称形nat问题,而ice则是综合stun及turn的产物,是一个框架,综合运用STUN和TURN的结构,它提供可靠的VoIP或视频通话配置以及媒体传输,通过一个SIP供给/应答模型供端点交换多个候选IP地址和端口(比如私有地址和TURN服务器地址)。
    采用此框架可以完美解决voip 中 媒体传输中遇到的 nat及防火墙问题,而信令穿越则需要另一套机制,过去人们提出了多种处理nat问题的方案,但都有局限性,采用ice则完全解决了这些问题,ice的另一个特点时能够通过一定机制检测nat类型,从而决定采用何种方案处理,比如对于大多数呼叫,媒体可能直接用p2p方式即可,而有些方案可能不论什么nat类型都用media-relay方式,这种方式增加了端到端延时及丢包概率。
    stun和turn都是client/server协议,说白了就是客户端向服务器要自己的公网地址及端口,然后放在自己invite请求的sdp消息体及对invite的 200 ok  sdp 消息体中。
大多数sip客户端和服务器支持stun协议,所以都有一定缺陷。
http://blog.csdn.net/perfectpdl/article/details/7636067

STUN和TURN技术浅析

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm
http://www.h3c.com.cn/MiniSite/Technology%5FCircle/Technology%5FColumn/

SDP 协议分析

SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现.

ICE学习 (术语)  

  1.     Component  : 首先一个Component是一块需要仅仅一个传送地址的媒体流.一个媒体流可以需要多个component,每一个都是为整个媒体流工作而运作.例如对于基于RTP的媒体流,每一个媒体流分为两个组件,一个是RTP,一个是RTCP.

  2.     Foundation :  两个候选者如果它们有相同的类型,base,stun服务器的话,那么它们有相同的Foundation.三者如果有一项不同的话, Foundation是不一样的.两个具有相同foundation对的候选者对,具有相似的网络特性.Foundation用于Frozen算法.

  3. Agent:是在请求/应答交换中与协议实现相关的,在一个请求/应答交换中,有两个相关的Agent

  4. Peer:从一个会话中的某个Agent的角度看,它的peer就是另一个Agent。进一步说,从请求者的角度看,它的peer就是应答者。从应答者的角度看,它的peer就是请求者。

  5. Transport AddressIP地址与端口的组合。

  6. Candidate:是一个传输地址,它即将被ICE过程处理,来确定能否基于该传输地址传输媒体。

  7. Host Candidate:是一个候选地址,它通过绑定了特定端口到主机某个接口获取。接口可以是物理接口或逻辑接口。例如,通过VPNsRSIPRealm Specific IP)获取的接口。

  8. Server Reflexive Candidate:是一个候选地址,通过从主机候选地址发送一个STUN请求到STUN服务器获取的候选地址。服务器反向地址实际上就是Agent的网络包经过一重或多重NAT穿透后,由STUN服务器观察到的经过NAT转换后的地址。

  9. Peer Reflexive Candidate:是个候选地址,通过从主机候选地址发送一个STUN请求到运行在Peer候选地址上的STUN服务器而获取的候选地址。

  10. Relayed Candidate:是一个候选地址,通过从主机候选传输地址发送一个STUN分配请求到STUN服务器而获取的一个候选传输地址。Relayed Candidate是常驻STUN服务器的,并且STUN服务器向后转播数据包到Agent。中继地址实际是STUN服务器为STUN请求的发起方在本机上分配的代理地址,所有被路由到该地址的网络包将会被转发到服务器反向地址,继而穿透NAT发送到终端,因此如名字所示,它是STUN服务器完成中继功能的地址。

  11. Translation:中继候选传输地址的转换是当中继器收到一个包后,将要把该包转发到的目的传输地址。对于通过STUN分配请求学习到的中继地址,其转发就是分配应答所返回的服务器反向地址。

  12. Base : 服务器反向候选地址的基主机候选地址就是发起它的主机候选地址。主机候选地址也有一个基主机候选地址,与它自己相同。类似的,中继地址的基主机候选地址也是它自己。

  13. Local Candidate:是候选地址,是Agent已经获取的,并且包括在所发送的请求或应答中。

  14. Remote Candidate:是个候选地址,Agent从它的Peer那里收到的请求或应答中所包含的候选地址。

  15. In-Use Candidate:是个候选地址,是一个出现在活动的媒体流的m/cline中的候选地址。

  16. Candidate Pair:包含了本地候选地址和远程候选地址的一对组合。

  17. Check:是个候选地址对,Agent可以从它的本地候选地址发送一个STUN连通性检查。

  18. Check List:一个STUN检查的有序集合,Agent要产生这些到peerSTUN检查。

  19. Periodic CheckAgent按照定时器结果,周期性的通知它发送一个检查,进行连通性检查。

  20. Triggered Check:在收到一个来自Peer的连通性检查时,产生的一个连通性检查。

  21. Valid List:一个候选地址对的有序集合,这些候选地址被STUN成功的处理,证明是有效的。

ICE 实现流程(1)  

收集主机候选者.收集的过程和传输协议有关,这儿特指UDP.agent对于媒体流的每一个component遍历主机的网络接口获得一个候选者.比如基于RTP的媒体流的话,RTPcomponentID1,RTCP2.使用二者的agent,如果它主机有K个网络接口的话,那么它有2*K

候选者.


主机候选者的base是它自己.


服务器转向和中继候选,这些是可选的,至于去不去取它们的话,取决于ICE提供者的变动,一般来说是一份config文件.举个例子,在封闭的局域网中可能就不需要这些地址.以为使用中继的代价是很昂贵的,中继一般只使用于对称NAT的情况.

agent接下来将主候选者和配置好的STUN server 配对.目前这一份草案仅仅考虑到唯一一个STUN的情况.在这种特定的情况,Ta毫秒过后,agent选择另外一对这样子的配对,从主机候选者向STUN Server发送请求.如果agent使用转向和中继的地址.那么请求就是relay用法的STUN Allocate请求.如果agent only使用服务器转向候选者,这时候agent使用binding发现用法,发送一个STUN Binding请求.

Ta的值在ICE中推荐为20ms

这是第一个开始向外进行发送东西的STUN事物.重发规则以后再说.同样地,一个请求的重试取决于,可以恢复的错误比如说authentication challenge,是在timer Ta过去以前发生,并立即返回的.由于每一个候选者都需要时间,这就涉及到时间预算的问题,所以有必要限制收集的候选者的个数.

agent将接受一个STUN binding或是 Allocate 响应.一次成功的Allocate响应的话,将要提供agent一个转向地址(从 mapped 地址 attr获得).如果Allocate遭到拒绝的话,那么意味着服务器缺少资源.agent可以改发Binding请求来获得服务器转向地址,如果中继候选者和主机候选者有重复,那么丢弃这个中继候选者.


清除冗余的候选者

如果候选者的传输地址和另一个候选者一样,而且他们的base也一样,这种情况,请清除它.


计算Foundation

这个取决于 type,base有不同的IP地址,或者用以获得他们的STUN服务器的IP地址不同.


保持候选者存活

一旦,服务器转向和中继地址被分配,他们的存活期必须是整个ICE的过程.


将候选者按优先级排序

推荐的公式:priority = (2^24)*(type preference) +

              (2^8)*(local preference) +               (2^0)*(256 - component ID)

可以看pjnathICE代码.

使用的就是这个.


选择typelocal preference的方针

首先中继候选者和VPN网络接口的主机候选者,他们由于传送和接受数据存在中间人,这就增加了延迟和包丢失的概率.所以出于这种观念,type preference,host=126,server=100,

110=peer,0=relayed.而且如果agent有多个网络接口,VPN=0.

另外要考虑的local preferenceIP类型,安全,拓扑.


选择默认候选者

默认候选者就是可以接收从没有ICE的一方发来的媒体数据.推荐是relay,否则reflexive,否则host.



ICE 实现流程(2) SDP协议编码  

2012-10-17 16:19:16|  分类: 学习*路|字号 订阅

例子:

v=0

o=jdoe 2890844526 2890842807 IN IP4 10.0.1.1

s=

c=IN IP4 192.0.2.3

t=0 0

a=ice-pwd:asd88fgpdd777uzjYhagZg

a=ice-ufrag:8hhY

m=audio 45664 RTP/AVP 0

b=RS:0

b=RR:0

a=rtpmap:0 PCMU/8000

a=candidate:1 1 UDP 2130706178 10.0.1.1 8998 typ host

a=candidate:2 1 UDP 1694498562 192.0.2.3 45664 typ srflx raddr

10.0.1.1 rport 8998

m=<media> <port>/<number of ports> <transport> <fmt list>

agent希望使用的每一个媒体流都对应一个m-line,m-line的顺序ICE是关心的,因为这关系到ICE的连通性检查的顺序.所以最重要的媒体流要排在前面.

STUN对agent之间的连通性检查是利用短期的证书,证书在offer/answer的过程中被交换.

证书的username是从agent的username生成的.每一个agent提供密码用来检查它接收的请求的完整性.username也提供了二义性和正确性的检查.如果agent是轻量的实现,那么在它的SDP中必须包含一个”a=ice_lite”来标示.

默认候选者作为媒体的默认目标被加入SDP.对于基于RTP的流,那么可以把RTP候选者的ip和端口放在c和m行.agent使用RTCP的话,必须按照RF3605所说的使用a=rtcp的属性,如果没有使用RTCP,那么必须根据RFC3556使用b=RS:0 b=RR:0.


音视频开发——音视频学习资料 目录 1.为什么要学习音视频? 2.如何学习系统性音视频? 3.音视频相关的资料 最近有朋友问想学习音视频,应该怎么学,有什么资料吗? 这个问题也困扰我很久,几年前就想开始音视频相关的学习,但是一直找不到门道,坚持不过两周。回看这个系列文章,之前也有写过很多了,虽还不敢说已入门,因为越学越发现 不会的知识、需要学的东西就越多。但为什么相比过去几年的几次尝试,这次持时间更长、不断有文章输出呢? 这篇文章就和对自己进行检视反思,希望对想学习音视频的朋友也有所帮助。 为什么要学习音视频? 我是做a 阅读详情

相关推荐

C++音视频开发的技术要点

总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体、深刻的理解。 从技术上来讲,需要从如下两个大类知识点上去积累: 1. C/C++通用开发知识 音视频开发的主要编程语言就是C和C++。 这块的专业知识积累是通用的,并不局限于某个特定的行业,属于程序员的技术功底。 可以重点关注如下几个方面: 计算机系统的底层工作原理 操作系统原理 程序的编译、链接和加载机制 C/C++语言特性背后蕴含的思想,底层工作原理,适用场景,存在什么样的问题

资料qun832218493 6363

rsip(Realm-Specific Internet Protocol)

能定位到具体的RSIP

yesman317的专栏 796

“深入浅出”系列之音视频开发:(3)音视频开发学习路线和必备知识

参与JVET/VVC的下一代视频编码标准设计和算法研究;参与视频编码(包括但不限于VVC/AV1/AVS3)优化:通过信号处理和机器学习的快速编码决策、数据结构、并行框架设计,优化编码速度,同时在有竞争力的视频编码内核基础上,探索基于语义的内容自适应编码优化;参与超低带宽的视频压缩:针对超低带宽场景下,探索针对信号处理和语义的信息论极限;参与视频编码与处理联合优化:在标准编码框架的基础上,借助AI领域的新技术成果来研究视频信号的表征、编码与处理,将视频前后处理与编码联合优化,提升端到端压缩效果;

weixin_65589140的博客 1909

基于ICE方式SIP信令穿透Symmetric NAT技术研究

基于ICE方式SIP信令穿透Symmetric NAT技术研究曾立  吴平  高万林  武文娟1 (中国农业大学 计算机科学与技术系,北京 100083) 2(中国人民大学信息学院,北京 100872) 摘  要    基于IP的语音、数据、视频等业务在NGN网络中所面临的一个实际困难就是如何有效地穿透各种NAT/FW的问题。对此,会话初始化协议SIP以往的解决方法有ALGs,STUN

Jitonm's Zone 2411

TCP/IP Protocol Family

The TCP/IP family consists of the following protocols: Link layer: ARP: Address Resolution Protocol: MapIPto hardware (e.g.Ethernet) addresses RARP: Reverse ARP: Map hardware (e.g....

awdqse12777的博客 351

ICE术语

 在本文档中,依据ICE文档中的第3节,集中对ICE使用的术语进行解释。1、Agent:是在请求/应答交换中与协议实现相关的,在一个请求/应答交换中,有两个相关的Agent。2、Peer:从一个会话中的某个Agent的角度看,它的peer就是另一个Agent。进一步说,从请求者的角度看,它的peer就是应答者。从应答者的角度看,它的peer就是请求者。3、Transport Add

Jitonm's Zone 2706

webrtc-candidate形成分析

webrtc

bjrxyz的专栏 1572

Android 音视频开发学习之路

Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。 初级入门篇: Android 音视频开发() : 通过三种方式绘制图片 Android 音视频开发():使用 AudioRecord 采集音频PCM并保存到文件 Android 音视频开发():使用 AudioTrack 播放PCM音...

jiang19921002的博客 2222

C/C++音视频开发技术要点与学习路线

总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体、深刻的理解。从技术上来讲,需要从如下两个大类知识点上去积累:音视频开发的主要编程语言就是C和C++。这块的专业知识积累是通用的,并不局限于某个特定的行业,属于程序员的技术功底。可以重点关注如下几个方面:这块属于从事音视频行业的专业知识。这块的专业知识是非常多的,每个功能模块背后涉及很多专业的知识。音视频开发可以分为两大块,涉及的内容大致如下:上述内容中,客户端应用开发音视频引擎

yinshipin007的博客 3299

音视频开发学习顺序

1. 基础阶段:音视频开发入门 目标: 理解音视频开发的基本概念和常用技术框架。 学习内容: 音视频基础: 音频与视频的基本概念(采样率、帧率、比特率、分辨率、编码、解码等)。 PCM、YUV 等基础数据格式。 多媒体文件格式: 常见的多媒体文件格式:MP4、AVI、MKV 等。 容器与编码器的关系。 基本框架: 学习 FFmpeg 基础命令和用法,熟悉解码和编码的流程。 实操: 使用 FFmpeg 实现简单的音视频处理,如格式转换、视频剪辑、

2301_80706679的博客 1819

Android 音视频开发学习思路大纲

前言 大家都知道,2019年是5g元年,随着5g的崛起,音视频将会运用的更加的广阔(比如远程教学,在线教学,在线会议,远程互动,安防监控…),将不再单单局限与目前的泛娱乐平台,将会更加的完善,从而更好的服务于我们的生活。 本人是非常爱好音视频开发的,奈何音视频开发是有一定难度的,因为他涉及的层面比较广,要想深入学习,是需要有一定的学习体系,然后一步一个脚印的深入的。 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联

hirezy 7004

音视频开发1 学习路线

音视频工作方向总结为9个(可能不够准确,仅是个人观点):直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。常用的视频封装格式有:mp4、mov、mkv、webm、flv、avi、ts、mpg、wmv等。常用的音频编码协议有:MP3、AAC、OPUS、FLAC、AC3、EAC3、AMR_NB、PCM_S16LE。视频包括:帧率、码率、分辨率、像素格式、色彩空间、I帧P帧B帧、DTS与PTS、YUV与RGB、位深与色域、视频编码格式、视频封装格式。

hunandede的博客 1872

开发小白到音视频专家

这是由一篇我的演讲稿整理出来的文章,目标读者是对音视频开发感兴趣但是又不知道如何下手的初学者们,希望把我的经验分享出来,对大家有所帮助。 1. 成长的烦恼 经常收到一些网友的来信或者留言,反馈如下这样的困惑: “我是一名应届毕业生,该如何快速地成长起来”“我只懂 C/C++,是学 Android 开发有前途,还是 iOS 开发有前途?”“我是一名 Android/iOS 开发,已经可以独立完成一...

weixin_34390996的博客 6171

音视频传输协议之 RTMP

RTMP 一、总体介绍 RTMP(Real Time Messaging Protocol)实时消息传送协议是 Adobe 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP 协议工作在 TCP 之上,默认使用 1935 端口。 工作原理:RTMP 的 message 会切分为 n 个 chunk,再通过 TCP 协议传输。 为什么 rtmp 基于 tcp 协议,tcp 协议已经有化整为零的方式, rtmp 还需要将 message 划分更小的单元 chunk 呢?

yinshipin007的博客 5391

音视频进阶:浅谈Android 开发音视频入门之路

很多开发者都知道Android音视频开发这个概念,音视频开发不仅需要掌握图像、音频、视频的基础知识,并且还需要掌握如何对它们进行采集、渲染、处理、传输等一系列的开发和应用,因此,音视频开发是一门涉及到很多内容的领域。

m0_64420071的博客 1451

音视频流媒体高级开发-学习路线

让你全面掌握音视频处理技术,从基础到高级,从理论到实践,让你成为音视频领域的专家!

m0_73443478的博客 1683

音视频协议集合

介绍现网实现音视频协议集合

mubox的博客 1900

音视频技术栈】音视频学习路线规划

文章目录前言音视频的采集预处理编码封装传输解封装解码渲染常用开源项目和工具总结技术参考 前言 这篇文章简单聊聊我对音视频技术栈的理解,方便入门的同学做个参考。可以规划一下自己的学习路线。 话不多说先上一张 XMind 截图 音视频技术一句话简单来说就是通过网络将图像和声音从生产端分发给消费端的技术。可以是以点播的方式,也可以是直播的方式,也可以是像视频会议一样互动的方式。现在的网络流量一多半都是在传输音视频的数据,音视频相关的app几乎每个人都在使用,占据了大众娱乐的半壁江山。 上面的截图类似于OSI网

记录分享自己的流媒体开发经验 4242

音视频开发工程师学习之路

在虎牙工作已经两年了,一开始做的事情杂且乱,左边看一点,右边看一点,最近好多了,可能是领导氛围和能力都优质了不少吧。在这过去的一年里,我从一个连c/cpp都不一定写的完整的人,到如今,ObjectiveC/Java/C/Cpp/Python都会的人,其实才知道,技术从来都不是问题,产品的核心价值才是关键。(好像扯远了) 思考一下,这篇就主要来说下,音视频该怎么学,主要工作内容是什么。 简单来说,贯穿整个直播和点播体系,音视频最基础的,就是播放器。市面上有很多播放器: IJKPlayer的轻量级播放器:移

HatsuneMikuFans的博客 2753
上一篇: 音视频开发学习(-)续,编译器
下一篇: 搭建环境(1)
dinglearner
博客等级 码龄17年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值