It doesn't work because the completion block isn't called on the main thread. You can solve by force the execution of your code on the main thread:
[HCYoutubeParser h264videosWithYoutubeURL:[NSURL URLWithString:entry.url]
completeBlock:^(NSDictionary *videoDictionary, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
NSArray *urls = [videoDictionary allValues];
NSURL *url = [NSURL URLWithString:[urls objectAtIndex:0]];
[mp.moviePlayer setAllowsAirPlay:YES];
[mp.moviePlayer setContentURL:url];
[mp.moviePlayer prepareToPlay];
[mp.moviePlayer play];
[self presentMoviePlayerViewControllerAnimated:mp];
});
}];