4

オンライン音楽を再生する mpmovieplayercontroller とバックグラウンドで同じ音楽を再生する avaudiosession があります。ネットワークにアクセスせずに初めてアプリを起動すると、通常は「インターネット接続なし」と表示されます。インターネットに接続して再生しようとすると、エラーが表示されます

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'

私のコードはここにあります

static MPMoviePlayerController *player=nil;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
    {
        // Custom initialization

        [MainViewController  stopStreaming];

        player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://159.253.145.180:7104"]];
        player.movieSourceType = MPMovieSourceTypeStreaming;
        player.view.hidden = YES;
        [self.view addSubview:player.view];
        [player prepareToPlay];
        [player play];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryErr];
    [[AVAudioSession sharedInstance] setActive: YES error: &activationErr];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
    newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];

    Reachability* reachabile = [Reachability reachabilityWithHostName:@"www.apple.com"];
    NetworkStatus remoteHostStatus = [reachabile currentReachabilityStatus];

    if(remoteHostStatus == NotReachable) 
    {
        NSLog(@"not reachable");
        UIAlertView *notReachableAlert=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles: nil];
        notReachableAlert.delegate=self;
        [notReachableAlert show];
        [notReachableAlert release];
    }

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:player];

    MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:CGRectMake(22, 320, 200, 15)] autorelease];
    volumeView.center = CGPointMake(152,372);
    [volumeView sizeToFit];
    [self.view addSubview:volumeView];    // Do any additional setup after loading the view from its nib.
}

インターネットに接続した後、再生ボタンをクリックするとアプリがクラッシュするのですが、解決策はありますか?

4

4 に答える 4

8

私も同じ問題を抱えていました。私のために働いた解決策は、指示を削除することでした

player.movieSourceType = MPMovieSourceTypeStreaming;
于 2012-07-23T13:33:25.757 に答える
2

これは静的プレーヤーによるものだと思います。movieplayer のプロパティを使ってみる

使用する:

@property (nonatomic,retain) MPMoviePlayerController *player;

実装時:

@synthesize player = _player;

初期設定:

MPMoviePlayerController *plyr = [MPMoviePlayerController alloc] init];
self.player = plyr;
[plyr relaease];

あなたのコードで

[controller setContentURL:movieURL];
于 2012-05-02T12:14:38.203 に答える
1

これは、既存のプレーヤーが原因である可能性があると思います。

次のようなものを追加してみてください。

if (player != nil) {
    [player release];
    player = nil; //i prefer to do both, just to be sure.
}

後に置く

[MainViewController  stopStreaming];  

と前に

player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://159.253.145.180:7104"]];
于 2012-05-02T12:15:01.260 に答える
0

これが正しいかどうかはわかりませんが、リンクを確認した場合

MPMoviewPlayerControllerクラスリファレンス

これにはアップルのコードが含まれています:

MPMoviePlayerController *player =
        [[MPMoviePlayerController alloc] initWithContentURL: myURL];
[player prepareToPlay];
[player.view setFrame: myView.bounds];  // player's frame must match parent's
[myView addSubview: player.view];
// ...
[player play];

最初にprepareToPlayを実行してから、サブビューとしてビューに追加する必要があるかもしれません。

よくわかりませんが、これがお役に立てば幸いです。

于 2012-05-02T12:17:00.420 に答える