ios/IJKMediaDemo/IJKMediaDemo/IJKMoviePlayerViewController.m 此处将当前的url加入到history中, 并且调用[[IJKVideoViewController alloc] initWithURL:url]对IJKVideoViewController的url赋值再依次进行1. viewDidLoad2. viewWillAppear@implementation IJKVideoViewController+ (void)presentFromViewController:(UIViewController *)viewController withTitle:(NSString *)title URL:(NSURL *)url completion:(void (^)())co\\mpletion { IJKDemoHistoryItem *historyItem = [[IJKDemoHistoryItem alloc] init]; historyItem.title = title; historyItem.url = url; [[IJKDemoHistory instance] add:historyItem]; [viewController presentViewController:[[IJKVideoViewController alloc] initWithURL:url] animated:YES completion:completion];}
IJKDemoInputURLViewController - onClickPlayButton
ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m此处先判断是否是文件路径, 然后最主要调用 [self initWithContentURLString:aUrlString withOptions:options];@implementation IJKFFMoviePlayerController - (id)initWithContentURL:(NSURL *)aUrl withOptions:(IJKFFOptions *)options{ if (aUrl == nil) return nil; // Detect if URL is file path and return proper string for it NSString *aUrlString = [aUrl isFileURL] ? [aUrl path] : [aUrl absoluteString]; return [self initWithContentURLString:aUrlString withOptions:options];}
ios/IJKMediaDemo/IJKMediaDemo/IJKMoviePlayerViewController.m 此处调用:/* Register observers for the various movie object notifications. */-(void)installMovieNotificationObservers{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChange:) name:IJKMPMoviePlayerLoadStateDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:IJKMPMoviePlayerPlaybackDidFinishNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaIsPreparedToPlayDidChange:) name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification object:_player]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackStateDidChange:) name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:_player];}
[IJKVideoViewController presentViewController:[[IJKVideoViewController alloc] initWithURL:url animated:YES completion:completion]
ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/ijkplayer_ios.mIjkMediaPlayer *ijkmp_ios_create(int (*msg_loop)(void*)) // msg_loop = media_player_msg_loop here{ IjkMediaPlayer *mp = ijkmp_create(msg_loop); if (!mp) goto fail; mp-ffplayer-vout = SDL_VoutIos_CreateForGLES2(); if (!mp-ffplayer-vout)\tgoto fail; mp-ffplayer-pipeline = ffpipeline_create_from_ios(mp-ffplayer); if (!mp-ffplayer-pipeline)\tgoto fail; return mp;fail: ijkmp_dec_ref_p(&mp); return NULL;}
ios/IJKMediaDemo/IJKMediaDemo/IJKMoviePlayerViewController.m、此处将IJKVideoViewController instance的url赋值@implementation IJKVideoViewController- (instancetype)initWithURL:(NSURL *)url { self = [self initWithNibName:@\"IJKMoviePlayerViewController\" bundle:nil]; if (self) { self.url = url; } return self;}
ios/ffmpeg-armv7/libavformat/aviobuf.cint avio_closep(AVOIContext **s){ int ret = avio_close(*s); *s = NULL; return ret;}
[IJKVideoViewController presentFromViewController:self withTitle:[NSString stringWithFormat:@\