iOS 擴充套件Ijkplayer解碼方式

2021-08-01 08:46:39 字數 1622 閱讀 7795

ijkplayer框架中,解碼方式的選擇只有 智慧型硬解(硬解失敗,自動轉軟解)、軟解 兩種,功能上講,兩種方式已夠用,但偶爾也有需求讓擴充套件成使用者自選的三種解碼方式:智慧型、硬解、軟解。

1.在 ff_ffplay_options.h 檔案下修改「videotoolbox」的最大值,範圍由0 ~ 1,擴充套件到0 ~ 2:

0:軟解

1:智慧型硬解

2:硬解

,
[options setoptionintvalue:1

forkey:@"videotoolbox" ofcategory:kijkffoptioncategoryplayer];

在 ff_ffpipeline.h 中,修改結構體:ijkff_pipeline 新增布林值 * bool video_decoder_from_ios_videotoolbox_failed;*

3.修改 ffpipeline_ios.c 中 函式func_open_video_decoder 的解碼選擇邏輯:

static ijkff_pipenode *func_open_video_decoder(ijkff_pipeline *pipeline, ffplayer *ffp)  else

if (!node && ffp->videotoolbox ==

1) } else

if(!node)

ffp_notify_msg2(ffp, ffp_msg_video_decoder_open, opaque->is_videotoolbox_open);

return node;

}

4.在 ff_ffplay.c 新增硬解失敗訊息處理,並阻止後續程序的繼續操作:
if(ffp->pipeline->video_decoder_from_ios_videotoolbox_failed)
上段**建議新增在下面**的後面:

if (is->video_stream < 0 && is->audio_stream < 0)
5. goto fail 之後,它會通過 ffp_notify_msg2(ffp, ffp_msg_error, last_error); 將錯誤訊息傳送出去,在 ijkffmovieplayercontroller.m 中的 - (void)postevent: (ijkffmovieplayermessage )msg* 方法中將其轉化成通知
[[nsnotificationcenter defaultcenter]

postnotificationname

:ijkmpmovieplayerplaybackdidfinishnotification

object

:self

userinfo:@];

6.在工程中接收通知:
-(void)installmovienotificationobservers 

- (void)movieplaybackdidfinish:(nsnotification*)notification

break;

default:

break;

}}

iOS專案中整合ijkplayer框架

1 首先需要配置編譯環境,需要安裝homebrew,git,yasm 需先安裝ruby環境 ruby e curl fssl brew install git brew install yasm 2 開始編譯ijkplayer 本質上是對ffmpeg的編譯 cd ijkplayer master i...

iOS開發整合ijkplayer遇到的問題整理

本文參考了ios直播之ijkplayer的整合與簡單使用。1.首先環境需要配置git和yasm。兩者都可以用homebrew安裝。git一般都有,但是yasm由於今年的一些不可描述的原因可能會遇到一些問題。安裝yasm的時候會提示沒有許可權,比如 error fetching usr local h...

ios 分享擴充套件

1,建立分享擴充套件 file new target 2,設定分享的時候必須要指定 乙個擴充套件規則 讀取 group 中的資料就可以使用 group.來獲取資料 nsfilemanager filemanager nsfilemanager defaultmanager 簡單的理解就是 擴充套件 ...