Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone MPMoviePlayerViewController不播放视频或显示控件_Iphone_Ios_Objective C_Video_Mpmovieplayercontroller - Fatal编程技术网

Iphone MPMoviePlayerViewController不播放视频或显示控件

Iphone MPMoviePlayerViewController不播放视频或显示控件,iphone,ios,objective-c,video,mpmovieplayercontroller,Iphone,Ios,Objective C,Video,Mpmovieplayercontroller,这是我的代码,应该播放嵌入在子视图中的视频,但它只显示没有控件的静态图像 - (void)displayVideo:(NSURL *)videoURL { if (self.mediaPlayer) { [self.mediaPlayer.view removeFromSuperview]; self.mediaPlayer = nil; } self.mediaPlayer = [[MPMoviePlayerViewController

这是我的代码,应该播放嵌入在子视图中的视频,但它只显示没有控件的静态图像

- (void)displayVideo:(NSURL *)videoURL
{
    if (self.mediaPlayer) {
        [self.mediaPlayer.view removeFromSuperview];
        self.mediaPlayer = nil;
    }

    self.mediaPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
    [self.mediaPlayer.moviePlayer prepareToPlay];
    self.mediaPlayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
    self.mediaPlayer.view.frame = CGRectMake(0, 0, self.mediaView.bounds.size.width, self.mediaView.bounds.size.height);
    [self.mediaView addSubview:self.mediaPlayer.view];
    [self.mediaPlayer.moviePlayer play];
}
我还尝试直接加载媒体播放器,其中mediaPlayer是MPMoviePlayerController,而不是mpmovieplayervicewcontroller,但在只有黑色视图的情况下,加载更少

    self.mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
    [self.mediaPlayer prepareToPlay];
    self.mediaPlayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
    self.mediaPlayer.view.frame = CGRectMake(0, 0, self.mediaView.bounds.size.width, self.mediaView.bounds.size.height);
    [self.mediaView addSubview:self.mediaPlayer.view];
    [self.mediaPlayer play];

谢谢您的帮助。

第一个代码完全错误。使用MPMoviePlayerViewController的唯一方法是作为显示视图控制器(
presentViewController:…
);你不能抓住它的观点,试图把它塞进你自己的界面

第二种可能性要大得多。因此,这里有一些事情需要考虑:

  • videoURL
    有效吗?你怎么知道的?不,说真的。再想想格式,因为并非所有视频格式都可以在iOS下播放

  • self.mediaPlayer
    是否保留电影播放器控制器?再次,仔细观察;这是至关重要的。它必须具有
    strong
    retain
    策略

  • 您的界面中是否有其他媒体播放器控制器视图?我注意到,在第二个代码中,您忘记删除前一个代码。这是至关重要的!这种观点只能有一种

(顺便说一下,不需要要求
MPMovieControlStyleEmbedded
;这是此配置中的默认设置。)

最后,与工作代码进行比较可能会有所帮助。我书中的代码确实有效:

通过下载此示例,您可以证明:


首先检查您的视频URL是否有效?iOS中的视频技术支持使用.mov、.mp4、.m4v和.3gp文件扩展名并使用以下压缩标准播放电影文件:

1) H.264视频,高达1.5 Mbps,640 x 480像素,每秒30帧,低复杂度版本的H.264基线配置文件,AAC-LC音频高达160 Kbps,48 kHz,立体声音频为.m4v、.mp4和.mov文件格式

 -(void) viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];

     player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:strSelectedVideoUrl]];
     player.scalingMode = MPMovieScalingModeAspectFit;
     player.movieSourceType = MPMovieSourceTypeFile;
       player.view.frame = CGRectMake(0, 45, 320, 400);
       player.shouldAutoplay = YES;
     [player prepareToPlay];
     [self.view addSubview:player.view];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];

     [player play];
 }
 - (void) movieFinishedCallback:(NSNotification*) aNotification {
     MPMoviePlayerController *player1 = [aNotification object];
     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player1];
     [player stop];
     [player1.view removeFromSuperview];
     //[player1 release];
     player1 = nil;
     [self.navigationController popViewControllerAnimated:YES];
 }
2) H.264视频,高达768 Kbps,320 x 240像素,每秒30帧,基线配置文件高达1.3级,AAC-LC音频高达160 Kbps,48 kHz,立体声音频为.m4v、.mp4和.mov文件格式

 -(void) viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];

     player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:strSelectedVideoUrl]];
     player.scalingMode = MPMovieScalingModeAspectFit;
     player.movieSourceType = MPMovieSourceTypeFile;
       player.view.frame = CGRectMake(0, 45, 320, 400);
       player.shouldAutoplay = YES;
     [player prepareToPlay];
     [self.view addSubview:player.view];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];

     [player play];
 }
 - (void) movieFinishedCallback:(NSNotification*) aNotification {
     MPMoviePlayerController *player1 = [aNotification object];
     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player1];
     [player stop];
     [player1.view removeFromSuperview];
     //[player1 release];
     player1 = nil;
     [self.navigationController popViewControllerAnimated:YES];
 }
3) MPEG-4视频,高达2.5 Mbps,640 x 480像素,每秒30帧,简单配置文件,AAC-LC音频高达160 Kbps,48 kHz,立体声音频为.m4v、.mp4和.mov文件格式

 -(void) viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];

     player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:strSelectedVideoUrl]];
     player.scalingMode = MPMovieScalingModeAspectFit;
     player.movieSourceType = MPMovieSourceTypeFile;
       player.view.frame = CGRectMake(0, 45, 320, 400);
       player.shouldAutoplay = YES;
     [player prepareToPlay];
     [self.view addSubview:player.view];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];

     [player play];
 }
 - (void) movieFinishedCallback:(NSNotification*) aNotification {
     MPMoviePlayerController *player1 = [aNotification object];
     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player1];
     [player stop];
     [player1.view removeFromSuperview];
     //[player1 release];
     player1 = nil;
     [self.navigationController popViewControllerAnimated:YES];
 }

试试这个,它对我很有效

NSURL *movieURL = [NSURL URLWithString:@"http://........"];

// Initialize a movie player object with the specified URL

 self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;


    [self.moviePlayer.view setFrame:self.view.bounds];

    [self.view addSubview:self.moviePlayer.view];

    [self.moviePlayer play];

结果如何?