锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 流媒体开源技术 / live555的RTSP交互过程
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883

live555的RTSP交互过程

RTSP协议简介
RTSP交 互过程 :和http类似  (66.158是服务端,66.111是客户端)

C表 示RTSP客户端,S表示RTSP服务端 
① C->S: OPTION request            //询问S有 哪些方法可用 -----------------------------------------创建ServerMediaSession
S->C: OPTION response          //S回 应信息中包括提供的所有可用方法 
② C->S: DESCRIBE request      //要求得到S提供 的媒体初始化描述信息 
rtsp request
S->C: DESCRIBE response      //S回 应媒体初始化描述信息,主要是sdp 
rtsp response
③ C->S: SETUP request           //设置会话属性,以及传输模式,提醒S建 立会话 
S->C: SETUP response         //S建 立会话,返回会话标识符及会话相关信息 
④ C->S: PLAY request          //C请求播放 
S->C: PLAY response          //S回 应请求信息 S->C: 发 送流媒体数据 
⑤ C->S: TEARDOWN request     //C请 求关闭会话 S->C: TEARDOWN response     //S回应请求 
上 述的过程是标准的RTSP流程,其中第3步和第4步是必需的。
如rtsp://192.168.1.1/urlPreSuffix/urlSuffix,urlPreSuffix作为stream name, urlSuffix作为subsession的trackId

  1. 非聚合,如rtsp://192.168.1.1/urlPreSuffix/urlSuffix,urlPreSuffix作为stream name, urlSuffix作为subsession的trackId-----------------------------------------到底什么是聚合??
    2)非聚合的情况下,才能根据trackId找到subsession
    3)聚合,如
        rtsp://192.168.1.1/urlPreSuffix/urlSuffix, 将urlSuffix作为stream name,而urlPreSuffix忽略
        rtsp://192.168.1.1/urlPreSuffix, 只存在urlPreSuffix,并将其作为stream name, 这应该是最常见的情况
    4)聚合,如rtsp://192.168.1.1/urlPreSuffix/urlSuffix, 将urlPreSuffix/urlSuffix整个作为stream name 
  2. 我们可以对session中的subsession进行单独控制(这需要提供subsession的trackId), 也可以对整个session进行控制(这种情况应该是最常见的吧)。

void RTSPServer::RTSPClientConnection
::handleCmd_DESCRIBE(char const* urlPreSuffix, char const* urlSuffix, char const* fullRequestStr)
{
ServerMediaSession* session = NULL;
char* sdpDescription = NULL;
char* rtspURL = NULL;
do {

session = fOurServer.lookupServerMediaSession(urlTotalSuffix);----------找不到同名ServerMediaSession 时新建一个(GenericMediaServer& fOurServer,为什么把这个函数独立出去?面向对象思想编程感觉用的出神入化,真tm牛掰)
下面是创建ServerMediaSession的过程
static ServerMediaSession* createNewSMS(UsageEnvironment& env,char const*fileName, FILE* /*fid*/)
2. {
3. // Use the file name extension to determine the type of "ServerMediaS
ession":
4. char const* extension = strrchr(fileName, '.');
5. if (extension == NULL)
6. return NULL;
7.
8.
9. ServerMediaSession* sms = NULL;
Boolean const reuseSource = False;
if (strcmp(extension, ".aac") == 0) {
} else if (strcmp(extension, ".264") == 0) {----------------------------------------------------------------------------从此看出,对多个不同格式的媒体作出了不同的操作
// Assumed to be a H.264 Video Elementary Stream file:
NEW_SMS("H.264 Video");
OutPacketBuffer::maxSize = 100000; // ----------------------------------------------------------------------------------allow for some possibly large H.264 frames
sms->addSubsession(
H264VideoFileServerMediaSubsession::createNew(env, fileName,reuseSource));------------------H264VideoFileServerMediaSubsession的父类是ServerMediaSession,由此下面对ServerMediaSession指针的操作全是对H264VideoFileServerMediaSubsession的操作
} else if (strcmp(extension, ".mp3") == 0) {

}

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内