1. 程式人生 > >Live555效能優化實踐

Live555效能優化實踐

網上很多文章提到了Live555的單執行緒任務排程模式,在用作RTSP服務時,導致了在併發量較多或者磁碟效能不佳時會導致效能較差,併發數受限。筆者通過在做基於海思3531編碼器和解碼器的過程當中(提供基於2路H264+1路AAC的TS流編碼(輸入為RTSP TS流)和RTSP流媒體解碼播放),有以下2點收穫,特分享給有需要的同仁。

優化1:同步讀取資料來源修改為非同步讀取資料來源, FramedSource的子類的doGetNextFrame函式中不要阻塞等待資料來源, 在無資料時可以重新增加一個定時器任務,延時再讀取資料。在無資料時增加一個等待任務:

void MyFramedSource::doGetNextFrame()
{
    if(無資料可讀){//延時3000微妙(3毫秒)再次讀取資料
     envir().taskScheduler().scheduleDelayedTask(3000, (TaskFunc*)DelayReadFrame, this);
     return;
    }
    .....省略其他正常邏輯
}

static void MyFramedSource::DelayReadFrame(FramedSource *sourc)
{
     source->doGetNextFrame();
}
優化2: 定時器的記憶體分配管理可以通過記憶體池來管理,重複利用。而不需要重複分配和釋放。可以想象一下,一個30幀每秒的H264視訊+40多幀每秒的AAC音訊,定時器的記憶體分配和釋放的次數是70次每秒。完整程式碼我就不貼了,摘錄一段關鍵程式碼,從已分配記憶體上new一個定時器類的物件我附在下面程式碼中,可參考程式碼中的註釋:
TaskToken BasicTaskScheduler0::scheduleDelayedTask(int64_t microseconds,
                         TaskFunc* proc,
                         void* clientData) {
  if (microseconds < 0) microseconds = 0;
  DelayInterval timeToDelay((long)(microseconds/1000000), (long)(microseconds%1000000));
  //從記憶體池fPool中分配一塊記憶體
  void *alarmMemory = fPool.malloc(sizeof(AlarmHandler));
  
//從已分配記憶體上,構造一個AlarmHandler定時器處理物件
  AlarmHandler* alarmHandler = new(alarmMemory) AlarmHandler(proc, clientData, timeToDelay);
  fDelayQueue->addEntry(alarmHandler);

  return (void*)(alarmHandler->token());
}

在Live555中,凡是分配定時器的地方,用上述程式碼替換,凡是delete AlarmHandler物件的地方,呼叫fPool.free(alarmHandler )即可回收記憶體再使用。fPool用一個無鎖的佇列即可(Live555是單執行緒工作模式), 當然如果用STL的deque雙端佇列效率更高。


相關推薦

Java基礎學習總結(135)——Java程式碼效能優化實踐經驗再總結

前言 程式碼優化的最重要的作用應該是:避免未知的錯誤。在程式碼上線執行的過程中,往往會出現很多我們意想不到的錯誤,因為線上環境和開發環境是非常不同的,錯誤定位到最後往往是一個非常小的原因。然而為了解決這個錯誤,我們需要先自驗證、再打包出待替換的class檔案、暫停業務並重啟,對於一個成熟的專

阿里雲Elasticsearch效能優化實踐

     Elasticsearch是一款流行的分散式開源搜尋和資料分析引擎,具備高效能、易擴充套件、容錯性強等特點。它強化了Apache Lucene的搜尋能力,把掌控海量資料索引和查詢的方式提升到一個新的層次。本文結合開源社群和阿里雲平臺的實踐經驗,探討如何調優Elastic

Flume效能優化實踐

Flume效能優化實踐 發表評論 最近公司落地Flume日誌採集著實反覆了好久,簡單記錄一下效能優化的核心思路。 初始配置所有batch size、transaction size都是1000,channel的capactiy是10000。 版本一 最初我是按Memory Cha

niginx的效能優化實踐

一、Nginx 正向代理和反向代理實現 那麼什麼是反向代理其與正向代理有什麼區別? 正向代理的概念: 正向代理是指客戶端與目標伺服器之間增加一個代理伺服器,客戶端直接訪問代理伺服器,在由代理伺服器訪問目標伺服器並返回客戶端並返回 。這個過程當中客戶端需要知道代理伺服器地址,並配置連線。

基於 Nginx 的 HTTPS 效能優化實踐

前言 分享一個卓見雲的較多客戶遇到HTTPS優化案例。 隨著相關瀏覽器對HTTP協議的“不安全”、紅色頁面警告等嚴格措施的出臺,以及向 iOS 應用的 ATS 要求和微信、支付寶小程式強制 HTTPS 需求,以及在合規方面如等級保護對傳輸安全性的要求都在推動 HTTPS 的發展。 雖然 HTTPS 優化

Nginx 效能優化實踐

概要: Nginx 反向代理與負載均衡 Nginx 實現快取記憶體 Nginx 效能引數調優 一、Nginx 反向代理實現 知識點: 反向代理基本配置 負載均衡配置與引數解析 負載均衡演算法詳解 反向代理基本配置 提問:什麼是反向代理其與正向代理有什麼區別?

讓Elasticsearch飛起來!——效能優化實踐乾貨

