文档章节

RTSP学习笔记(1)live555

Sean-x
 Sean-x
发布于 2016/02/23 19:54
字数 1014
阅读 86
收藏 0

1UsageEnvironment

 

UsageEnvironment代表了整个程序的运行环境,其中保存了一些全局变量,定义了一些输出函数(纯虚函数)。从这些输出函数就可以看出该类主要用于充当程序的全局上下文,并提供打印信息的输出。

BasicUsageEnvironment0继承自UsageEnvironment,实现了其中的纯虚函数。

BasicUsageEnvironment继承自BasicUsageEnvironment0,主要定义了一个静态的createNew()函数,用于类的实例化。继承关系如下:

2TaskScheduler

 

TaskScheduler是整个程序的任务调度器,通过doEventLoop()函数实现程序的循环结构,在这里进行任务的调度,在taskScheduler中一共有三种类型的任务,sockethandlereventhandlerdelaytask。在TaskScheduler种主要定义了这三种任务的添加、删除与执行的机制,具体的实现需要子类去做。

BasicTaskSchedule0TaskScheduler中的方法进行了初步实现,例如在doEventLoop()中实现了大循环while(1)

,同时又添加了一个虚函数SingleStep(),在这里将实现具体的事件执行步骤。

BasicTaskScheduler继承自BasicTaskScheduler0,添加了createNew()的静态方法用于实例化,实现了singleStep(),同时添加了一些对socketHandler任务的操作。在singleStep中就是对上面的三个任务进行处理,1.处理一个socketHandlers任务;2.处理一个eventHandler任务;3.处理一个delayTask任务。

 

  • socketHandlers,这个任务用于处理socket的数据接受与发送,是整个程序中最主要的一个任务,因为在流媒体服务器中主要工作就是数据的发送与接受

  • eventHandler,这个任务暂时还不知道是用来做什么的,在BasicTaskScheduler0中对进行的添加、触发等操作做了实现,但是都没有被其他地方调用

  • delayTask,这个任务可以用于轮询,比如判断一个任务是否已完成,则将判断的函数加入延时,不断调用自身进行询问。

 

turnOnBackgroundReadHandlingturnOffBackgroundReadHandling分别控制让socket可读或不可读,里面是调用setBackgroundHandling实现的。在BasicTaskScheduler中对setBackgroundHandling做了具体的实现,会将该socket加入fHandler的队列或从中移除。

 

3RTSPServer

RTSPServer负责管理具体的会话内容,包括ServerMediaSessionServerMediaSubSession

其中用HashTable来存储这些内容:

fServerMediaSession存储ServerMediaSession

fClientConnections存储RTSPClientConnection;

fClientSessions存储RTSPClientSession

还保存有用于连接的socketfRTSPServerSocket,端口fRTSPServerPort

方法:

addMediaSession,会先查找记录里是否存在相同名称的ServerMediaSession,删除后再添加;

closeAllClientSessionsForServerMediaSession,将指定ServerMediaSession下的所有RTSPCLientSession删除;

createNew,静态方法,初始化RTSPServer,其中会根据port创建一个socket,初始化数据存储的HashTable,然后将socket加入socket Handlers进入大循环,等待客户端的连接;

createNewClientConnection,创建RTSPClientConnection,会将自身传入变为fOurServer,还有serverSocket监听创建好的clientSocketclientPort,这个方法就是在serverSocket监听的有客户端连接的时候进行创建的;之后将该客户socket放进大循环,读取请求

createNewClientSession,创建clientSession,在从clientConnection接到SETUP消息时使用此方法创建ClientSession,用于接下来的请求SETUPPLAY

deletServerMediaSession,将记录里面的指定ServerMediaSession删除;

incomingRTSPConnecionHandler,用于serverSocket大循环的回调,也就是说监听到客户端连接了,然后创建RTSPClientConnection

lookupByName,只是用来看该RTSPServer是否已创建;

