本文主要是介绍LIVE555学习4:live555MediaServer讲解——如何根据指定文件后缀创建ServerMediaSession,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在前面《LIVE555学习1:Linux下live555的编译及测试》中,当我们运行起可执行程序live555MediaServer,在VLC中输入rtsp://192.168.1.100/Titanic.ts, 便可以播放ts流。当我们输入其他格式,如H264、H265、aac等,均可以输出对应流。但是在主函数中,只创建了一个RTSPServer实例,并没有创建这些对应不同格式文件的ServerMediaSession和ServerMediaSubSession.
上一篇中也大致介绍了RTSP服务运行的整个流程,但是没有对代码进行详细的讲解,所以并不清楚ServerMediaSession是如何创建的,什么时候创建的,如何根据不同的文件格式进行创建不同的对象。。。。
在RTSP会话过程中,再DESCRIBE和SETUP中,会来确定ServerMediaSession是否存在。具体实现在DynamicRTSPServer.cpp中,在函数lookupServerMediaSession中,会进行以下检查:
- ①检查ServerMediaSession是否存在
ServerMediaSession* sms = RTSPServer::lookupServerMediaSession(streamName);Boolean smsExists = sms != NULL;
- ②判断文件是否存在,如果文件没了,
ServerMediaSession有,则删除ServerMediaSession
if (!fileExists) {if (smsExists) {// "sms" was created for a file that no longer exists. Remove it:removeServerMediaSession(sms);sms = NULL;}
- ③最终根据判断结果来决定是否创建
ServerMediaSessionif (sms == NULL) {sms = createNewSMS(envir(), streamName, fid);addServerMediaSession(sms);}
若是需要创建ServerMediaSession,则会调用createNewSMS,在此函数中,也做了几件事:
- ①确定文件后缀
char const* extension = strrchr(fileName, '.');if (extension == NULL) return NULL;
- ②根据文件后缀来创建对应的ServerMediaSession和ServerMediaSubSession
例如H264:
}else if (strcmp(extension, ".264") == 0) {// Assumed to be a H.264 Video Elementary Stream file:NEW_SMS("H.264 Video");OutPacketBuffer::maxSize = 100000; // allow for some possibly large H.264 framessms->addSubsession(H264VideoFileServerMediaSubsession::createNew(env, fileName, reuseSource));
}
例如H265:
} else if (strcmp(extension, ".265") == 0) {// Assumed to be a H.265 Video Elementary Stream file:NEW_SMS("H.265 Video");OutPacketBuffer::maxSize = 100000; // allow for some possibly large H.265 framessms->addSubsession(H265VideoFileServerMediaSubsession::createNew(env, fileName, reuseSource));
}
结束。根据以上的分析可以知道,在程序运行时候,会首先创建一个RTSPServer实例,然后会根据RTSP会话传递过来的文件格式来创建对应的ServerMediaSession和ServerMediaSubSession。
这篇关于LIVE555学习4:live555MediaServer讲解——如何根据指定文件后缀创建ServerMediaSession的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!