ijkplayer和ffplay在打開rtmp串流視頻時,大多數(shù)都會遇到5~10秒的延遲菱皆,在ffplay播放時须误,如果加上-fflags nobuffer可以縮短播放的rtmp視頻延遲在1s內(nèi),而在IjkMediaPlayer中加入
mediaPlayer.setOption(1, "analyzemaxduration", 100L);
mediaPlayer.setOption(1, "probesize", 10240L);
mediaPlayer.setOption(1, "flush_packets", 1L);
mediaPlayer.setOption(4, "packet-buffering", 0L);
mediaPlayer.setOption(4, "framedrop", 1L);
1: 設(shè)置是否開啟變調(diào)
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"soundtouch",isModifyTone?0:1);
2:設(shè)置是否開啟環(huán)路過濾: 0開啟仇轻,畫面質(zhì)量高京痢,解碼開銷大,48關(guān)閉篷店,畫面質(zhì)量差點祭椰,解碼開銷小
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC,"skip_loop_filter",isSkipLoopFilter?0:48L);
3:設(shè)置播放前的最大探測時間
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzemaxduration",100L);
4:設(shè)置播放前的探測時間 1,達(dá)到首屏秒開效果
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzeduration",1);
5:播放前的探測Size,默認(rèn)是1M, 改小一點會出畫面更快
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"probesize",1024*10);
6:每處理一個packet之后刷新io上下文
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"flush_packets",1L);
7: 是否開啟預(yù)緩沖疲陕,一般直播項目會開啟方淤,達(dá)到秒開的效果,不過帶來了播放丟幀卡頓的體驗
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"packet-buffering",isBufferCache?1:0);
8:播放重連次數(shù)
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"reconnect",5);
9:最大緩沖大小,單位kb
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max-buffer-size",maxCacheSize);
10:跳幀處理,放CPU處理較慢時蹄殃,進(jìn)行跳幀處理携茂,保證播放流程,畫面和聲音同步
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"framedrop",5);
11:最大fps
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max-fps",30);
12:設(shè)置硬解碼方式
jkPlayer支持硬解碼和軟解碼诅岩。 軟解碼時不會旋轉(zhuǎn)視頻角度這時需要你通過onInfo的what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去獲取角度讳苦,自己旋轉(zhuǎn)畫面》郧或者開啟硬解硬解碼医吊,不過硬解碼容易造成黑屏無聲(硬件兼容問題),下面是設(shè)置硬解碼相關(guān)的代碼
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", 1);
13.SeekTo設(shè)置優(yōu)化
某些視頻在SeekTo的時候逮京,會跳回到拖動前的位置卿堂,這是因為視頻的關(guān)鍵幀的問題,通俗一點就是FFMPEG不兼容,視頻壓縮過于厲害草描,seek只支持關(guān)鍵幀览绿,出現(xiàn)這個情況就是原始的視頻文件中i 幀比較少
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
14. 解決m3u8文件拖動問題 比如:一個3個多少小時的音頻文件,開始播放幾秒中穗慕,然后拖動到2小時左右的時間饿敲,要loading 10分鐘
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "fastseek");//設(shè)置seekTo能夠快速seek到指定位置并播放
重要記錄,問題列表
1. 設(shè)置之后逛绵,高碼率m3u8的播放卡頓怀各,聲音畫面不同步,或者只有畫面术浪,沒有聲音瓢对,或者聲音畫面不同步
//某些視頻在SeekTo的時候,會跳回到拖動前的位置胰苏,這是因為視頻的關(guān)鍵幀的問題硕蛹,通俗一點就是FFMPEG不兼容,視頻壓縮過于厲害硕并,seek只支持關(guān)鍵幀法焰,出現(xiàn)這個情況就是原始的視頻文件中i 幀比較少
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
//播放前的探測Size,默認(rèn)是1M, 改小一點會出畫面更快
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 1024 * 10);
作者:GexYY
鏈接:http://www.reibang.com/p/843c86a9e9ad
來源:簡書
著作權(quán)歸作者所有倔毙。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)埃仪,非商業(yè)轉(zhuǎn)載請注明出處。