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 簡單的理解就是 擴充套件 ...