LIVE555再学习 -- testRTSPClient 源码分析
在这个演示应用中,接收到的音频/视频数据什么也没有。 但是,您可以在自己的应用程序中使用和调整此代码(例如)解码和播放接收到的数据。
openRTSP 类似于“testRTSPClient”,但具有更多的功能。 这是一个命令行程序,它与“testRTSPClient”不同,旨在用作一个完整的全功能应用程序(而不是在其他应用程序中使用其代码)。 也正应为如此,openRTSP”源代码并不是最好的例子,因为它包含很多额外的选项,大多数你可能不需要。
所以,如果您正在寻找如何使用“LIVE555 Streaming Media”代码构建自己的RTSP / RTP媒体播放器客户端
一、源码解析
参看:庖丁解牛-----Live555源码彻底解密(根据testRTSPClient讲解)
(1)首先从 testRTSPClient.cpp 的 main函数开始看起
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
(2)然后跳转查看 sendDescribeCommand
![](/assets/blank.gif)
将continueAfterDESCRIBE 函数传递到 responseHandler,相当于 continueAfterDESCRIBE 为一个回调函数;注意 RequestRecord 这个类的作用;在 SendRequest 中调用 RequestRecord 的构造函数.
(3)然后跳转查看 RequestRecord
![](/assets/blank.gif)
(4)然后跳转查看 fHandler
![](/assets/blank.gif)
(5)然后返回到(2),跳转查看 sendRequest
![](/assets/blank.gif)
(6)然后跳转查看 openConnection
![](/assets/blank.gif)
setupStreamSocket
connectToServer
setBackgroundHandling
incomingDataHandler
(7)然后跳转查看 setBackgroundHandling
![](/assets/blank.gif)
(8)然后跳转查看 assignHandler
![](/assets/blank.gif)
(9)然后跳转查看 lookupHandler
![](/assets/blank.gif)
(10)然后返回到(6),跳转查看 parseRTSPURL
(11)然后返回到(6),跳转查看 setupStreamSocket
![](/assets/blank.gif)
setupStreamSocket 函数首先创建 socket,然后设置 SO_REUSEADDR socket 属性;并且调用 bind 函数绑定socket;最后将 socket 设置成非阻塞形式;
(12)然后返回到(6),跳转查看 connectToServer
![](/assets/blank.gif)
envir().taskScheduler().setBackgroundHandling(socketNum,SOCKET_WRITABLE|SOCKET_EXCEPTION,(TaskScheduler::BackgroundHandlerProc*)&connectionHandler,
(12)然后跳转查看 connectionHandler
![](/assets/blank.gif)
(13)然后跳转查看 connectionHandler1
![](/assets/blank.gif)
(14)然后返回到(1),跳转查看 doEventLoop
![](/assets/blank.gif)
(15)然后跳转查看 SingleStep
![](/assets/blank.gif)
(*handler->handlerProc)(handler->clientData,resultConditionSet);
![](/assets/blank.gif)
LIVE555再学习 -- testRTSPClient 源码分析相关推荐
- LIVE555再学习 -- testOnDemandRTSPServer 源码分析
一.简介 先看一下官网上的介绍: testOnDemandRTSPServercreates a RTSP server that can stream, via RTP unicast, from ...
- LIVE555再学习 -- testH264VideoStreamer 源码分析
上一篇文章我们已经讲了一部分: testH264VideoStreamer 重复从 H.264 基本流视频文件(名为"test.264")中读取,并使用 RTP 多播进行流式传输. ...
- LIVE555再学习 -- OpenRTSP 源码分析
看了很多东西,感觉有点杂.源码分析部分也看了,讲的也就那样.现在有点不知道从哪讲起了. 参看:nkmnkm的专栏-流媒体 参看:smilestone322的专栏-live555 一.源码组成 包括上述 ...
- LIVE555再学习 -- testRTSPClient 实例
上一篇文章简单看了一遍 testRTSPClient 的源码,接下来举几个应用实例加深一下. 首先什么都不做修改,先执行一遍,看一下. 一.执行 testRTSPClient 特么,上面的东西我没看 ...
- MyBatis学习笔记-源码分析篇
引言 SQL 语句的执行涉及多个组件,其中比较重要的是 Executor. StatementHandler. ParameterHandler 和 ResultSetHandler. Executo ...
- Java学习集合源码分析
集合源码分析 1.集合存在的原因 可以用数组来表示集合,那为什么还需要集合? 1)数组的缺陷 在创建数组时,必须指定长度,一旦指定便不能改变 数组保存必须是同一个类型的数据 数组的增加和删除不方便 ...
- Android学习——LitePal源码分析
原创技术博客,请认准Azzssss的原文http://www.cnblogs.com/Azzssss/p/4147704.html. 这两天项目终于上线了,松了一口气,虽然还是很不稳定,见一步走一步吧 ...
- 【TencentOS tiny学习】源码分析(2)——调度器
文章目录 调度器的基本概念 启动调度器 Cortex-M内核关中断指令 回归正题 看看任务栈的初始化 查找最高优先级任务 任务切换的实现 SysTick SysTick初始化 SysTick中断 温馨 ...
- 【TencentOS tiny学习】源码分析(3)——队列
文章目录 队列基本概念 队列的阻塞机制 队列实现的数据结构 队列控制块 消息控制块 任务控制块中的消息成员变量 与消息相关的宏定义 消息池 队列创建 销毁队列 清空队列 等待队列(消息) (消息)写入 ...
最新文章
- 清华男女图鉴 | 有电车会拍照,我在清华还是找不到女朋友
- muduo之EventLoopThreadPool
- Linux之数组和关联数组
- leetcode1338. 数组大小减半(贪心算法)
- java 对list增删_List 中正确的增删操作
- MYSQL数据库查询删除创建企业基本知识
- 软件测试抛出异常,异常测试之异常注入初探
- 表格中建一个按钮_CAD | CAD和Excel的表格互换教程
- 经典测试用例--水杯测试
- hibernate的Configuration对象的configure()方法的作用
- 为什么国内的游戏公司吃相越来越难看了?
- Presto 即席查询
- 电容篇-电容器件工作原理及参数分析理解
- Linux 学习包括但不限于linux使用问题笔记
- 10个知识学习app,开始武装自己的大脑吧!
- 软件人才从这里飞翔——访北京大学软件学院院长陈钟博士
- idea启动项目报错 --To prevent a memory leak, the JDBC Driver has been forcibly unregistered
- 网络层协议介绍与概述
- 关于HTTP提交方式之PUT
- java +Selenium 2 环境搭建