2 u014760475 u014760475 于 2016.04.14 15:29 提问

利用live555完成RTSP客户端编写,不明白session与subsession区别

各位大神,我在看别人写的liv555客户端代码的时候,遇到点问题不是太明白,想请教一下:
1.在客户端向服务器发送完DESCRIBE之后,接受到服务器返回的SDP信息之后,不是应该利用这个SDP信息完成SESSION会话的建立嘛?
我的理解是之后只要发送”SETUP,PALY“就可以开始通过UDP接收流数据啦,但是我发现客户端源码内多了一个步骤:图片说明
从上面的截图可以看到,首先是通过返回的SDP信息,sdpDescription来完成MediaSession的创建,返回值为scs.session,函数声明如下:图片说明
我觉得此时这个会话不是创建好了吗,然后就应该发送SETUP PLAY开始接受数据啦,但是实际上还要创建MediaSubsession,并且注释这么说得:
“然后,为这个会话创建source object(??源对象??),我们通过遍历这个会话的每一个subsession来完成,然后在每个subsession来完成”SETUP“的发送,
我不懂这里subsession什么意思啊,是不是这个会话中的每一个图像帧就是一个subsession?
小弟才学习这个,各位见笑了,
我在网上没查到这方面的解释,只看到一句话”ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指的是那些有数据流动的组合。 “

2个回答

qq_34647378
qq_34647378   2016.04.14 17:22
已采纳
u014760475
u014760475 你好,我看到”3)subsession 对于每一种媒体格式,都需要实现一个subsession,并重新实现虚函数createNewStreamSource以创建自己的source。 h264,处理h264的subsession从H264VideoFileServerMediaSubsession继承,将从packet中可以获取h264的es流,直接交给H264VideoStreamFramer处理即可。“ 是不是说senssion只是根据需要传送的媒体格式来确定的,而subsenssion才是每一帧的数据??
2 年多之前 回复
u014760475
u014760475 您好,我看到3)subsession 对于每一种媒体格式,都需要实现一个subsession,并重新实现虚函数createNewStreamSource以创建自己的source。 h264,处理h264的subsession从H264VideoFileServerMediaSubsession继承,将从packet中可以获取h264的es流,直接交给H264VideoStreamFramer处理即可。
2 年多之前 回复
u014760475
u014760475   2016.04.14 20:27

还是说,一个session其实可以包含 。264,.acc等,然后用subsession来分别提取?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
流媒体学习笔记2(live555中的Session)
毕业课题打算从最原始的地方做起。好吧,那就从live555采集转发本地摄像头视频开始吧。首先从源码开始吧,今天看了点liveMedia中的session,这里做个总结。 整个源码中的继承顺序为H264VideoFileServerMediaSubsession::FileServerMediaSubsession::OnDemandServerMediaSubsession::ServerMed
live555 源码分析:ServerMediaSession
在 live555 中,用一个 ServerMediaSession 表示流媒体会话,它连接了 RTSPServer 和下层流媒体传输逻辑。ServerMediaSession 和 ServerMediaSubsession 共同用于执行底层流媒体传输和状态维护。而 ServerMediaSession 则是在 GenericMediaServer 中,通过 HashTable 来维护的。在分析 l
【live555】ServerMediaSubsession具体与流有关的操作和参数
虚函数: getStreamParameters sdpLines startStream ########################ServerMediaSubsession  类###################################################### class ServerMediaSubsession: public Me
Live555 直播源 以及MediaSubsession
Live555中用的一个直播Source
Live555源码分析@njzhujinhua[3]:ServerMediaSubsession与ServerMediaSession
[1]ServerMediaSubsession与ServerMediaSession 两者均继承自Medium,但他们的作用却不是像其名字般看上去是继承关系。 两者均可预先建立,也可在收到describe命令时根据请求而去查找文件并建立。在目前分析的testOnDemandRTSPServer.cpp中是启动时即预先建立的,如下     char const* streamName = "
live555二次开发经验总结:RTSPClient客户端与RTSPServer服务器
live555介绍安防领域的流媒体开发者估计没有谁不知道live555的,可能并不是因为其架构有多牛,代码有多好看,而是因为这玩意存在的年限实在是太长了,从changelog来看,live555从2002年至今2017年,已经整整15年的时间了,这还不是关键,关键是现在还一直保持着迭代更新!!!在经历过如此浮躁的互联网时代,还能不忘初心地坚持,真的是少见。自2011年我研究live555,也对liv
live555从RTSP服务器读取数据到使用接收到的数据流程分析
本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为对应的视频和音频数据为止。 进入testProgs目录,执行./openRTSP rtsp://xxxx/test.mp4 对于RTSP协议的处理部分,可设置断点在setupStreams函
LIVE555再学习 -- testRTSPClient 实例
上一篇文章简单看了一遍 testRTSPClient  的源码,接下来举几个应用实例加深一下。首先什么都不做修改,先执行一遍,看一下。一、执行 testRTSPClient  二、核心代码就是做移植的时候主要更改的地方上述函数中会返回每帧数据长度 frameSize,fReceiveBuffer 是缓存指针;DUMMY_SINK_RECEIVE_BUFFER_SIZE宏值默认是100000,若是高
使用Live555开源库实现rtspclient
之前一个朋友遇到播放sony摄像机视频的问题,使用sony的SDK,播放一段时间后视频卡死,图像黑屏。将资源释放后,重新尝试还是不能播放视频,只有重启程序,SDK具体问题没有去分析。后来我采用RTSP协议来说实现获取摄像机视频并播放,从而规避SDK的问题。使用live555开源库实现rtspClient,下载的live555源码里有rtspClient的demo程序,不过有几个小问题,先将问题描述...
RTSPClient-修改日记
if (strcmp(scs.subsession->mediumName(), "video") == 0 &&  (strcmp(scs.subsession->codecName(), "H264") == 0))     {         const char* spropparametersets=scs.subsession->fmtp_spropparametersets();