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
Post a Comment