1.使用的版本是live555-latest.tar.gz
2.环境linux
现在按如下步骤编译:
1从live555官网上下载源码,执行tar -zxvflive555-latest.tar.gz,解压到linux目录下。
2到live555目录下,发现有很多类似config.xx-xx的文件名,这是针对不同平台的配置文件。执行./genMakefiles linux-gdb。
3执行make。到此编译完成,在4个子目录下可以找到生成的.a文件。
3.测试一下:
在live555主目录下
mkfifo test.264
./mediaServer/live555MediaServer
cat test.h264 >> test.264
这时在pc电脑上用vlc播放 :rtsp://172.16.200.43:8554/test.264 即可看到转发流
4.参照网上大神的博客自己走了一遍代码,版本不同有些不同的区别,所以决定记录一下:
http://blog.youkuaiyun.com/u013898698/article/details/56284534?locationNum=12&fps=1
从live555官方自带的demo为例:在testProgs的 testOnDemandRTSPServer.cpp为流程,
这个程序官方介绍是这样的:
// Copyright (c) 1996-2017, Live Networks, Inc. All rights reserved
// A test program that demonstrates how to stream - via unicast RTP
// - various kinds of file on demand, using a built-in RTSP server.
就是说这个程序演示了如何利用RTSPServer这个类来对媒体文件进行单播,OnDemand的意思是收到RTSP客户端请求时才进行流化和单播。main函数:
其中 TaskScheduler* scheduler = BasicTaskScheduler::createNew();官方解释是:Begin by setting up our usage environment,也就是TaskScheduler提供了任务调度功能,是整个程序的运行发动机就是它,通过他来调度任务和执行任务。
env = BasicUsageEnvironment::createNew(*scheduler);是用于整个系统的基础功能类。UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针。
UserAuthenticationDatabase就不累赘解释了,这个是用户数据库,有需要的话把ACCESS_CONTROL定义了,通过addUserRecord来添加用户RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, authDB);创建一个rtsp服务器端口号8554,如果不指定则默认为554
我们就仔细看看创建RTSPServer,创建ServerMediaSession以及ServerMediaSubsession这部分的代码,看这部分代码之前,我们需要先对RTSP协议的建立连接过程有个大概的了解,在此我就不再详述,网上有很多讲解这个过程的博文,在此推荐一个:
http://www.cnblogs.com/qq78292959/archive/2010/08/12/2077039.html
RTSPServer类即表示一个流媒体服务器实例,RTSPServer::createNew是一个简单工厂函数,使用指定的端口(8554)创建一个TCP的socket用于等待客户端的连接,然后new一个RTSPServer实例。
RTSPServer继承了GenericMediaServer这个类 ,createNew的时候调用了GenericMediaServer里面的setUpOurSocket: