一、初始化
- (id)initWithContentURLString:(NSString *)aUrlString
withOptions:(IJKFFOptions *)options
{
if (aUrlString == nil)
return nil;
self = [super init];
if (self) {
ijkmp_global_init();
ijkmp_global_set_inject_callback(ijkff_inject_callback);
[IJKFFMoviePlayerController checkIfFFmpegVersionMatch:NO];
if (options == nil)
options = [IJKFFOptions optionsByDefault];
// IJKFFIOStatRegister(IJKFFIOStatDebugCallback);
// IJKFFIOStatCompleteRegister(IJKFFIOStatCompleteDebugCallback);
// init fields
_scalingMode = IJKMPMovieScalingModeAspectFit;
_shouldAutoplay = YES;
memset(&_asyncStat, 0, sizeof(_asyncStat));
memset(&_cacheStat, 0, sizeof(_cacheStat));
_monitor = [[IJKFFMonitor alloc] init];
// init media resource
_urlString = aUrlString;
// init player
_mediaPlayer = ijkmp_ios_create(media_player_msg_loop);
_msgPool = [[IJKFFMoviePlayerMessagePool alloc] init];
IJKWeakHolder *weakHolder = [IJKWeakHolder new];
weakHolder.object = self;
ijkmp_set_weak_thiz(_mediaPlayer, (__bridge_retained void *) self);
ijkmp_set_inject_opaque(_mediaPlayer, (__bridge_retained void *) weakHolder);
ijkmp_set_ijkio_inject_opaque(_mediaPlayer, (__bridge_retained void *)weakHolder);
ijkmp_set_option_int(_mediaPlayer, IJKMP_OPT_CATEGORY_PLAYER, "start-on-prepared", _shouldAutoplay ? 1 : 0);
// init video sink
_glView = [[IJKSDLGLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_glView.shouldShowHudView = NO;
_view = _glView;
[_glView setHudValue:nil forKey:@"scheme"];
[_glView setHudValue:nil forKey:@"host"];
[_glView setHudValue:nil forKey:@"path"];
[_glView setHudValue:nil forKey:@"ip"];
[_glView setHudValue:nil forKey:@"tcp-info"];
[_glView setHudValue:nil forKey:@"http"];
[_glView setHudValue:nil forKey:@"tcp-spd"];
[_glView setHudValue:nil forKey:@"t-prepared"];
[_glView setHudValue:nil forKey:@"t-render"];
[_glView setHudValue:nil forKey:@"t-preroll"];
[_glView setHudValue:nil forKey:@"t-http-open"];
[_glView setHudValue:nil forKey:@"t-http-seek"];
self.shouldShowHudView = options.showHudView;
ijkmp_ios_set_glview(_mediaPlayer, _glView);
ijkmp_set_option(_mediaPlayer, IJKMP_OPT_CATEGORY_PLAYER, "overlay-format", "fcc-_es2");
#ifdef DEBUG
[IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_DEBUG];
#else
[IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_SILENT];
#endif
// init audio sink
[[IJKAudioKit sharedIn