基于live555实现的RTSPServer对底层进行性能优化的方法
在博客《EasyIPCamera高性能攝像機(jī)RTSP服務(wù)器RTSPServer解決方案》我介紹了基于live555實現(xiàn)的一套RTSPServer功能組件,當(dāng)時開發(fā)者經(jīng)過幾個月的調(diào)試,已經(jīng)將底層的性能調(diào)試到了一個業(yè)界非常優(yōu)秀的程度,主要優(yōu)化的幾點:
- 發(fā)送優(yōu)化
- 調(diào)度優(yōu)化
發(fā)送優(yōu)化方面,主要就是調(diào)整live555的緩沖區(qū)大小和每次發(fā)送的數(shù)據(jù)大小,眾所周知,流媒體發(fā)送的是各種大小的音視頻數(shù)據(jù),而這些數(shù)據(jù)大的幾百k,小的就幾個字節(jié),如果每一個零散的數(shù)據(jù)都要走一遍發(fā)送循環(huán),對于live555這種單線程的架構(gòu)來說,性能吃緊,所以,我們做了幾點調(diào)整:
// 加大發(fā)送Packet大小 MultiFramedRTPSink.cpp 47行:setPacketSizes(1000, 8192);RTPInterface.cpp129行: increaseSendBufferTo(envir(), fGS->socketNum(), 512*1024);//數(shù)據(jù)累積發(fā)送,不再單獨發(fā)送 //注釋掉332行,修改為以下: //if (!sendDataOverTCP(socketNum, framingHeader, 4, False)) break; //if (!sendDataOverTCP(socketNum, packet, packetSize, True)) break;struct iovec iov[2];iov[0].iov_base = framingHeader;iov[0].iov_len = 4;iov[1].iov_base = packet;iov[1].iov_len = packetSize;writev(socketNum, iov, 2);在調(diào)度方面的優(yōu)化
402 行 //當(dāng)前的數(shù)據(jù)緩沖區(qū)如果沒有發(fā)送完成,就繼續(xù)發(fā)送,不再走一遍live555的eventloop流程,提高效率!#if 0// We have more frames left to send. Figure out when the next frame// is due to start playing, then make sure that we wait this long before// sending the next packet.struct timeval timeNow;gettimeofday(&timeNow, NULL);int secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec;int64_t uSecondsToGo = secsDiff*1000000 + (fNextSendTime.tv_usec - timeNow.tv_usec);if (uSecondsToGo < 0 || secsDiff < 0) { // sanity check: Make sure that the time-to-delay is non-negative:uSecondsToGo = 0;}if (uSecondsToGo > 0)printf("uSecondsToGo: %d\n", uSecondsToGo);// Delay this amount of time:nextTask() = envir().taskScheduler().scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext, this); #elsesendNext(this); #endif這樣幾點修改,大大提升了live555在網(wǎng)絡(luò)數(shù)據(jù)發(fā)送方面的性能,使得在海思3516A這樣的板子上,高清視頻能提升到4路4M高清視頻的發(fā)送,且很穩(wěn)定(當(dāng)然,網(wǎng)絡(luò)一定要保證,大部分走wifi的測試都到不了這個效果)!
關(guān)于EasyIPCamera
EasyIPCamera是一套非常穩(wěn)定、易用、支持多種平臺(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv400等平臺)的RTSP Server組件,適用于IPCamera、內(nèi)網(wǎng)RTSP服務(wù)等小型RTSP流媒體服務(wù)器,接口調(diào)用非常簡單成熟,無需關(guān)注RTSPServer中關(guān)于客戶端監(jiān)聽接入、音視頻多路復(fù)用、RTSP具體流程、RTP打包與發(fā)送等相關(guān)問題,支持多種音視頻格式,再也不用像調(diào)用live555 RTSPServer那樣處理整個RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的復(fù)雜流程和擔(dān)心內(nèi)存釋放的問題了!
獲取更多信息
郵件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright ? EasyDarwin.org 2012-2017
轉(zhuǎn)載于:https://www.cnblogs.com/babosa/p/7518010.html
總結(jié)
以上是生活随笔為你收集整理的基于live555实现的RTSPServer对底层进行性能优化的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到乌鸦死了什么预兆
- 下一篇: 怀孕梦到田螺是什么意思