live555大致可以看成是2部分,一部分是sink,一部分是source。当然还有一部分是建立服务器的media部分不用看。
source是video进来,sink是出去。
在liveMedia/RTPInterface.cpp中:
Boolean RTPInterface::sendPacket(unsigned char* packet, unsigned packetSize) {
Boolean success = True; // we'll return False instead if any of the sends fail
//由此可见下面是UDP推流
// Normal case: Send as a UDP packet:
if (!fGS->output(envir(), packet, packetSize)) success = False;
// Also, send over each of our TCP sockets:
//下面是TCP推流,注释掉下面的代码可以只用UDP发送
#if 0
tcpStreamRecord* nextStream;
for (tcpStreamRecord* stream = fTCPStreams; stream != NULL; stream = nextStream) {
nextStream = stream->fNext; // Set this now, in case the following deletes "stream":
if (!sendRTPorRTCPPacketOverTCP(packet, packetSize,
stream->fStreamSocketNum, stream->fStreamChannelId)) {
success = False;
}
}
#endif
return success;
}
live555推流默认是UDP,TCP两个通道同时推流的,所以在拉流的客户端,你用TCP也好UDP也好都是能拉流成功的。但是TCP有可能会挂包,导致中断重连,可以选择注释掉。
参考: