一个AVPlayerItem不能与多个AVPlayer实例相关联。

19
-(IBAction)play:(id)sender
{

    thumbImageView.alpha=0.0;

    NSString *stringvideo=[NSString stringWithFormat:@"http://streaming-service",[[NSUserDefaults standardUserDefaults]valueForKey:@"VideoIdselected"]];

    NSString *videoURLString = stringvideo;

       NSURL *url = nil;

  url = [NSURL URLWithString:videoURLString];





    self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url];




    if (self.moviePlayerController)
    {
        /* Save the movie object. */
          [self setMoviePlayerController:self.moviePlayerController];


        [self installMovieNotificationObservers];

        /* Specify the URL that points to the movie file. */
        [self.moviePlayerController setContentURL:url];


        [self.moviePlayerController setMovieSourceType:MPMovieSourceTypeStreaming]; // for streaming



        self.moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;

        // [self.videoPlayer setMovieSourceType:MPMovieSourceTypeStreaming];

      // self.moviePlayerController.shouldAutoplay = YES;

        [self.moviePlayerController.view setFrame: CGRectMake(0, 0, 320,160)];



        [self.moviePlayerController setFullscreen:NO animated:YES];

        [self.moviePlayerController view].backgroundColor = [UIColor lightGrayColor];

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

        [self.view bringSubviewToFront:self.moviePlayerController.view];
        [self.moviePlayerController prepareToPlay];
        //self.moviePlayerController.useApplicationAudioSession = NO;

        [self.moviePlayerController play];





    }

}

您好,我正在尝试在我的iPhone应用程序上流式传输视频。该代码可以播放本地文件,但是当用于从服务器上流式传输视频时,会崩溃并出现错误“未捕获的异常NSInvalidArgumentException,原因:一个AVPlayerItem不能与多个AVPlayer实例相关联”。此外,在浏览器中链接可以完全正常地流式传输视频,但是我无法在应用程序中播放视频。请帮忙。


“play”方法被运行了两次,可能吗? - LK__
更新:刚刚发现视频的编码出了问题...尝试流式传输一个示例链接,它正常工作。 - Andy Khatter
1
你还记得编码器出了什么问题吗?我们也遇到了同样的问题,但目前还没有解决。 - Pichirichi
看这个!这解决了我的问题。http://stackoverflow.com/a/14836810/390423 - Developer
5个回答

99

我遇到了同样的问题,尝试在设置SourceType后设置ContentURL,如下所示:

moviePlayerController_ = [[MPMoviePlayerViewController alloc] init];
moviePlayerController_.movieSourceType = MPMovieSourceTypeStreaming;
[moviePlayerController_.moviePlayer setContentURL:url];

Source: devforums.apple.com/message/467199


1
没错,我可以确认它解决了我的问题,谢谢! - Mostafa Berg

2

可能是由于MovieSourceType的问题;您正在播放本地文件,但使用了MPMovieSourceTypeStreaming;只需修改类型并重试即可。


1
如果您在尝试更新contentURL后遇到此错误,请注意这不是直接回答问题的方法。在解决问题之前,调用stop()方法可以解决该问题。
moviePlayerController.stop()
moviePlayerController.movieSourceType = .File
moviePlayerController.contentURL = newURL

1

我使用了moviePlayerController.movieSourceType = MPMovieSourceTypeUnknown,对我有用。你可以试一下。


1
首先,您需要告知玩家视频文件的源类型,然后设置内容;就像这样。
这里有两种类型的URL;如果URL是这样的,您需要编写此函数。
 NSString *aStr=@"http://www.my url like this.com/video/videos/review/Michale JACKSON  AUDIENCE Comment.mp4";   

aStr = [aStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

或者(第二个)
NSString *aStr=@"http://www.normal url.com/video.mp4"

// after add your url string to this url

NSURL *url=[NSURL URLWithString:aStr];
MPMoviePlayerViewController *MPlayer = [[MPMoviePlayerViewController alloc]init];
MPlayer.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[MPlayer.moviePlayer setContentURL:url];
[self presentMoviePlayerViewControllerAnimated:MPlayer];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接