linux环境下实时流媒体传输的实现与应用.docx
- 文档编号:11547804
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:15
- 大小:566.50KB
linux环境下实时流媒体传输的实现与应用.docx
《linux环境下实时流媒体传输的实现与应用.docx》由会员分享,可在线阅读,更多相关《linux环境下实时流媒体传输的实现与应用.docx(15页珍藏版)》请在冰豆网上搜索。
linux环境下实时流媒体传输的实现与应用
江苏农林职业技术学院
毕业设计(论文)
SNL/QR7.5.4-3
LINUX环境下实时流媒体技术的实现及其应用
专业通信技术
学生姓名王小奇
班级09通信技术
学号0905160121
指导教师郑道娟
完成日期2012-05-15
成绩评议
学号 0905160121 姓名王小奇
题目LINUX环境下实时流媒体传输的实现及其应用
指导教师建议成绩:
评阅教师建议成绩:
答辩小组建议成绩:
院答辩委员会评阅意见及评定成绩:
答辩委员会主任签字(盖章):
年月日
毕业设计(论文)任务书
姓名
王小奇
学号
0905160121
班级
09通信技术
题目
LINUX环境下实时流媒体传输的实现及其应用
设计(论文)主要内容
1.流式传输
2.流式传输技术
3.LINUX环境下实时流媒体传输的实现
重点研究问题
1.流式传输技术
2.实时流媒体在Linux环境的搭建
3.实时流媒体在Linux环境的初始化处理
4.实时流媒体在Linux环境的数据发送
5.实时流媒体在Linux环境的数据接受
主要技术指标
1.流式传输技术
2.Linux环境
3.实时流媒体技术
其它要说明的问题
Linux环境下点播系统的各项功能的实现
指导老师意见
可以加深对linux环境下实时流媒体的实现的探讨
指导教师签字:
年月日
指导教师意见
对论文的简短评价:
1.指出论文存在的问题及错误
未指出linux环境的优点,应用方面不够深入。
2.对创造性工作评价
Linux系统灵活方便,在该环境下实现流式传输的效果很好。
3.建议成绩
优良中及格不及格
指导教师签字
年月日
评阅教师意见
对论文的简短评价:
1.指出论文存在的问题及错误
未指出linux环境的优点,点播系统的应用体现不多
2.对创造性工作评价
在Linux环境下实现流式传输的效果很好。
3.建议成绩
优良中及格不及格
评阅教师签字
年月日
答辩小组评议意见
学号 0905160121 姓名王小奇
题目LINUX环境下实时流媒体传输的实现及其应用
答辩小组意见:
1、对论文的评价
该论文在linux环境下实现了实时流媒体的传输,在应用到点播系统中,对流媒体技术有一定的理解。
2.建议成绩等级
优良中及格不及格
3.需要说明的问题
答辩小组长签字
年月日
LINUX环境下实时流媒体传输的实现与应用
摘要:
本文介绍了流式传输基础、传输技术、支持流式传输的网络协议及其在Linux环境下实时流媒体传输的实现过程以及在该平台的点播系统。
关键词:
流式传输技术;实时流媒体;Linux环境
LINUXenvironmentreal-timestreamingmediatransmissionrealization
Abstract:
Thispaperintroducesthebasicstreaming,transmissiontechnology,supportstreamingnetworkprotocolanditsenvironmentinLinuxreal-timestreamingmediatherealizationprocessoftransmission.
Keywords:
Streamingtechnology;Real-timestreamingmedia;Linuxenvironment
目录
引言1
1.流式传输概述1
1.1流媒体的定义1
1.2流式传输的基础1
1.2.1顺序流式传输2
1.2.2实时流式传输2
1.3支持流式传输的网络协议2
1.3.1实时传输协议RTP2
1.3.2实时传输控制协议RTCP3
1.3.3实时流协议RTSP3
2.流式传输的实现途径与传输过程3
2.1实现途径3
2.2传输过程3
3.Linux环境下实时流媒体传输的实现4
2.1环境搭建4
2.2初始化处理5
2.3数据发送5
2.4数据接收5
4.linux环境下的点播系统应用6
4.1正常播放6
4.1.1建连过程6
4.1.2点播过程7
4.1.3数据传输过程7
4.1.4结束过程7
4.2拖动播放8
4.3快进和快退8
4.4暂停和停止8
4.5下载功能9
结束语9
参考文献10
致谢11
引言
网络技术的日趋成熟带来了远程教育的飞速发展。
远程教育平台的开发是以网络为依托,开发一套完整的教学支撑软件和管理服务软件,保证整个网络教育的有序运行和管理。
远程教育平台包括网络环境、网站(网上课堂)、学生、课件、资源库等要素,其中网络环境为各种教与学信息的流动提供了有效的通行渠道。
流媒体(StreamingMedia)视/音频技术,是在Internet上提供即时影像和声音的新一代多媒体技术,流媒体VOD/AOD(Video/AudioOnDemand——视/音频节目的点播,以下统称VOD)就是这一新型传输技术的典型应用,它近乎实时的交互性和即时性,使其迅速成为一种崭新的传播渠道。
例如:
中央电视台网上“多媒体频道”(html)的“新闻联播”等直播与点播节目;“清华视频新闻”点播(:
100/multimedia/shpin.html)、清华大学“教师憩圆”新兴课程中的视/音频流课件()、101远程教育教学网(
本文要讨论的内容是流媒体在了Linux环境下,流媒体的传送与接收在网络中的实现及点播系统的应用。
1.流式传输概述
1.1流媒体的定义
所谓流媒体是指在Internet/Intranet中采用流式传输技术的连续媒体,如音频、视频或多媒体文件。
而流式传输方式则是将整个A/V及3D等多媒体文件经过特殊的压缩方式分成一个个压缩包,由视频服务器向用户计算机连续、实时传送。
流媒体技术的开发创意是从传统的TCP/IP协议对通过网络传送信息的控制方法中得到的。
但是在采用流式传输方式的系统中,用户不必等到整个文件全部下载完毕,只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。
此时多媒体文件的剩余部分将在后台的服务器内继续下载[1]。
根据媒体形式的不同,流媒体大致有流式的音频、视频、动画、图像、文本等类型。
其播放方式有单播、组播及点播与广播。
基于流式媒体技术是目前宽带业务的核心内容和关键技术[2]。
1.2流式传输的基础
多媒体资料的网络传输主要有下载(Download)和流式传输(Streaming)两种方式。
前者要求先将数据完整地下载至本地计算机后,才能播放。
如同一个人想洗一下手,规定要先接满一桶水。
显然,这种方式等待时间长,要求客户端有较大的硬盘空间。
事实上,我们可以拧开水龙头来洗手,随拧随洗,洗完即关。
后者就满足了这样的要求。
流式传输时,声音、影像或动画等时基媒体由音视频服务器向用户计算机的连续、实时传送,用户不必等到整个文件全部下载完毕,而只需经过几秒或十数秒的启动延时即可进行观看。
当声音等时基媒体在客户机上播放时,文件的剩余部分将在后台从服务器内继续下载。
流式不仅使启动延时成十倍、百倍地缩短,而且不需要太大的缓存容量。
流式传输避免了用户必须等待整个文件全部从Internet上下载才能观看的缺点。
流媒体指在Internet/Intranet中使用流式传输技术的连续时基媒体,如:
音频、视频或多媒体文件。
流式媒体在播放前并不下载整个文件,只将开始部分内容存入内存,流式媒体的数据流随时传送随时播放,只是在开始时有一些延迟。
流媒体实现的关键技术就是流式传输[3]。
流式传输定义很广泛,现在主要指通过网络传送媒体(如视频、音频)的技术总称。
其特定含义为通过Internet将影视节目传送到PC机。
实现流式传输有两种方法:
实时流式传输(Realtimestreaming)和顺序流式传输(progressivestreaming)。
一般说来,如视频为实时广播,或使用流式传输媒体服务器,或应用如RTSP的实时协议,即为实时流式传输。
如使用HTTP服务器,文件即通过顺序流发送。
采用那种传输方法依赖你的需求。
当然,流式文件也支持在播放前完全下载到硬盘。
1.2.1顺序流式传输
顺序流式传输是顺序下载,在下载文件的同时用户可观看再线媒体,在给定时刻,用户只能观看已下载的那部分,而不能跳到还未下载的前头部分,顺序流式传输不象实时流式传输在传输期间根据用户连接的速度做调整。
由于标准的HTTP服务器可发送这种形式的文件,也不需要其他特殊协议,它经常被称作HTTP流式传输。
顺序流式传输比较适合高质量的短片段,如片头、片尾和广告,由于该文件在播放前观看的部分是无损下载的,这种方法保证电影播放的最终质量。
这意味着用户在观看前,必须经历延迟,对较慢的连接尤其如此。
1.2.2实时流式传输
实时流式传输总是实时传送,特别适合现场事件,也支持随机访问,用户可快进或后退以观看前面或后面的内容。
理论上,实时流一经播放就可不停止,但实际上,可能发生周期暂停。
实时流式传输必须配匹连接带宽,这意味着在以调制解调器速度连接时图象质量较差。
而且,由于出错丢失的信息被忽略掉,网络拥挤或出现问题时,视频质量很差。
1.3支持流式传输的网络协议
1.3.1实时传输协议RTP
RTP(Real-timeTransportProtocol)是用于Internet上针对多媒体数据流的一种传输协议。
RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。
RTP通常使用UDP来传送数据,但RTP也可以在TCP或ATM等其他协议之上工作。
应用程序开始一个RTP会话时将使用两个端口:
一个给RTP,一个给RTCP。
RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
1.3.2实时传输控制协议RTCP
RTCP(Real-timeTransportControlProtocol)和RTP一起提供流量控制和拥塞控制服务。
在RTP会话期间,各参与者周期性地传送RTCP包。
RTCP包中含有已发送数据包的数量、丢失数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。
1.3.3实时流协议RTSP
实时流协议RTSP(RealTimeStreamingProtocol)是由RealNetworks和Netscape共同提出的,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。
HTTP与RTSP相比,HTTP传送HTML,而RTP传送的是多媒体数据。
2.流式传输的实现途径与传输过程
2.1实现途径
首先,多媒体数据必须进行预处理才能适合流式传输,因为目前的网络带宽对多媒体巨大的数据流量来说还显得远远不够。
预处理主要包括两方面:
一是降低质量;二是采用先进高效的压缩算法。
其次,流式传输的实现需要缓存。
因为Internet以包传输为基础进行断续的异步传输,对一个实时A/V源或存储的A/V文件,在传输中它们要被分解为许多包,由于网络是动态变化的,各个包选择的路由可能不尽相同,故到达客户端的时间延迟也就不等,甚至先发的数据包还有可能后到。
为此,使用缓存系统来弥补延迟和抖动的影响,并保证数据包的顺序正确,从而使媒体数据能连续输出,而不会因为网络暂时拥塞使播放出现停顿。
通常高速缓存所需容量并不大,因为高速缓存使用环形链表结构来存储数据:
通过丢弃已经播放的内容,流可以重新利用空出的高速缓存空间来缓存后续尚未播放的内容。
再次,流式传输的实现需要合适的传输协议。
WWW技术是以HTTP协议为基础的,而HTTP又建立在TCP协议基础之上。
由于TCP需要较多的开销,故不太适合传输实时数据。
在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息,而用RTP/UDP来传输实时声音数据。
2.2传输过程
流式传输的一般过程如下:
用户选择某一流媒体服务后,Web浏览器与Web服务器之间使用HTTP/TCP交换控制信息,以便把需要传输的实时数据从原始信息中检索出来;然后客户机上的Web浏览器启动A/VHelper程序,使用HTTP从Web服务器检索相关参数对Helper程序初始化。
这些参数可能包括目录信息、A/V数据的编码类型或与A/V检索相关的服务器地址。
A/VHelper程序及A/V服务器运行实时流控制协议(RTSP),以交换A/V传输所需的控制信息。
与CD播放机或VCRs所提供的功能相似,RTSP提供了操纵播放、快进、快倒、暂停及录制等命令的方法。
A/V服务器使用RTP/UDP协议将A/V数据传输给A/V客户程序(一般可认为客户程序等同于Helper程序),一旦A/V数据抵达客户端,A/V客户程序即可播放输出[4]。
在流式传输中,使用了RTP/UDP和RTSP/TCP两种不同的通信协议与A/V服务器建立联系,其目的是为了能够把服务器的输出重定向到一个不同于运行A/VHelper程序所在客户机的目的地址。
实现流式传输一般都需要专用服务器和播放器,其基本原理如图所示:
图1流式传输基本原理
3.Linux环境下实时流媒体传输的实现
我们在采用 B/S 构架、运行 Linux 环境的远程教育平台上,分析如何实现实时流媒体传送,这里选用当前最流行的 RTP 协议。
Linux 是一个开放的平台,目前已有很多开放源代码的 RTP 库,如 LIBRTP、JRTPLIB,这些库按照 RFC 3550 约定为具体应用搭建基本框架,充分利用这些资源,可以大大简化我们的开发过程。
JRTPLIB 是一个用 C++写的面向对象的 RTP 库,严格遵循 RFC 3550 约定,可以运行在Windows、GNU/Linux、Solaris 等多种操作系统上。
下面就以JRTPLIB 为例进行说明。
2.1环境搭建
先从相关网站上下载JRTPLIB库文件新版本,它们被要所成不同的格式,如jrtplib3.1.0.tar.bz2、jrtplib3.1.0.tar.gz,选择需要的格式下载。
本例在Linux环境中开发,使用jrtplib3.1.0.tar.bz2即可。
下载后解压缩,进行配置并编译,通过后,开始安装[5]。
2.2初始化处理
同其他的应用程序相类似,程序开始部分要完成一些初始化工作,例如头文件的添加、类的添加等等。
首先我们要生成 RTPSession类的一个对象 Sess 来表示此会话,然后调用 RTPSession类的 Create()函数来对其进行初始化操作,其参数是此次 RTP 会话所采用的套接字端口号。
RTPSession sess;
status = sess.Create(5002);
设置恰当的时基(timestamp)单元,可以通过调用RTPSession类的SetTimestampUnit()函数来实现的。
例如,当使用 RTP 会话传输6600Hz采样的音频数据时,实现如下:
sess.SetTimestampUnit(1/6600);
接下来还要添加目的地IP地址,该地址为RTPIPv4Address 类型,使用RTPSession类AddDestination()函数实现。
status = sess.AddDestination(addr);
同样实现删除、清空目的地址可调用DeleteDestination()和ClearDestinations()等函数[6]。
2.3数据发送
初始化后,接下来可以调用RTPSession类的数据发送函数SendPacket(),向所有目的地址发送流媒体数据。
这是一个重载函数,具有多种调用形式(参看RTPSession类对该函数的定义),例如在下面的调用形式intSendPacket(void*data,intlen,unsignedcharpt,boolmark,unsignedlongtimestampinc);
其中第一个参数是待发送的数据缓冲区地址,第二个参数是待发送数据的长度,后面依次是 RTP 负载类型、标识和时基增量。
对于同一个RTP会话双方,负载类型、标识和时戳增量相同,可以对它们提前设置,调用RTPSession类的SetDefaultPayloadType()、SetDefaultMark()和SetDefaultTimeStampIncrement()函数就可实现。
这时可以调用下面相对简化的函数形式发送数据:
int SendPacket(void *data,int len);
这里只需要指出数据地址和长度就可以了,例如:
sess.SendPacket(buff,10);
2.4数据接收
接收实时流媒体数据,通过调用 RTPSession类的 PollData()函数来接收收到的 RTP 或 RTCP数据报。
同一个RTP会话中允许有多个参与者(源),通过调用GotoFirstSourceWithData()和 GotoNextSourceWithData()函数来实现源的遍历,通过 GetNextPacket()函数提取 RTP数据报。
if (sess.GotoFirstSourceWithData())
{
do{
RTPPacket *pack;
while ((pack = sess.GetNextPacket()) !
= NULL)
{printf("Got packet !
\n"); delete pack; }
} while (sess.GotoNextSourceWithData());
}
这里定义了三种接收模式,每种接收模式都具体规定了哪些收到的包会被接受,哪些包会被丢弃。
模式的设定调用 RTPSession类的 SetReceiveMode()函数就可以实现。
远程教育平台通常只对通过权限验证的用户发送数据。
管理这些用户可以通过调用 AddToAcceptList、DeleteFromAcceptList 和 ClearAcceptList函数来实现。
4.Lniux环境下的点播系统应用
服务器端程序在Linux系统下采用C语言实现,客户端程序采用现在流行的程序设计语言和微软提供的SDK开发包进行设计开发,通信机制采用IP多播机制发送数据包,使用TCP机制传送一些请求信息。
服务器端程序读取数据后,进行数据分割、打包、发送。
另外,客户端加入该多播组接收数据的缓冲区进行播放。
根据缓冲区内的数据多少反馈信息给请求数据程序来控制服务器端的发送速度。
服务器程序相对简单,只是根据客户端的请求来发送数据和定时检测客户端的连接情况[7]。
图2点播系统组成图
4.1正常播放
点播模块的工作流程分四个阶段:
建连、点播、数据传输和结束。
请求信息(setuprequest),控制命令(play,pause,recordandteardownrequest)和响应信息(response)通过RTSP报文传送,视频数据通过RTP数据包传送。
下面分别对其进行详细描述(这里均以单用户为例)。
4.1.1建连过程
首先启动服务器,通过调用socket()建立一个套接字;然后调用bind()将该套接字和本地网络地址(包括本机地址和本地端口地址)联系起来;客户在建立套接字后就可调用connect()和服务器建立连接连接一旦建立,客户端和服务器之间就可以通过调用sendto()和recvfrom()来发送和接收数据,发送方和接收方处于相同的地位没有主次之分。
4.1.2点播过程
客户端点播一节目后,客户端会向服务器发送SETUPrequest报文。
服务收到点播请求后会首先进行接纳判断,如果接纳则为该客户端分配一个RTP发送端口,并作为参数,发送Setupresponse报文;服务器如果不接纳也会发送一SETUPresponse报文通知客户端接纳结果。
客户端收到SETUPresponse报文后,如果点播被拒绝提示用户接纳结果等待用户的下次点播;如果点播被接纳,则向服务器发送PLAYrequest报文。
服务器收到PLAYrequest报文后相应发送PLAYresponse报文。
端在收到PLAYresponse报文后,分配相应的资源,准备接收数据,解码播放。
4.1.3数据传输过程
这一阶段,服务器通过RTP传输视频数据包给客户端。
其间,还有播放控制时客户端向服务器发送PAUSErequest报文,服务器收到该消息后会暂停发送数据,然后向客户端发送PAUSEresponse报文。
暂停后用户若再继续播放,则客户端向服务器发送PLAYrequest报文,服务器收到该报文后向客户端发送PLAYresponse报文再开始发送RTP数据。
客户端收到PLAYresponse报文后继续从缓冲区中读取数据解码播放。
客户端在接收RTP数据包的同时会根据缓冲区中数据多少,调整数据发送的策略[8]。
4.1.4结束过程
用户在播放过程中可能会停止收看节目,这时客户端向服务器发送TEARDOWNrequest报文,服务器收到该报文后会终止相应用户的进程,释放资源并向客户端发送TEARDOWNresponse报文,客户端收到该报文后停止接收数据,关闭解码播放线程。
根据上面描述的系统工作流程,可获得客户端状态机,客户端分为三种状态:
Init:
SETUP己经送出,等待回复;Ready:
在Playing状态期间,SETU回复己收到或者PAUSE回复己收到;Playing:
PLAY回复已收到;根据上面描述的系统工作流程,可获得客户端状态机[9],如下图所示:
图3客户端通过Web访问流媒体服务器的数据流
按照上述的工作流程,客户端和服务器通过RTSP协议控制,完成了正常的播放过程,效果如下图所示:
图4正常播放效果
4.2拖动播放
为了方便客户使用,在此提供了拖动播放的功能,首先根据进度条的位置,找出文件range(录像文件的时间戳范围)中的对应位置,然后从当前range请求服务器端传送所需数据。
服务器端解析range范围,通过读文件,根据range下限值找到对应文件中位置开始打包发送数据,当按照客户请求,将要播放的当前帧如果在缓冲区中有此帧,则直接播放此帧。
如果在缓冲区内没有此帧,则缓冲区的数据对于客户端来说属无用数据,将缓冲区清空,重新请求所需要播放帧的数据。
客户端与服务器之间的交互流程和上述的正常播放流程基本相似[10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 环境 实时 流媒体 传输 实现 应用