У вас здесь очень серьезное замешательство. Вы не должны создавать и MPMoviePlayerViewController, и MPMoviePlayerController. Используйте один или другой. И эти строки не имеют смысла:
MPMoviePlayerController *player =
[[[MPMoviePlayerController alloc] init] autorelease];
player = [playerViewController moviePlayer];
Вы создаете MPMoviePlayerController и назначаете его игроку, но затем выбрасываете его, заменяя его существующим MPMoviePlayerViewController's moviePlayer.
Давайте отступим на десять ярдов и пунт. Самый простой способ воспроизведения фильма / потокового звука / чего угодно - использовать MPMoviePlayerViewController. Это контроллер представления, поэтому просто поместите его туда, где вы будете использовать UIViewController. Проще всего показать это модально:
NSURL* m = // whatever;
MPMoviePlayerViewController* mpvc =
[[MPMoviePlayerViewController alloc] initWithContentURL: m];
[self presentModalViewController:mpvc animated:YES];
[mpvc release];
Это создает MPMoviePlayerController и его вид и представляет весь шебанг для вас только в полноэкранном режиме. Просто и легко. Модальное представление даже закрывается, когда пользователь нажимает «Готово».
Использование MPMoviePlayerController более сложное. Это НЕ UIViewController. Но это имеет вид. Ваша задача, если вы хотите, чтобы пользователь что-то видел, состоит в том, чтобы захватить это представление, дать ему рамку и вставить его в ваш интерфейс:
NSURL* m = // whatever;
MPMoviePlayerController* mp =
[[MPMoviePlayerController alloc] initWithContentURL:m];
self.mpc = mp; // property with retain policy
[mp release];
self.mpc.view.frame = CGRectMake(10, 10, 300, 230);
[self.view addSubview:self.mpc.view];
Это делает просмотр фильма частью вашего интерфейса. Если фильм является настоящим фильмом, он оставляет пользователю право переключаться в полноэкранный режим или нет. Если фильм - просто звук, у пользователя нет способа сделать это; есть только кнопка остановки / перехода и ползунок.
В любом случае где-то в истории есть MPMoviePlayerController, так что вы можете зарегистрироваться для его уведомлений, указать, чтобы он проигрывал / останавливал и т. Д. Но не путайте и не смешивайте два подхода. Это, вероятно, причина всех ваших проблем здесь.