IJKPlayer問題集錦之不定時更新

戀貓de小郭發表於2016-12-07

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

 
1、IJKPlayer 不像系統播放器會給你旋轉視訊角度,所以你需要通過onInfowhat == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去獲取角度,自己旋轉畫面;或者開啟硬解硬解碼,不過硬解碼容易造成黑屏無聲,諸位慎重啊O__O "…。

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

 
2、 IJKPlayer 出現黑色有聲音沒影象,看看你的視訊編碼是不是H264,pixel format是否存在,音訊編碼是不是AAC?預設IJKPlayer是不支援3pg(支援它幹啥(・-・*)?),不支援mepg4(比如這個庫RecordVideoDemo ),不支援AMR。所以如果你真的想要支援,那麼參考這個#1961,開啟mpeg4支援,重新編ffmpeg,然後通過硬解碼播放mpeg4;或者通過系統的錄製VideoRecord;或者選另外的JAVACV錄製封裝FFmpegRecorder

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

 
3、 快進和慢放介面,只支援API23以上,23以下的支援,是需要自己配置ffmpeg支援avfilter,不過可能會出現聲音顫抖等問題,官方說不穩定,參考#1690

Tryavfilter but the audio sounds shaking = =

For avfilter, only support software decoder.複製程式碼

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

5、一些視訊返回碼

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;//資料錯誤沒有有效的回收複製程式碼

6、某些視訊在SeekTo的時候,會跳回到拖動前的位置,這是因為視訊的關鍵幀的問題,通俗一點就是FFMPEG不相容,視訊壓縮過於厲害,seek只支援關鍵幀,出現這個情況就是原始的視訊檔案中i 幀比較少,播放器會在拖動的位置找最近的關鍵幀,目前麼,IJKPlayer無解。

7、下載速度可以通過IjkMediaPlayer的getTcpSpeed獲取。

8、高解析度開啟硬解碼,不支援的話會自動切換到軟解,就算開啟mediacodec,如果裝置不支援,顯示的解碼器也是avcodec軟解。

9、ijkMediaPlayer.setOption可配置的對應標頭檔案參考:ff_ffplay_options

10、緩衝進度條不到100,官方表示我就不保證都100,所以一般我都是:

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

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

總的來說,相容上還是谷歌的強,但是細節上還是IJKPlayer處理的好,一個是播放器相容視訊,一個是視訊相容播放器,看個人喜好吧︿( ̄︶ ̄)︿!

IJKPlayer問題集錦之不定時更新

相關文章