3

SDK 3.1.3 では、MPMoviePlayer を使用してアプリで短いビデオを再生していましたが、問題はありませんでした。SDK 4 のコードを変更しましたが、ビデオが再生されません。黒い画面と音声だけが表示されます。Apple Dev Center には、最新の SDK 用のこのクラスのサンプル コードはありません。以下は私が使用しているコードです:

- (void)viewDidLoad {

    [super viewDidLoad];

        //videoPlayer is a MPMoviePlayerController object defined in the header file of the view controller

    if (videoPlayer == nil){
        NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"];
        if (videoPath == NULL){
            return; 
        }
        NSURL * videoURL = [NSURL fileURLWithPath:videoPath];

        videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
        videoPlayer.controlStyle = MPMovieControlStyleNone;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer];

        [videoPlayer play];
        [videoPlayer setFullscreen:YES];
        [self.view addSubview:videoPlayer.view];


    }

}

上記の結果、オーディオだけが黒い画面で再生されます。通知は、再生の最後に正しく呼び出されます。

上記が機能しない場合、次のように新しい MPMoviePlayerViewController クラスを使用してみました。

- (void)viewDidLoad {

    [super viewDidLoad];
    NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"];

    if (videoPath == NULL){
        return; 
    }
    NSURL * videoURL = [NSURL fileURLWithPath:videoPath];

        //movieController is an MPMoviePlayerViewController object defined in the header file of view controller

    movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer];

    [movieController.moviePlayer setFullscreen:YES];
    [movieController.moviePlayer play];
    [self presentMoviePlayerViewControllerAnimated:movieController];
}

同じ問題が解決しません。音声が聞こえ、再生の最後に通知が正常に呼び出されます。ただし、ビデオの代わりに黒い画面が表示されます。

同じビデオが通常のビデオ プレイリストの iPod Touch だけでなく、iTunes でも​​問題なく再生されるため、ビデオのエンコードに問題はありません。

誰かがこの問題で私を助けてくれますか?

前もって感謝します

4

1 に答える 1

3

問題が解決しました - 同様の問題で立ち往生している人のために、解決策はMPMoviePlayerController次のようにビューのフレームを明示的に作成することです:

私は行を変更しました:

[videoPlayer play];

[videoPlayer setFullscreen:YES];

[self.view addSubview:videoPlayer.view];

以下に:

[videoPlayer prepareToPlay];

[videoPlayer play];

[self.view addSubview:videoPlayer.view];

videoPlayer.view.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); //this is explicitly added and solves the problem
于 2010-07-04T06:50:24.837 に答える