接上篇:
ijkplayer框架的整合( 從開始到優化秒開)
補充:ijkplayer - 拓展:
資料收集備用。
1、在弱網時使用
4、如何降低ijkplayer延遲效應
一、在弱網時如何優化
好的網路下視音訊能夠得到及時的傳送,不會造成視音訊資料在本地的堆積,直播效果流暢,延時較小。而在弱網網路環境下,視音訊資料傳送不出去,則需要我們對視音訊資料進行處理。差網路環境下對視音訊資料一般有四種處理方式:快取區設計、網路檢測、丟幀處理、降位元速率處理。
1、緩衝區設計
視音訊資料傳入緩衝區,傳送者從緩衝區獲取資料進行傳送,這樣就形成了乙個非同步的生產者消費者模式。生產者只需要將採集、編碼後的視音訊資料推送到緩衝區,而消費者則負責從這個緩衝區裡面取出資料傳送。
視音訊緩衝區
2、網路檢測
差網路處理過程中乙個重要的過程是網路檢測,當網路變差的時候能夠快速地檢測出來,然後進行相應的處理,這樣對網路反應就比較靈敏,效果就會好很多。通過實時計算每秒輸入緩衝區的資料和傳送出去資料,如果傳送出去的資料小於輸入緩衝區的資料,那麼說明網路頻寬不行,這時候緩衝區的資料會持續增多,這時候就要啟動相應的機制。
預設ijkplayer中是1,你可以自行,修改這個值。
4、降位元速率
在android中,如果使用了硬編進行編碼,在差網路環境下,我們可以實時改變硬編的位元速率,從而使直播更為流暢。當檢測到網路環境較差的時候,在丟幀的同時,我們也可以降低視音訊的位元速率。在android sdk版本大於等於19的時候,可以通過傳遞引數給mediacodec,從而改變硬編編碼器出來資料的位元速率。
bundle bitrate = new bundle();bitrate.putint(mediacodec.parameter_key_video_bitrate, bps * 1024);mmediacodec.setparameters(bitrate);
w/audiotrack: releasebuffer() track 0xcce8b600 disabled due to previous underrun, restarting接下來我們來編譯openssl
1.init openssl
$ cd .. 進入到ijkplayer的目下2.compile openssl$ ./init-android-openssl.sh 去遠端倉庫拉取openssl的遠端**,如果是ios的,這裡是init-ios-openssl.h
$ cd android/contrib經過以上步驟已經編譯好openssl了,然後我們執行一下方法$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all
$./compile-ffmpeg.sh clean四、如何降低ijkplayer延遲效應編譯ffmpeg軟解碼庫,這個過程會生成各種架構的ffmpeg 這個過程比較耗時
$./compile-ffmpeg.sh all
通過修改原始檔,因為ijkplayer實際上是基於ffplay.c實現的:
見上篇 ijkplayer框架的整合( 從開始到優化秒開)
從上述實現可以看出,該方法中主要迴圈做兩件事情:
可見同步的重點是在video_refresh中,下面看該方法一些關鍵部分:
否則進入正常顯示當前幀的流程,呼叫video_display2開始渲染。
補充:ijkplayer - 拓展:
優化的一些例項
優化使用的工具,使用loadrunner做為壓力測試工具,使用jprobe進行 剖析。1 第乙個例項。原狀況 呼叫乙個api,發現執行的時間很高,用jprobe分析,發現消耗時間最長的是把快取中的乙個樹從第三個節點進行扁平化,就是把第二個節點的子樹構造為乙個列表,不知道為什麼構造這個資料的耗時比直接...
mysql的一些優化
前言 sql優化,是一種概率層面的優化。至於是否實際使用了我們的優化,需要通過explain進行推測。注意 服務層中有sql優化器,可能會影響我們的優化,同時註明 sql的優化前提是有索引 有索引 有索引 in和exists的使用場景 select from a where exists selec...
Elasticsearch的一些優化
1.多執行緒程式插入,可以根據伺服器情況開啟多個執行緒index 速度可以提高n倍,n 2 2.如果有多台機器,可以以每台設定n個shards的方式,根據業務情況,可以考慮取消replias curl xput d 這裡設定20個shards,複製為0,如果需要replicas,可以完成index後...