通过分析live库提供的例子程序 OpenRTSP,可以清晰地了解客户端接收来自网络上媒体数据的过程。注意,RTP协议和RTCP协议接收的数据分别是视音频数据和发送/接收状况的相关信息,其中,RTP协议只负责接收数据,而RTCP协议除了接收服务器的 消息之外,还要向服务器反馈。

main函数流程
void main(int argc,char *argv[])
{
1.            创建BasicTaskScheduler对象
2.            创建BisicUsageEnvironment对象
3.            分析argv参数,(最简单的用法是:openRTSP rtsp://172.16.24.240/mpeg4video.mp4)以便在下面设置一些相关参数
4.            创建RTSPClient对象
5.            由RTSPClient对象向服务器发送OPTION消息并接受回应
6.            产生SDPDescription字符串(由RTSPClient对象向服务器发送DESCRIBE消息并接受回应,根据回应的信息产生 SDPDescription字符串,其中包括视音频数据的协议和解码器类型)
7.            创建MediaSession对象(根据SDPDescription在MediaSession中创建和初始化MediaSubSession子会话对 象)
8.            while循环中配置所有子会话对象(为每个子会话创建RTPSource和RTCPInstance对象,并创建两个GroupSock对象,分别对应 RTPSource和RTCPInstance对象,把在每个GroupSock对象中创建的socket描述符置入 BasicTaskScheduler::fReadSet中,RTPSource对象的创建的依据是SDPDescription,例如对于MPEG4 文件来说,视音频RTPSource分别对应MPEG4ESVideoRTPSource和MPEG4GenericRTPSource对象。 RTCPInstance对象在构造函数中完成将Socket描述符、处理接收RTCP数据的函数 (RTCPInstance::incomingReportHandler)以及RTCPInstance本身三者绑定在一个 HandlerDescriptor对象中,并置入BasicTaskScheduler::fReadHandler中。完成绑定后会向服务器发送一条 消息。)
9.            由RTSPClient对象向服务器发送SETUP消息并接受回应。
10.        while循环中为每个子会话创建接收器(FileSink对象),在FileSink对象中根据子会话的codec等属性缺省产生记录视音频数据的文件 名,视音频文件名分别为:video-MP4V-ES-1和audio-MPEG4-GENERIC-2,无后缀名
11.        while循环中为每个子会话的视音频数据装配相应的接收函数,将每个子会话中的RTPSource中的GroupSock对象中的SOCKET描述符, 置入BasicTaskScheduler::fReadSet中,并将描述符、处理接收RTP数据的函数 (MultiFramedRTPSource::networkReadHandler)以及RTPSource本身三者绑定在一个 HandlerDescriptor对象中,并置入BasicTaskScheduler::fReadHandler中,并将FileSink的缓冲区 和包含写入文件操作的一个函数指针配置给RTPSource对象,这个缓冲区将会在networkReadHandler中接收来自网络的视音频数据(分 析和去掉RTP包头的工作由RTPSource完成),而这个函数指针在networkReadHandler中被调用以完成将缓冲区中的数据写入文件。
12.        由RTSPClient对象向服务器发送PLAY消息并接受回应。
13.        进入while循环,调用BasicTaskScheduler::SingleStep()函数接受数据,直到服务器发送TREADOWN消息给客户 端,客户端接收到该消息后释放资源,程序退出。

}

live555源代码(VC6):http://download.csdn.net/detail/leixiaohua1020/6374387

原文地址:http://blog.chinaunix.net/uid-22535463-id-262464.html

live555 分析—— OpenRtsp相关推荐

  1. live555服务器性能,Live555 分析(二):服务端

    live555支持单播和组播,我们先分析单播的流媒体服务端,后面分析组播的流媒体服务端. 一.单播的流媒体服务端: // Create the RTSP server: RTSPServer* rts ...

  2. live555中openRTSP用法

    openRTSP A command-line RTSP client openRTSP是一个命令行程序,它可以用来打开,流化,接收并且录制指定的RTSP视频链接媒体流(如rtsp://开头的URL) ...

  3. LIVE555再学习 -- OpenRTSP 源码分析

    看了很多东西,感觉有点杂.源码分析部分也看了,讲的也就那样.现在有点不知道从哪讲起了. 参看:nkmnkm的专栏-流媒体 参看:smilestone322的专栏-live555 一.源码组成 包括上述 ...

  4. 基于live555的视频直播 DM368IPNC RTSP分析

    因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client.如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定 ...

  5. live555的编译及使用

    live555是个流媒体C++开源库,VLC的Meida Player就使用了它的API完成的RTSP客户端,由于VLC的SDK没有提供相关record流到视频文件的API,所以我想用过live555 ...

  6. OpenRTSP的使用

    由于需要研究OpenRTSP的源码,所以先学习下使用. -d [time]--------这个是录制时间,就是单位秒,超时后,程序自动结束. -i   -----------以.avi文件格式生成. ...

  7. Qt 使用live555

    Qt (MSVC版本) live555 #------------------------------------------------- # # Project created by QtCrea ...

  8. live555库安装_live555的编译及使用

    live555是个流媒体C++开源库,VLC的Meida Player就使用了它的API完成的RTSP客户端,由于VLC的SDK没有提供相关record流到视频文件的API,所以我想用过live555 ...

  9. live555 dm368 rtsp

    基于live555的视频直播 DM368IPNC RTSP分析 本文是 我对TI DM368IPNC RTSP直播部分的代码分析. appro IPNC视频流直播部分用的RTSP,基于live555, ...

最新文章

  1. OSPF路由协议解释及特性介绍
  2. 批量scp脚本——从多台机器拷贝文件
  3. 电脑计算器_教训!19年中级败给了电脑计算器,CPA难道要步后尘?
  4. 修改OpenJDK字体渲染,无可见改进
  5. STM32应用开发实践教程:初识STM32
  6. 【树莓派】更新树莓派SD卡测速一键脚本,SD卡读写速度测试
  7. docker之网络管理
  8. java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
  9. Java ArrayList add()方法与示例
  10. 目标检测 YOLO系列算法
  11. diode示例1silvaco仿真流程
  12. ucenter java版客户端
  13. chain.doFilter
  14. eval 是做什么的?
  15. 火狐浏览器Firefox上DownThemAll插件
  16. 【小技巧】强制重启无线网卡,解决“区域中找不到无线网络,请确定您计算机上的无线开关已启用”问题...
  17. 人生之路 — 新时代伴侣相处之道
  18. sql判断字段是否以某个子串开头,结尾
  19. mysql-基础-视图,存储过程,触发器
  20. 本地缓存-loadingCache

热门文章

  1. UVA13029 Emoticons【文本处理】
  2. HDU1556 Color the ball【差分数组+线段树】
  3. HDU1873 看病要排队【模拟+优先队列】
  4. Python程序-生成回文
  5. 【等价转换】—— 整数的变换
  6. 一题多解 —— 二项式分布的期望和方差的计算
  7. 纯粹经济学 —— 基本概念
  8. R 语言下常用第三方库的说明
  9. 算法(algorithm)、模型(model)与框架(framework)
  10. matlab 随机函数的使用