1常用的RTP/RTCP库
目前常用的基于RTP协议的库包括:JRTPlib、live555等,而部分视频编解码库中也会添加对RTP协议的支持,如FFMpeg、VLC等。
JRTPlib库较为简单是以个专注于RTP协议的实现,主要包括5个基类:
各种RTCP包的基类RTCPPacket、指点目标机器地址信息的抽象类RTPAddress、存储时间信息的类RTPTime、保存RTP源信息RTPSources、RTP会话类RTPSession。该类可以在WIDows、Unix上等平台运行。但是在iOS平台上编译不能通过,不过可以作为学习RTP协议的基础。
liVE555库较为复杂,不仅包含了多种流媒体传输协议,如RTP/RTCP、RTSP、SIP的支持,而且还支持对MPEG、H.263、DV、JPEG视频和多种音频编码数据的流化、接收和处理。已经用于多种流媒体播放器中,如VLC MPlayer等。liVE555的类结构如图1所示。
图1live555的类结构
UsageEnvironment模块是对系统环境的抽象,包括抽象类UsageEnvironment和TaskScheduler。UsageEnvironment主要用于消息的输入输出和用户交互功能;TaskScheduler实现事件的异步处理、事件处理函数的注册等。该模块还包含一个Hashtable类,在整个项目中都可以用到它。
BasicUsageEnvironment模块是UsageEnvironment的一个控制台应用的实现。它针对控制台的输入输出和信号响应进行具体实现。
GroupSock模块用于实现数据包的发送和接收。GroupSock主要被设计用以支持多播,但它也完全支持单播通信。
liveMedia模块是live555最重要的模块。该模块声明了一个抽象类Medium,其派生类包括:
RTSPClIEnt:该类实现RTSP请求的发送和响应的解析,同时根据解析的结果创建对应的RTP会话。
MediaSession:用于表示一个RTP会话,一个MediaSession可能包含多个子会话(MediaSubSession),子会话可以是音频子会话、视频子会话等。
RTCPInstance:该类实现RTCP协议的通信。
Source和Sink: Source抽象了数据源,比如通过RTP读取数据。Sink是数据消费者的抽象,比如把接收到数据存储到文件,该文件就是一个Sink。数据的流动可能经过多个Source和Sink。MediaSink是各种类型的Sink的基类,MediaSource是各种类型Source的基类,各种类型的流媒体格式和编码的支持即是通过对这两个类的派生实现的。Source和Sink通过RTP子会话(MediaSubSession)联系在一起。
live555库可以在iOS上编译通过。
2.1在wIDow是平台进行测试
使用liVE555的源码进行编译得到四个模块对应的lib文件,将头文件整理后与lib文件一起即得到liVE555库。在该库中提供了服务器程序的demo,利用编译的库文件配置好编译环境后,生成live555MediaServer.exe文件。该服务器程序为控制台程序,会输出访问路径及规则。将生成的流媒体文件test.mp3、test.ts文件放置于统一目录下,打开服务器,进行监听。
客户端程序则采用VLC播放器(http://www.videolan.org/vlc/),该播放器采用live555库实现流媒体的传输。在VLC播放器中输入服务器的地址以及需要打开的文件,如RTSP://192.168.71.114/test.ts后,在VLC播放器中即会实时显示服务器中视频文件的图像。
2.2.iPad上进行测试
VLC 播放器在iPad上有相应的程序叫做VLC streamer(91手机助手上面有)将该程序安装到iPad上,然后根据其提示,下载对应的服务器程序(http://hobbyistsoftware.com/vlcstreamer)部署在wIDows平台上,打开wifi连接,则可以在iPad上看到笔记本上的文件,打开一个文件,即可进行实时播放。
总结以上是内存溢出为你收集整理的iphoneOS与Windwos下RTSP服务器与客户端的搭建全部内容,希望文章能够帮你解决iphoneOS与Windwos下RTSP服务器与客户端的搭建所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)