
live555
hanpfei
实时音视频开发。
展开
-
live555 源码分析: DESCRIBE 的处理
前面在 live555 源码分析:RTSPServer 中分析了 live555 中处理 RTSP 请求的大体流程,并分析了处理起来没有那么复杂的一些方法,如 OPTIONS,GET_PARAMETER,SET_PARAMETER 等。篇幅所限,没有分析最为重要的 DESCRIBE,SETUP 和 PLAY 这些方法的处理。本文继续分析 live555 对 RTSP 请求,分析 DESCRIBE,S原创 2017-09-04 15:42:10 · 772 阅读 · 1 评论 -
live555 源码分析:MediaSever
位于 live555 项目 mediaServer 目录下的是 “LIVE555 Media Server”,它是一个完整的 RTSP 服务器应用程序。它可以把多种媒体文件转为流,提供给请求者。这里来看一下 “LIVE555 Media Server” 的实现。抛开其中向终端输出应用程序信息的代码, “LIVE555 Media Server” 主程序的代码像下面这样:#include <Basic原创 2017-08-31 18:01:37 · 1216 阅读 · 0 评论 -
live555 源码分析:播放启动
本文分析 live555 中,流媒体播放启动,数据开始通过 RTP/RTCP 传输的过程。如我们在 live555 源码分析:子会话 SETUP 中看到的,一个流媒体子会话的播放启动,由 StreamState::startPlaying 完成:void OnDemandServerMediaSubsession::startStream(unsigned clientSessionId,原创 2017-09-08 19:42:10 · 1791 阅读 · 0 评论 -
live555 源码分析:基础设施
live555 由多个模块组成,其中 UsageEnvironment 、 BasicUsageEnvironment 和 groupsock 分别提供了事件循环,输入输出,基本的数据结构,以及网络 IO 等功能,它们可以看作 live555 的基础设施。对于 live555 的源码分析,就从这些基础设施,基本的数据结构开始。HashTable首先来看 HashTable,这是 live555 定义原创 2017-08-30 16:52:42 · 813 阅读 · 0 评论 -
live555 源码分析:子会话 SDP 行生成
如我们在前文 live555 源码分析:ServerMediaSession 中看到的,H264VideoFileServerMediaSubsession 的继承层次体系如下图:在这个继承层次体系中,ServerMediaSubsession 定义了可以对流媒体的单个子会话执行的操作,它有着如下这样的生命周期:对于这些操作的实现则是由 OnDemandServerMediaSubsession 完原创 2017-09-07 21:04:19 · 1048 阅读 · 0 评论 -
live555 源码分析:ServerMediaSession
在 live555 中,用一个 ServerMediaSession 表示流媒体会话,它连接了 RTSPServer 和下层流媒体传输逻辑。ServerMediaSession 和 ServerMediaSubsession 共同用于执行底层流媒体传输和状态维护。而 ServerMediaSession 则是在 GenericMediaServer 中,通过 HashTable 来维护的。在分析 l原创 2017-09-07 13:47:40 · 2484 阅读 · 0 评论 -
live555 源码分析:RTSPServer 组件结构
前面几篇文章分析了 live555 中 RTSP 的处理逻辑,RTSP 处理有关组件的处理逻辑有点复杂,本文就再来梳理一下它们之间的关系。live555 中 RTSP 处理有关组件关系如下图:事件和执行流程的源头在 TaskScheduler。GenericMediaServer 对象在创建的时候,会向 TaskScheduler 注册一个 server socket 及处理该 socket 上的事原创 2017-09-06 15:50:50 · 549 阅读 · 0 评论 -
live555 源码分析:简介
live555 是一个 C++ 开发的流媒体项目,它主要由几个用于多媒体流的库组成,其官方网站地址为 http://www.live555.com/。live555 使用开放的标准协议 (RTP/RTCP,RTSP,SIP),方便与其它标准的流媒体组件互操作。这些库可以为 Unix-like(包括 Linux 和 Mac OS X),Windows,和 QNX (及其它 POSIX 兼容系统)等系统原创 2017-08-28 19:30:31 · 1866 阅读 · 0 评论 -
live555 源码分析: PLAY 的处理
在 SETUP 请求之后,客户端会发起 PLAY 请求,以请求服务器开始传输音视频数据。在 PLAY 请求执行时,一定是已经执行过 SETUP 请求,建立好了客户端会话,因而会与其它要求客户端会话已经建立的请求一起,通过 clientSession->handleCmd_withinSession() 执行: } else if (strcmp(cmdName, "TEARDOWN") =原创 2017-09-05 17:13:38 · 661 阅读 · 0 评论 -
live555 源码分析: SETUP 的处理
SETUP 请求在 RTSP 的整个工作流程中,用于建立流媒体会话。本文分析 live555 对 SETUP 请求的处理。在 RTSPServer::RTSPClientConnection::handleRequestBytes(int newBytesRead) 中,通过 RTSPServer::RTSPClientSession 的 handleCmd_SETUP() 函数处理 SETUP 请原创 2017-09-05 11:16:37 · 521 阅读 · 0 评论 -
live555 源码分析:RTSPServer
live555 使用 RTSP/RTP/RTCP 协议来实现流媒体的传输,其中使用 RTSP 来建立流媒体会话,并对流媒体会话进行控制。在 live555 中,通过类 RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming 来处理 RTSP 请求。客户端发送过来的请求在其父类 GenericMedi原创 2017-09-02 15:54:38 · 1088 阅读 · 0 评论