objective c - Get link to media from AVFullScreenViewController iOS 8 -


i'am trying links video when begin play (for example youtube video).

first catch when video begin play

[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(videostarted:) name:@"uiwindowdidbecomevisiblenotification" object:nil]; 

then delay try link

-(void)videostarted:(nsnotification *)notification {     nslog(@"notification dic = %@", [notification userinfo]);     [self performselector:@selector(detectmodal) withobject:nil afterdelay:2.5f]; }  -(void)detectmodal {     cuviewcontroller *controller = (cuviewcontroller *)[appdelegate.window rootviewcontroller].presentedviewcontroller;     nslog(@"presented modal = %@", [appdelegate.window rootviewcontroller].presentedviewcontroller);     if(controller && [controller respondstoselector:@selector(item)])     {         id currentitem = [controller item];         if(currentitem && [currentitem respondstoselector:@selector(asset)])         {             avurlasset *asset = (avurlasset *)[currentitem asset];             if([asset respondstoselector:@selector(url)] && asset.url)                 [self newlinkdetected:[[asset url] absolutestring]];             nslog(@"asset find = %@", asset);         }     }     else     {         (uiwindow *window in [uiapplication sharedapplication].windows) {             if ([window.rootviewcontroller.presentedviewcontroller iskindofclass:nsclassfromstring(@"avfullscreenviewcontroller")])             {                 controller = (cuviewcontroller *)window.rootviewcontroller.presentedviewcontroller;                 for(int = 0; < [controller.view.subviews count]; i++)                 {                     uiview *topview = [controller.view.subviews objectatindex:i];                     nslog(@"top view = %@", topview);                     for(int j = 0; j < [topview.subviews count]; j++)                     {                         uiview *subview = [topview.subviews objectatindex:j];                         nslog(@"sub view = %@", subview);                         (int k = 0; k < [subview.subviews count]; k++)                         {                             cuplayerview *subsubview = (cuplayerview *)[subview.subviews objectatindex:k];                             nslog(@"sub sub view = %@ class = %@", subsubview, nsstringfromclass([subsubview class]));                             if([nsstringfromclass([subsubview class]) isequaltostring:@"avvideolayerview"])                             {                                 nslog(@"player view controller = %@", subsubview.playercontroller);                                 cuplayercontroller *pcontroller = subsubview.playercontroller;                                 nslog(@"item = %@", [pcontroller player]);                                 cuplayercontroller *proxyplayer = pcontroller.playercontrollerproxy;                                 if(proxyplayer)                                 {                                     avplayer *player = [proxyplayer player];                                     nslog(@"find player = %@ chapters = %@", player, proxyplayer.contentchapters);                                     break;                                 }                             }                         }                     }                 }             }         }     } } 

cuviewcontroller, cuplayerview, cuplayercontroller - fake classes it's , looks this

@interface cuplayercontroller : uiviewcontroller  @property(nonatomic, retain) id playercontrollerproxy; @property(nonatomic, retain) id player; @property(nonatomic, retain) id item;  - (id)contentchapters;  @end 

everything okay until line

nslog(@"find player = %@ chapters = %@", player, proxyplayer.contentchapters); 

player nil. maybe there more simple way link media?

first off i'd focus on avplayer plays avplayeritem. avplayeritem object carries reference avasset object , presentation settings asset. when use playerwithurl: method of avplayer automatically creates avplayeritem backed asset subclass of avasset named avurlasset. avurlasset has url property. if use can nsurl of playing item. here's example function of getting url:

-(nsurl *)urlofcurrentlyplayinginplayer:(avplayer *)player{     // current asset     avasset *currentplayerasset = player.currentitem.asset;     // make sure current asset avurlasset     if (![currentplayerasset iskindofclass:avurlasset.class]) return nil;     // return nsurl     return [(avurlasset *)currentplayerasset url]; } 

i think it's matter of how fit thing around code. hope helps.


Comments