ijkplayer的一些優化

2022-06-06 12:33:13 字數 2150 閱讀 1128

接上篇:

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的目下

$ ./init-android-openssl.sh 去遠端倉庫拉取openssl的遠端**,如果是ios的,這裡是init-ios-openssl.h

2.compile openssl

$ cd android/contrib

$ ./compile-openssl.sh clean

$ ./compile-openssl.sh all

經過以上步驟已經編譯好openssl了,然後我們執行一下方法

$./compile-ffmpeg.sh clean

編譯ffmpeg軟解碼庫,這個過程會生成各種架構的ffmpeg 這個過程比較耗時

$./compile-ffmpeg.sh all

四、如何降低ijkplayer延遲效應

通過修改原始檔,因為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後...