web-dev-qa-db-ja.com

MPMoviePlayerControllerに黒い空の画面が表示される

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が使用できなくなります。ただし、次回同じローカルファイルを再生する場合は、問題なく再生されます。私はplayStatelocalStateMPMoviePlayerControllerについても確認しました。黒い空の画面の理由は何ですか?

25
Ritika

この問題は、デバイスiOSを5.0にアップデートした後に修正されたようです。
以前のバージョンのiOS SDKの問題のようです

0
Ritika

MPMoviePlayerControllerのインスタンスを、プロパティまたはインスタンス変数として保持する必要があります。保持しないと、ムービープレーヤーへの参照は失われます。

31

あなたは[itemMoviePlayerController prepareToPlay]; の前に [itemMoviePlayerController play];

Appleで全画面ビデオのみを表示するには、モーダルMPMoviePlayerViewControllerを提示するのが望ましい方法です(Hollanceが言ったように)。これを提示するには、次のようなものを使用する必要があります。

 moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
 [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
 [itemMoviePlayerController play];

これは Apple hereによって文書化されています

後でそれを閉じるためにMPMoviePlayerViewControllerへの参照を保持する必要があることをそこで読むことができます

[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController]

15
dulgan

これを入れて修正しました

@property (strong, nonatomic) MPMoviePlayerController *moviePlayer; 

私の.hファイルで、そしてすべての私のコードでself.moviePlayerを呼び出すとそれはうまくいきました!

13
mattblessed

代わりにMPMoviePlayerViewControllerを使用する必要があります。そこに「View」という単語があることに注意してください。

7
Hollance

これが役に立てば幸いです。この問題を私のプロジェクトで解決しました

 -(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");

}
3
Jerin4info24x7

同じことが私にも起こりました。結局、私は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];
}
2
cayeric

私もこれと同じ問題を抱えていて、頭がおかしくなりました。 work 1つのビューコントローラーでは問題なく(オーディオとビデオ)、別のコントローラーでは動作しません(オーディオのみの黒い画面)。最後に、私が行ったのは呼び出しの順序を変更することだけでした。ビューに追加する前に、ムービープレーヤーの構成が完了するまで待つだけでした。つまり、「play」を呼び出す直前の行で「addSubview」を呼び出しました。

2
ghostatron

これは、URLからファイルを再生するために使用しているコードです。

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];

それは私にとってはうまくいくようです。 2つのメモ:

  • 一部のシミュレーター(現在のiOS 5.0など)は映画の再生時にクラッシュしますが、実際のデバイスでは動作します
  • movieSourceTypeの部分を省略すると、映画が始まる前に黒い画面が約1秒間表示されます
1
talkol

完成したコールバックで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];

}
0
plop

また、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
0
Fostah

私は同じ問題を抱えていました、それを解決して、再生されているファイルの拡張子を.mpgから.mp4に変更しました。どうやらMPMoviePlayerControllerは正しい拡張子を期待していますが、ドキュメントからこれが要件であることは明らかではありません:

http://developer.Apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

サポートされている形式このクラスは、iOSでサポートされているすべてのムービーまたはオーディオファイルを再生します。これには、ストリーミングコンテンツと固定長ファイルの両方が含まれます。映画ファイルの場合、これは通常、拡張子が.mov、.mp4、.mpv、.3gpで、次のいずれかの圧縮標準を使用しているファイルを意味します。

0

私は同様の問題を抱えていました。再生後、空の画面が表示され、ビデオをもう一度再生できなくなります。さてここに私の仕事です。そうすれば再生ボタンは消えません。

[self.movieController stop]; 
[self.movieController prepareToPlay];
[self.movieController pause];
0