0、題記 Elasticsearch效能優化的最終目的:使用者體驗爽。 關於爽的定義——著名產品人樑寧曾經說過“人在滿足時候的狀態叫做愉悅,人不被滿足就會難受,就會開始尋求。如果這個人在尋求中,能立刻得到即時滿足,這種感覺就是爽!”。 Elasticsearch的爽點就是:快、準、全

eBay Elasticsearch效能優化實踐

摘要:Elasticsearch是基於Apache Lucene的開源搜尋和分析引擎,允許使用者以近乎實時的方式儲存,搜尋和分析資料。雖然Elasticsearch專為快速查詢而設計,但其效能在很大程度上取決於用於應用程式的場景,索引的資料量以及應用程式和使

CSDN博文週刊第2期 |讓Elasticsearch飛起來!——效能優化實踐乾貨

CSDN每週都會產生大量的部落格文章,有一些優質的乾貨文章值得被更多人閱讀,分享。CSDN博文週刊會從過去一週博文中精心挑選一些優質文章來以饗讀者,陪伴大家度過一個愉快週末。 大資料 1、讓Elasticsearch飛起來!——效能優化實踐乾貨 Elasticsearch效能

讓Elasticsearch飛起來:效能優化實踐乾貨

版權宣告:本文為博主原創文章,未經博主允許不得轉載。轉載請務必加上原作者:銘毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/85109769 0、題記 Elasticsearc

技術分享:Java效能優化實踐(附效能優化專題思維導圖)

Java 應用效能優化是一個老生常談的話題,筆者根據個人經驗,將 Java 效能優化分為 4 個層級:應用層、資料庫層、框架層、JVM 層。通過介紹 Java 效能診斷工具和思路,給出搜狗商業平臺的效能優化案例以供參考。 Java 應用效能優化是一個老生常談的話題,典型的效能問題如頁面響應慢、介

ES terms聚合統計效能優化實踐

一、terms聚合統計,initialise 階段的耗時,有助於我們調整對應 aggs 的 execution_hint 引數選擇? map:過濾之後,實際納入統計的doc數量特別少,但是欄位總的term數量超級多 適用場景: 過濾完之後,納入統計的d

攜程移動端 UI 介面效能優化實踐

UI 卡頓原理和原因 人類大腦與眼睛對一個畫面的連貫性感知其實是有一個界限的,譬如我們看電影會覺得畫面很自然連貫,其幀率通常為 24fps;那麼,用手機當然也需要感知螢幕操作的連貫性(尤其是動畫過渡),所以在手機領域 Android/iOS 索性就把達到這種流暢的幀率規定

HBase實踐案例:知乎 AI 使用者模型服務效能優化實踐

使用者模型簡介 知乎 AI 使用者模型服務於知乎兩億多使用者,主要為首頁、推薦、廣告、知識服務、想法、關注頁等業務場景提供資料和服務, 例如首頁個性化 Feed 的召回和排序、相關回答等用到的使用者長期興趣特徵,問題路由、回答排序中用到的 TPR「作者創作權威度」,廣告定向投放用到的

Live555效能優化實踐

網上很多文章提到了Live555的單執行緒任務排程模式,在用作RTSP服務時,導致了在併發量較多或者磁碟效能不佳時會導致效能較差,併發數受限。筆者通過在做基於海思3531編碼器和解碼器的過程當中(提供基於2路H264+1路AAC的TS流編碼(輸入為RTSP TS流)和RT

Vue單頁面應用效能優化實踐

Vue單頁面應用效能優化實踐最近業餘時間一直在做一個個人專案,使用的是vue+vue-router實現的單頁面應用。相對於多頁面應用來說,其實單頁面應用對效能優化的要求要更高,因為首屏載入的檔案要更大,

Hadoop YARN:排程效能優化實踐

背景 YARN作為Hadoop的資源管理系統,負責Hadoop叢集上計算資源的管理和作業排程。 美團的YARN以社群2.7.1版本

從零開始入門 K8s | etcd 效能優化實踐

作者 | 陳星宇(宇慕)  阿里雲基礎技術中臺技術專家 本文整理自《CNCF x Alibaba 雲原生技術公開課》第 17 講。 導讀:etcd 是容器雲平臺用於儲存關鍵元資訊的元件。阿里巴巴使用 etcd 已經有 3 年的歷史, 在今年 雙11 過程中它又一次承擔了關鍵角色,接受了 雙11 大壓力的檢驗

記一次介面效能優化實踐總結:優化介面效能的八個建議

### 前言 最近對外介面偶現504超時問題,原因是程式碼執行時間過長,超過nginx配置的15秒,然後真槍實彈搞了一次介面效能優化。在這裡結合優化過程,總結了介面優化的八個要點,希望對大家有幫助呀~ - 資料量比較大,批量操作資料入庫 - 耗時操作考慮非同步處理 - 恰當使用快取 - 優化程式邏輯、程式碼

QQ音樂Android客戶端Web頁面通用效能優化實踐

QQ音樂 Android 客戶端的 Web 頁面日均 PV 達到千萬量級,然而頁面的開啟耗時與 Native 頁面相距甚遠,需要系統性優化。本文將介紹 QQ 音樂 Android 客戶端在進行 Web 頁面通用效能優化過程中的問題、思路、方案和效果,並嘗試對跨端場景的常見瓶頸和對策進行歸納。文章作者:關岳,