Saturday, April 20, 2013

AVPlayerが働かないときは

以下のような簡単なAVPlayerで音楽を流したいと思ったのになぜだかうまく行かなかったときの解決策

    NSURL *url = [[NSURL alloc]initWithString:@"http://localhost/social-alarm1/musics/sampleMusic.mp3"];
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
    [player play];

*AVFoundation/AVFoundation.hは.hファイルで読み込みをしています。

これをこうすると僕の場合は解決しました。
.mファイル

@interface ViewController () {
    AVPlayer *player;
}
@end

@implementation ViewController

- (void)viewDidLoad {/*省略。何もいじってません*/}
- (void)didReceiveMemoryWarning {/*省略。何もいじってません*/}

- (IBAction)startMusic:(id)sender {
    NSURL *url = [[NSURL alloc]initWithString:@"http://localhost/social-alarm1/musics/sampleMusic.mp3"];
    player = [[AVPlayer alloc]initWithURL:url];
    [player play];
}
@end
言葉で書くとするなら、「AVPlayerのインスタンスを.mファイルの最初のinterfaceで書くとなぜかうまくいく」ですね

2 comments:

  1. ARCがplayerインスタンスを開放してしまうからが原因ですね。下のはメンバ変数にしてスコープ(playerインスタンスの生存範囲)が変わったので大丈夫になってます。

    ReplyDelete
  2. 斉藤さん、コメントありがとうございます!
    また、返信遅くなってしまって申し訳ありません。完全に僕の過失です。

    なるほど、そうなのですね。僕はxcode4から始めたのでARCはそこまで気にしてなかったのですが、それが今回は仇となったようですね。

    初めてのコメントありがとうございます!

    ReplyDelete