📄 rtp-rtcp流媒体服务器技术研究.mht
字号:
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>4.2 RTP/RTCP</span>工作过程<span lang=
=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;工作时,<span
lang=3DEN-US>RTP</span>协议从上层接=
910;流媒体信息码流(如=
;<span
lang=3DEN-US>H.263</span>),装配成<span
lang=3DEN-US>RTP</span>数据包发送给=
979;层,下层协议提供<span
lang=3DEN-US>RTP</span>和<span lang=3DEN-US>RTCP</span>的࠳=
8;流。如在<span
lang=3DEN-US>UDP</span>中,<span lang=3DEN-US>RTP</span>使=
;用一个偶数号端口,&#=
21017;相应的<span
lang=3DEN-US>RTCP</span>使用其后的奇=
5968;号端口。<span
lang=3DEN-US>RTP</span>数据包没有长=
230;限制,它的最大包长=
;只受下层协议的限制&#=
12290;<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span lang=3DEN-US style=3D'font-size:10.0p=
t'><br>
</span><span style=3D'font-size:10.0pt'>  <span lang=3DEN-US>=
4.3 </span>服务器的算法<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;服务器软件模型主Š=
01;有两种,即并发服务=
器和循环服务器。循=
9615;服务器<span
lang=3DEN-US>(Iterative<br>
Server)</span>是指在一个时刻Ö=
82;处理一个请求的服务=
器。并发服务器<span
lang=3DEN-US>(Concurrent<br>
Server)</span>是指在一个时刻Ö=
87;以处理多个请求的服=
务器。事实上,多数=
6381;务器没有用于同时ࣦ=
8;理多个请求的冗余设&=
#22791;,而是提供一种表&=
754;上的并发性,方法是=
;依靠执行多个线程,&#=
27599;个线程处理一个请ĕ=
14;,从客户的角度看,=
服务器就像在并发地=
9982;多个客户通信。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;由于流媒体服务时ſ=
88;的不定性和数据交互=
实时性的请求,流媒=
0307;服务器一般采用并ࡡ=
7;服务器算法。本文构&=
#24314;了一个基本的流媒=
307;服务器,能够同时响=
;应多个用户的请求,&#=
25226;本地硬盘流媒体文Ê=
14;或实时数据流(<span
lang=3DEN-US>H.263</span>格式)发送给&#=
29992;户。在应用中,把ê=
58;户分为请求实时数据=
的实时客户和请求文=
0214;数据的文件客户两౲=
7;。主要算法为:<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;(<span
lang=3DEN-US>1</span>)打开设备,࠳=
8;配资源。当设备准备&=
#22909;时,创建一个<span
lang=3DEN-US>RTP</span>实时服务线程=
644;一个<span
lang=3DEN-US>RTCP</span>实时服务线程=
2290;<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;(<span
lang=3DEN-US>2</span>)创建一个<span lang=3DE=
N-US>UDP</span>套接字并将其绑=
450;到所提供服务的地址=
;之上。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;(<span
lang=3DEN-US>3</span>)反复调用接ਟ=
0;模块,接收来自客户&=
#30340;<span
lang=3DEN-US>RTCP</span>报告,根据其=
1867;型做出响应。对新ऩ=
4;时客户的请求,把客&=
#25143;地址添加到实时服=
153;的客户列表中,对新=
;文件客户的请求,则&#=
21019;建一个新<span
lang=3DEN-US>RTP</span>文件服务线程=
644;一个新<span
lang=3DEN-US>RTCP</span>文件服务线程=
5307;对已经在服务中的ऩ=
8;户则根据<span
lang=3DEN-US>RTCP</span>报告的内容调=
5972;服务。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>实时服务线程<span
lang=3DEN-US>1</span>:初始化客户࠵=
5;表和<span
lang=3DEN-US>RTP</span>首部。<span lang=3DEN-US><o:p></o:=
p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>实时服务线程<span
lang=3DEN-US>2</span>:从设备读取ऎ=
6;体数据,把数据发送&=
#32473;实时服务列表中的=
458;户。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>实时服务线程<span
lang=3DEN-US>3</span>:更新<span lang=3DEN-US>RTP</span>&=
#39318;部和统计数据。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>实时服务线程<span
lang=3DEN-US>4</span>:计算延时,ດ=
5;复第二步。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>实时服务线程<sp=
an
lang=3DEN-US>1</span>:初始化<span lang=3DEN-US>RTC=
P</span>首部。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>实时服务线程<sp=
an
lang=3DEN-US>2</span>:<span class=3DGramE>发送发&#=
36865;</span>方报告给实时服ࡃ=
3;列表中的客户。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>实时服务线程<sp=
an
lang=3DEN-US>3</span>:计算延时,ດ=
5;复第二步。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>文件服务线程<span
lang=3DEN-US>1</span>:初始化<span lang=3DEN-US>RTP=
</span>首部。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>文件服务线程<span
lang=3DEN-US>2.</span>:从文件读取ç=
86;体数据,把数据发送=
给客户。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>文件服务线程<span
lang=3DEN-US>3</span>:更新已发送ਤ=
8;据的统计信息,为生&=
#25104;发送方报告做准备=
290;<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTP</span>文件服务线程<span
lang=3DEN-US>4</span>:计算延时,฀=
3;整发送速度,正常情&=
#20917;下开始重复第二步=
290;<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>文件服务线程<sp=
an
lang=3DEN-US>1</span>:初始化<span lang=3DEN-US>RTC=
P</span>首部,发送<span
class=3DGramE>一个源</span>描述<span lang=3DE=
N-US>(SDES)</span>报文给客户。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>文件服务线程<sp=
an
lang=3DEN-US>2</span>:根据已发送ਤ=
8;据的统计信息生成发&=
#36865;方报告,发送给客=
143;。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>RTCP</span>文件服务线程<sp=
an
lang=3DEN-US>3</span>:计算延时,ઽ=
1;常情况下开始重复第&=
#19968;步。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span lang=3DEN-US style=3D'font-size:10.0p=
t'>5 </span><span
style=3D'font-size:10.0pt'>流媒体服务器=
实现中应注意的问题<sp=
an
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;<span
lang=3DEN-US>5.1 </span>会话和流的两=
2423;分用<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p style=3D'line-height:14.0pt'><span style=3D'font-size:10.0pt'> &#=
12288;一个<span
lang=3DEN-US>RTP</span>会话<span lang=3DEN-US>(Session)</span>&=
#21253;括传给某个指定目=
340;地对<span
lang=3DEN-US>(Destination<br>
Pair)</span>的所有通信量,发=
;送方可能包括多个。&#=
32780;从同一个同步<span
class=3DGramE>源发出</span>的<span lang=3DEN-US>RTP=
</span>分组序列称为流<span
lang=3DEN-US>(Stream),</span>一个<span lang=3DEN-US>RTP</span>&=
#20250;话可能包含多个<span
lang=3DEN-US>RTP</span>流。一个<span lang=3DEN-US>R=
TP</span>分组在服务器端发&#=
36865;出去的时候总是要ý=
51;定属于哪个会话和流=
,在接收时也需要进=
4892;两级分用,即会话࠳=
8;用和流分用。只有当<=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -