在对ijkplayer进行使用调试的时候(使用FFMoviePlayer),我发现输出栏中有:
===== options =====
player-opts : start-on-prepared = 1
player-opts : overlay-format = fcc-i420
player-opts : max-fps = 60
player-opts : framedrop = 0
player-opts : videotoolbox-max-frame-width = 960
player-opts : videotoolbox = 1
player-opts : video-pictq-size = 3
format-opts : ijkinject-opaque = 140449007406288
format-opts : user-agent = ijkplayer
format-opts : auto_convert = 0
format-opts : timeout = 30000000
format-opts : reconnect = 1
format-opts : safe = 0
codec-opts : skip_frame = 0
codec-opts : skip_loop_filter = 0
===================
这就是当前player的一些选项,那么我们再看看ffoptions中包含的东西:
typedef enum IJKFFOptionCategory {
kIJKFFOptionCategoryFormat = 1,
kIJKFFOptionCategoryCodec = 2,
kIJKFFOptionCategorySws = 3,
kIJKFFOptionCategoryPlayer = 4,
} IJKFFOptionCategory;
这里的category就是对应上面的option的,
那么我们怎么改变这些参数呢,我们继续往下看FFoptions:
我们可以看到,作者提供了这样的设置接口给我们
- (void)setOptionValue:(NSString *)value
forKey:(NSString *)key
ofCategory:(IJKFFOptionCategory)category;
- (void)setOptionIntValue:(int64_t)value
forKey:(NSString *)key
ofCategory:(IJKFFOptionCategory)category;
那么根据这个我们就可以在初始化播放器时对options进行调整:
比如这样:
“`
IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setOptionIntValue:IJK_AVDISCARD_DEFAULT forKey:@”skip_frame” ofCategory:kIJKFFOptionCategoryCodec];
[options setOptionIntValue:IJK_AVDISCARD_DEFAULT forKey:@”skip_loop_filter” ofCategory:kIJKFFOptionCategoryCodec];
[options setOptionIntValue:1 forKey:@”videotoolbox” ofCategory:kIJKFFOptionCategoryPlayer];
[options setOptionIntValue:60 forKey:@”max-fps” ofCategory:kIJKFFOptionCategoryPlayer];
_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:options];
“`
这里要注意几个地方
Options初始化不能少[IJKFFOptions optionsByDefault],然后可能由于一些误解可能会使用错函数:setvalue forkey,然后忽略了category,导致设置不成功。
至于ffmpeg内部的options呢就只能自己去configure里面设置了