live555 两个循环

来源:互联网 发布:excel输入数据 编辑:程序博客网 时间:2024/06/14 03:28

live555有两个循环!


1、

一个是select()所在的主循环,它即监听连接,也接收请求。

live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏,执行到里面后不停地转圈,生名不息,转圈不止。

    void BasicTaskScheduler0::doEventLoop(char* watchVariable) {        // Repeatedly loop, handling readble sockets and timed events:        while (1) {            if (watchVariable != NULL && *watchVariable != 0)                break;            SingleStep();//select 循环        }    }


2、

另一个是发送数据的循环,在MultiFramedRTPSink类中,通过buildAndSendPacket、packFrame、afterGettingFrame、afterGettingFrame1、sendPacketIfNecessary和sendNext构成了一个循环圈,数据包的读取和发送在这里循环进行着。特别注意的是sendPacketIfNecessary方法中的后面代码(nextTask() = envir().taskScheduler().scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext, this);),通过Delay amount of time后,继续下一个Task,并回过来继续调用buildAndSendPacket方法。
原创粉丝点击