Live555源码解析(1) - Main 寻根问祖,留其筋骨

本文从MediaServer的main()函数入手,深入解析Live555源码,涉及HTTP Tunneling原因、事件循环、TaskScheduler的doEventLoop()、SingleStep()以及handleAlarm()等关键环节,梳理了MediaServer的核心运行流程。
摘要由CSDN通过智能技术生成

开始分析MediaServer源码前,结合官方文档说明,对各文件夹源码总结如下:

  • groupsock
    静态库,封装了network interfaces和sockets。举例而言,Groupsock类中封装了一个收发组播数据包的socket。

  • liveMedia
    静态库,定义了一系列类簇,根类为Medium,这些类支持了多种媒体类型和编解码器。

  • WindowsAudioInputDevice
    静态库,实现了liveMedia中的AudioInputDevice虚基类,可为Windows程序提供从输入设备中读取PCM audio samples的功能。

  • UsageEnvironment
    静态库,内部主要有如下几个虚基类

    • TaskScheduler
      为DelayedTask、socket后台操作处理、事件event提供调度支持
    • HashTable
      定义通用hash表的接口,供其他代码使用
    • UsageEnvironment
      集成TaskScheduler、groupsock、liveMedia等模块功能,添加Result、Error消息机制,从而提供使用环境。
  • BasicUsageEnvironment
    静态库,由于UsageEnvironment中仅给出虚基类定义,为了能够真正地运行,所以从UsageEnvironment继承并实现了BasicUsageEnvironment类。它用于实现易用的命令行程序,其中,Read events和delayed operations通过select()循环进行支持。

  • mediaServer
    可执行文件,通过逻辑集成上述库所提供的的功能,提供串流服务。

MediaServer

MeidaServer运行效果如图所示:

面对一个庞大的项目工程,想要分析源码,必须先找出有效突破口,本文中将从live555MediaServer.cpp 中main()函数开始切割工程。

1. main()

main()函数并不复杂,下面列出整理后的源码:

int main(int argc, char **argv)
{
    // 准备使用环境
    TaskScheduler* scheduler = BasicTaskScheduler::createNew();
    UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);

    // RTSP Server授权控制,默认关闭. 如需开启,按如下步骤:
    // 1. define ACCESS_CONTROL
    // 2. authDB->addUserRecord("xxxx", "xxxx");
    UserAuthenticationDatabase* authDB = NULL;
#ifdef ACCESS_CONTROL
    authDB = new UserAuthenticationDatabase;
    authDB->addUserRecord("username1", "password1");
#endif  

    // 创建RTSPServer,默认使用554端口,如已被占用或其他错误,则尝试使用8554端口
    RTSPServer* rtspServer;
    portNumBits rtspServerPortNum = 554;
    rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);
    if(rtspServer == NULL)
    {
        rtspServerPortNum = 8554;
        rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);
    }
    if(rtspServer == NULL)
    {
        *env << "Failed to create RTSP server: " << 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值