IJKPlayer問題集錦之不定時更新

 你們吼,不知名程序猿小郭同窗又冒泡啦,今天是主角是:業界知名,天朝最大異(tong)性交友平臺,BILIBILI開源的視頻播放器項目,基於FFMPEG的IJKPlayer<( ̄ˇ ̄)/···的問題集錦!好吧,相信剛剛脫離週末,工做兩天進入狀態的你們,沒有什麼心情扯蛋,由於···扯多了真的好痛Σ( ° °|||)︴,咱們仍是開始吧。

 
一、IJKPlayer 不像系統播放器會給你旋轉視頻角度,因此你須要經過onInfowhat == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去獲取角度,本身旋轉畫面;或者開啓硬解硬解碼,不過硬解碼容易形成黑屏無聲,諸位慎重啊O__O "…。javascript

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);複製代碼

 
二、 IJKPlayer 出現黑色有聲音沒圖像,看看你的視頻編碼是否是H264,pixel format是否存在,音頻編碼是否是AAC?默認IJKPlayer是不支持3pg(支持它幹啥(・-・*)?),不支持mepg4(好比這個庫RecordVideoDemo ),不支持AMR。因此若是你真的想要支持,那麼參考這個#1961,打開mpeg4支持,從新編ffmpeg,而後經過硬解碼播放mpeg4;或者經過系統的錄製VideoRecord;或者選另外的JAVACV錄製封裝FFmpegRecorderjava

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec_mpeg4", 1);複製代碼

 
三、 快進和慢放接口,只支持API23以上,23如下的支持,是須要本身配置ffmpeg支持avfilter,不過可能會出現聲音顫抖等問題,官方說不穩定,參考#1690git

Tryavfilter but the audio sounds shaking = =

For avfilter, only support software decoder.複製代碼

 
四、暫停的時候,退到後臺再回到前臺,畫面黑了?這時候我的處理方式是,能夠在暫停的時候,經過TextureView.getBitmap(point.x, point.y);獲取到暫停的畫面,用ImageView顯示它,在onSurfaceTextureUpdated的時候隱藏ImageView,來實現畫面的銜接。github

五、一些視頻返回碼ide

int MEDIA_INFO_VIDEO_RENDERING_START = 3;//視頻準備渲染
int MEDIA_INFO_BUFFERING_START = 701;//開始緩衝
int MEDIA_INFO_BUFFERING_END = 702;//緩衝結束
int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001;//視頻選擇信息
int MEDIA_ERROR_SERVER_DIED = 100;//視頻中斷,通常是視頻源異常或者不支持的視頻類型。
int MEDIA_ERROR_IJK_PLAYER = -10000,//通常是視頻源有問題或者數據格式不支持,好比音頻不是AAC之類的
int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200;//數據錯誤沒有有效的回收複製代碼

六、某些視頻在SeekTo的時候,會跳回到拖動前的位置,這是由於視頻的關鍵幀的問題,通俗一點就是FFMPEG不兼容,視頻壓縮過於厲害,seek只支持關鍵幀,出現這個狀況就是原始的視頻文件中i 幀比較少,播放器會在拖動的位置找最近的關鍵幀,目前麼,IJKPlayer無解。編碼

七、下載速度能夠經過IjkMediaPlayer的getTcpSpeed獲取。spa

八、高分辨率開啓硬解碼,不支持的話會自動切換到軟解,就算開啓mediacodec,若是設備不支持,顯示的解碼器也是avcodec軟解。code

九、ijkMediaPlayer.setOption可配置的對應頭文件參考:ff_ffplay_optionsorm

十、緩衝進度條不到100,官方表示我就不保證都100,因此通常我都是:cdn

//95這個數值可能不許確,有些時候可能還須要低一些
if (secProgress > 95) secProgress = 100;複製代碼

十一、上面一、二、6的問題,在IJK封裝的EXOPlayer和MediaPlayer都不會有問題,兼容上確實強過IJKPlayer,可是它們在細節上,卻沒有IJK處理的好,如EXOPlayer:退到後再回到前臺、切換渲染控件的黑屏一段時間問題,除了用seekto以外目前沒發現其餘辦法,這樣的體驗讓我最後仍是選擇IJKPlayer。

總的來講,兼容上仍是谷歌的強,可是細節上仍是IJKPlayer處理的好,一個是播放器兼容視頻,一個是視頻兼容播放器,看我的喜愛吧︿( ̄︶ ̄)︿!

相關文章
相關標籤/搜索