MPMoviePlayerController
を使用して、サーバーのURLに対してダウンロードしたApplication Documentフォルダー内のローカルファイルを再生します。
itemMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[self.view addSubview:itemMoviePlayerController.view];
itemMoviePlayerController.fullscreen = YES;
itemMoviePlayerController.movieSourceType = MPMovieSourceTypeFile;
itemMoviePlayerController.initialPlaybackTime = -1.0;
[itemMoviePlayerController play];
私が遊ぶとき.mov
ファイルをダウンロードした直後、黒い空の画面が表示され、アプリのUIが使用できなくなります。ただし、次回同じローカルファイルを再生する場合は、問題なく再生されます。私はplayState
とlocalState
をMPMoviePlayerController
についても確認しました。黒い空の画面の理由は何ですか?
この問題は、デバイスiOSを5.0にアップデートした後に修正されたようです。
以前のバージョンのiOS SDKの問題のようです
MPMoviePlayerControllerのインスタンスを、プロパティまたはインスタンス変数として保持する必要があります。保持しないと、ムービープレーヤーへの参照は失われます。
あなたは[itemMoviePlayerController prepareToPlay];
の前に [itemMoviePlayerController play];
Appleで全画面ビデオのみを表示するには、モーダルMPMoviePlayerViewController
を提示するのが望ましい方法です(Hollanceが言ったように)。これを提示するには、次のようなものを使用する必要があります。
moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
[self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
[itemMoviePlayerController play];
後でそれを閉じるためにMPMoviePlayerViewController
への参照を保持する必要があることをそこで読むことができます
[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController]
。
これを入れて修正しました
@property (strong, nonatomic) MPMoviePlayerController *moviePlayer;
私の.hファイルで、そしてすべての私のコードでself.moviePlayer
を呼び出すとそれはうまくいきました!
代わりにMPMoviePlayerViewControllerを使用する必要があります。そこに「View」という単語があることに注意してください。
これが役に立てば幸いです。この問題を私のプロジェクトで解決しました
-(void)startPlayingMovie
{
NSLog(@"startPlayingMovie");
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"Start_video" ofType:@"mov"]];
moviePlayer = [[MPMoviePlayerViewController alloc]
initWithContentURL:url];
moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer.moviePlayer];
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.moviePlayer.shouldAutoplay = YES;
[self presentMoviePlayerViewControllerAnimated:moviePlayer];
[moviePlayer.moviePlayer setFullscreen:YES animated:NO];
NSLog(@"endPlayingMovie");
}
同じことが私にも起こりました。結局、私はUIImagePicker
がまだ却下されていない間に映画を再生しようとしました。
私のUIImagePickerDelegate
では、最初にUIImagePicker
ポップアップを閉じてから、ViewController
を開いてMPMediaPlayerController
を管理する必要がありました。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoDict
{
//the first thing to do: dismiss the media picker
if ([ipPop isPopoverVisible])
{
[ipPop dismissPopoverAnimated:ANIMATION_SETTING];
}
myMediaPlayerViewController * playerVC = [[myMediaPlayerViewController alloc] initWithMediaDict:infoDict];
[self.navigationController pushViewController:playerVC animated:ANIMATION_SETTING];
}
私もこれと同じ問題を抱えていて、頭がおかしくなりました。 work 1つのビューコントローラーでは問題なく(オーディオとビデオ)、別のコントローラーでは動作しません(オーディオのみの黒い画面)。最後に、私が行ったのは呼び出しの順序を変更することだけでした。ビューに追加する前に、ムービープレーヤーの構成が完了するまで待つだけでした。つまり、「play」を呼び出す直前の行で「addSubview」を呼び出しました。
これは、URLからファイルを再生するために使用しているコードです。
MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];
それは私にとってはうまくいくようです。 2つのメモ:
movieSourceType
の部分を省略すると、映画が始まる前に黒い画面が約1秒間表示されます完成したコールバックでCGRectMake(0、0、0、0)を使用してそのようにする必要があります!
-(void)playMovieAtURL:(NSURL*)theURL
{
MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:theURL];
theMovie.scalingMode=MPMovieScalingModeAspectFill;
theMovie.view.frame = CGRectMake(2, 246, 317, 70);
[self.view addSubview:theMovie.view];
// Register for the playback finished notification.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];
// Movie playback is asynchronous, so this method returns immediately.
[theMovie play];
}
// When the movie is done,release the controller.
-(void)myMovieFinishedCallback:(NSNotification*)aNotification
{
MPMoviePlayerController* theMovie=[aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];
theMovie.view.frame = CGRectMake(0, 0, 0, 0);
// Release the movie instance created in playMovieAtURL
[theMovie release];
}
また、http URLを使用している場合は、プロジェクトのApp Transport Securityを無効にしてください*。plistファイル。また、画面が黒くなります。
次のコードを追加:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
ここ:
[INSERT CODE ABOVE HERE]
</dict>
</plist>
----- BOTTOM OF PLIST FILE
私は同じ問題を抱えていました、それを解決して、再生されているファイルの拡張子を.mpgから.mp4に変更しました。どうやらMPMoviePlayerControllerは正しい拡張子を期待していますが、ドキュメントからこれが要件であることは明らかではありません:
サポートされている形式このクラスは、iOSでサポートされているすべてのムービーまたはオーディオファイルを再生します。これには、ストリーミングコンテンツと固定長ファイルの両方が含まれます。映画ファイルの場合、これは通常、拡張子が.mov、.mp4、.mpv、.3gpで、次のいずれかの圧縮標準を使用しているファイルを意味します。
私は同様の問題を抱えていました。再生後、空の画面が表示され、ビデオをもう一度再生できなくなります。さてここに私の仕事です。そうすれば再生ボタンは消えません。
[self.movieController stop];
[self.movieController prepareToPlay];
[self.movieController pause];