基于live555实现的RTSPServer对底层进行性能优化的方法
在博客《EasyIPCamera高性能攝像機RTSP服務器RTSPServer解決方案》我介紹了基于live555實現的一套RTSPServer功能組件,當時開發者經過幾個月的調試,已經將底層的性能調試到了一個業界非常優秀的程度,主要優化的幾點:
- 發送優化
- 調度優化
發送優化方面,主要就是調整live555的緩沖區大小和每次發送的數據大小,眾所周知,流媒體發送的是各種大小的音視頻數據,而這些數據大的幾百k,小的就幾個字節,如果每一個零散的數據都要走一遍發送循環,對于live555這種單線程的架構來說,性能吃緊,所以,我們做了幾點調整:
// 加大發送Packet大小 MultiFramedRTPSink.cpp 47行:setPacketSizes(1000, 8192);RTPInterface.cpp129行: increaseSendBufferTo(envir(), fGS->socketNum(), 512*1024);//數據累積發送,不再單獨發送 //注釋掉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);在調度方面的優化
402 行 //當前的數據緩沖區如果沒有發送完成,就繼續發送,不再走一遍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在網絡數據發送方面的性能,使得在海思3516A這樣的板子上,高清視頻能提升到4路4M高清視頻的發送,且很穩定(當然,網絡一定要保證,大部分走wifi的測試都到不了這個效果)!
關于EasyIPCamera
EasyIPCamera是一套非常穩定、易用、支持多種平臺(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv400等平臺)的RTSP Server組件,適用于IPCamera、內網RTSP服務等小型RTSP流媒體服務器,接口調用非常簡單成熟,無需關注RTSPServer中關于客戶端監聽接入、音視頻多路復用、RTSP具體流程、RTP打包與發送等相關問題,支持多種音視頻格式,再也不用像調用live555 RTSPServer那樣處理整個RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的復雜流程和擔心內存釋放的問題了!
獲取更多信息
郵件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright ? EasyDarwin.org 2012-2017
轉載于:https://www.cnblogs.com/babosa/p/7518010.html
總結
以上是生活随笔為你收集整理的基于live555实现的RTSPServer对底层进行性能优化的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到乌鸦死了什么预兆
- 下一篇: TCP是如何保证包的顺序传输