• iphoneOS与Windwos下RTSP服务器与客户端的搭建


     

    iphoneOS与Windwos下RTSP服务器与客户端的搭建

    分类: 流媒体 13人阅读 评论(0) 收藏 举报

    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流媒体服务器与客户端的搭建

    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上看到笔记本上的文件,打开一个文件,即可进行实时播放。


  • 相关阅读:
    Java注释中的@deprecated与源代码中的@Deprecated
    android KE or NE分析
    Android手机中UID、PID作用及区别
    mtk刷机错误汇总
    区分Integer.getInteger和Integer.valueOf、Integer.parseInt() 的使用方法
    :>/dev/null 2>&1 的作用
    android 小技巧
    转:Eclipse自动补全功能轻松设置
    android开发常用地址
    转:大数据 2016 landscape
  • 原文地址:https://www.cnblogs.com/moonvan/p/2173444.html
Copyright © 2020-2023  润新知