lookupServerMediaSession,从记录里查找是否存在;

lookupURLPrefix只是用来得到客户的IP地址的。。。

 

RTSPServerSupportingHTTPStream添加了对HTTP连接的支持,可以监听HTTP的连接请求;

 

DynamicRTSPServerRTSPServerlookupServerMediaSession进行了覆写,改变了查找机制,原来查找不到会返回空,而这里则会主动创建一个。该函数首先会在程序目录下寻找是否有对应的文件,这也就说明了为什么liveMediaServer规定文件一定要放在同一目录下了。

该类中还定义了一个全局方法createNewSMS,会根据文件名的后缀创建对应的***ServerMediaSubSession,并添加到相应的ServerMediaSession记录里。

© 著作权归作者所有

Sean-x
粉丝 4
博文 57
码字总数 83950
作品 0
武汉
程序员
私信 提问
基于Live555实现RtspServer及高清高码率视频传输优化

基于Live555实现RtspServer及高清高码率视频传输优化 最近做了一些pc和嵌入式平台的RTSP服务器项目,大多数的要求是简单但是功能全面,并且性能还要强劲。综合考虑后,基本都是在基于live555...

haibindev
2018/08/20
0
0
RTSP 大华IPC指令协商

OPTIONS rtsp://192.168.0.196:554/cam/realmonitor?channel=1&subtype=0 RTSP/1.0 CSeq: 2 User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22) RTSP/1.0 401 Unauthorized CS......

fengyuzaitu
2018/01/15
0
0
成功扩展live555支持ipv6,同时支持RTSPServer & RTSPClient

live555对ipv6的扩展 从live555的官网看live555的发展历史,实在是历史悠久,保守估计已经发展了至少16年以上了,同时,这也导致了live555在很多架构和考虑上面不能满足现代化的多线程、ipv...

xiejiashu
2018/05/05
0
0
让android支持RTSP及live555分析

#DATE 2012/05/09 #2012/08/27由cnblogs迁入 如何让Android支持C++异常机制 Android不支持C++异常机制,如果需要用到的话,则需要在编译的时候加入比较完整的C++库. Android支持的C++库可以在A...

Wii-D
2012/08/27
0
6
live555讀source為fps2的h264影片時 發生異常

我的使用流程 1.下載live555後編譯 2.跑testH264VideoStreamer.cpp這隻程式 ,其中影片是官方的h264影片 http://www.live555.com/liveMedia/public/264/ 3.vlc撥放rtsp://192.168.2.53:8554/......

吊人
2014/03/03
670
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
4分钟前
0
0
17.windows上安装kafka并简单应用

1.单机版 1.1 安装jdk 略 1.2 安装zookeeper https://my.oschina.net/springMVCAndspring/blog/3045210 1.3 安装window上安装kafka 1.3.1 下载 http://kafka.apache.org/downloads 1.3.2 解压......

20190513
7分钟前
0
0
缓存雪崩

缓存雪崩原因:大批次的缓存数据,同一时刻过期 解决方案: 1、尽可能避免所有缓存在同一时刻过期,即:合理调整过期策略 2、对条件加锁 伪代码: public ProductselectProduct(String id){ ...

少年已不再年少
今天
8
0
所以说这才是Redis进化史吗?看Redis是如何变成最强缓存的

写在前面:笔者翻阅了很多资料,只能找到Redis2.2及以后的主要版本的发布日志。所以,让我们从2.2开始一步一步深入了解Redis。 2.2 redis-cli命令非常大的改进: Tab补全,支持help(例如help ...

Java干货分享
今天
13
0
manjaro抽风,/usr/lib/modules目录丢失

现象 2019年6月16日这周,突然发现manjaro抽风: 先是启动时无法加载一些内核模块,导致启动失败 然后用启动盘重新pacman -S linux,第一次启动是好的,再启动就有问题了 原因 翻来覆去搞不定...

chuqq
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部