日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于live555实现的RTSPServer对底层进行性能优化的方法

發(fā)布時(shí)間:2023/11/29 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于live555实现的RTSPServer对底层进行性能优化的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在博客《EasyIPCamera高性能攝像機(jī)RTSP服務(wù)器RTSPServer解決方案》我介紹了基于live555實(shí)現(xiàn)的一套R(shí)TSPServer功能組件,當(dāng)時(shí)開發(fā)者經(jīng)過幾個(gè)月的調(diào)試,已經(jīng)將底層的性能調(diào)試到了一個(gè)業(yè)界非常優(yōu)秀的程度,主要優(yōu)化的幾點(diǎn):

  • 發(fā)送優(yōu)化
  • 調(diào)度優(yōu)化

發(fā)送優(yōu)化方面,主要就是調(diào)整live555的緩沖區(qū)大小和每次發(fā)送的數(shù)據(jù)大小,眾所周知,流媒體發(fā)送的是各種大小的音視頻數(shù)據(jù),而這些數(shù)據(jù)大的幾百k,小的就幾個(gè)字節(jié),如果每一個(gè)零散的數(shù)據(jù)都要走一遍發(fā)送循環(huán),對(duì)于live555這種單線程的架構(gòu)來說,性能吃緊,所以,我們做了幾點(diǎn)調(diào)整:

// 加大發(fā)送Packet大小 MultiFramedRTPSink.cpp 47行:setPacketSizes(1000, 8192);RTPInterface.cpp129行: increaseSendBufferTo(envir(), fGS->socketNum(), 512*1024);//數(shù)據(jù)累積發(fā)送,不再單獨(dú)發(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

這樣幾點(diǎn)修改,大大提升了live555在網(wǎng)絡(luò)數(shù)據(jù)發(fā)送方面的性能,使得在海思3516A這樣的板子上,高清視頻能提升到4路4M高清視頻的發(fā)送,且很穩(wěn)定(當(dāng)然,網(wǎng)絡(luò)一定要保證,大部分走wifi的測試都到不了這個(gè)效果)!

關(guān)于EasyIPCamera

EasyIPCamera是一套非常穩(wěn)定、易用、支持多種平臺(tái)(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv400等平臺(tái))的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那樣處理整個(gè)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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。