[解決済み] AVPlayerオブジェクトが再生可能な状態になったかどうかを確認する
質問
私は
MP3
ファイルに渡された
UIView
に渡されます。
UIView
(に格納されている)。
NSURL *fileURL
変数に格納されています)。
を初期化しているのですが
AVPlayer
を使っています。
player = [AVPlayer playerWithURL:fileURL];
NSLog(@"Player created:%d",player.status);
は
NSLog
は印刷します。
Player created:0,
と表示され、まだ再生する準備ができていないことを意味すると思いました。
再生ボタンをクリックすると
UIButton
をクリックすると、実行されるコードは次のようになります。
-(IBAction)playButtonClicked
{
NSLog(@"Clicked Play. MP3:%@",[fileURL absoluteString]);
if(([player status] == AVPlayerStatusReadyToPlay) && !isPlaying)
// if(!isPlaying)
{
[player play];
NSLog(@"Playing:%@ with %d",[fileURL absoluteString], player.status);
isPlaying = YES;
}
else if(isPlaying)
{
[player pause];
NSLog(@"Pausing:%@",[fileURL absoluteString]);
isPlaying = NO;
}
else {
NSLog(@"Error in player??");
}
}
これを実行すると、いつも
Error in player??
と表示されます。
しかし、もし私が
if
をチェックする条件を
AVPlayer
が再生可能かどうかをチェックするもので、単純な
if(!isPlaying)
をクリックすると、音楽が再生されます。
UIButton
.
コンソールログは
Clicked Play. MP3:http://www.nimh.nih.gov/audio/neurogenesis.mp3
Playing:http://www.nimh.nih.gov/audio/neurogenesis.mp3 **with 0**
Clicked Play. MP3:http://www.nimh.nih.gov/audio/neurogenesis.mp3
Pausing:http://www.nimh.nih.gov/audio/neurogenesis.mp3
Clicked Play. MP3:http://www.nimh.nih.gov/audio/neurogenesis.mp3
2011-03-23 11:06:43.674 Podcasts[2050:207] Playing:http://www.nimh.nih.gov/audio/neurogenesis.mp3 **with 1**
なるほど、SECOND TIMEは
player.status
は 1 を保持しているようで、これは推測ですが
AVPlayerReadyToPlay
.
最初に再生ボタンをクリックしたときに、再生が正しく行われるようにするには、どうしたらよいでしょうか。
UIButton
?
(つまり、どうすれば
AVPlayer
が単に作成されただけでなく、再生可能であることを確認するにはどうしたらよいでしょうか?)
どのように解決するのですか?
リモートファイルを再生しています。が表示されるまでに時間がかかることがあります。
AVPlayer
が十分なデータをバッファリングし、ファイルを再生できるようになるまでに時間がかかることがあります (
AV Foundation プログラミングガイド
)
しかし、再生ボタンをタップする前に、プレーヤーの準備が整うのを待つ必要はないようです。このボタンを無効にして、プレイヤーの準備ができたときだけ有効にするのがいいと思います。
KVOを使用することで、プレーヤーの状態変化を通知することが可能です。
playButton.enabled = NO;
player = [AVPlayer playerWithURL:fileURL];
[player addObserver:self forKeyPath:@"status" options:0 context:nil];
このメソッドはステータスが変更されたときに呼び出されます。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if (object == player && [keyPath isEqualToString:@"status"]) {
if (player.status == AVPlayerStatusReadyToPlay) {
playButton.enabled = YES;
} else if (player.status == AVPlayerStatusFailed) {
// something went wrong. player.error should contain some information
}
}
}
関連
-
[解決済み] Objective-CでENUMを定義して使用するにはどうすればよいですか?
-
[解決済み] CGFloatとfloatを使うことの違いは何ですか?
-
[解決済み] .xibファイルと.storyboardの違いは何ですか?
-
[解決済み] エラー : サービスは無効です
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] UIImageのアスペクト比と幅を維持したリサイズ
-
[解決済み] Objective-C用JSONパーサーの比較(JSON Framework、YAJL、TouchJSON、etc.)
-
[解決済み] テーブルビューの行をプログラムで選択する
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?
-
[解決済み] iOS: HTTP POST リクエストを実行するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Cocoapodsの使用時にXcodeの警告を無視する
-
[解決済み] UINavigationControllerに右ボタンを追加する方法は?
-
[解決済み] iOS UITableViewのHeaderView(セクションヘッダーではない)を追加する
-
[解決済み] インスタンスからクラス名を取得する
-
[解決済み] UISearchDisplayController/UISearchBarでNSFetchedResultsController(CoreData)をフィルタリングする方法
-
[解決済み] 再署名 IPA (iPhone)
-
[解決済み] iOSアプリでターゲットのバージョン/ビルド番号をプログラム的に表示するには?
-
[解決済み] モバイルアプリにおけるOAuthの秘密
-
[解決済み] iPhone 5 CSSメディアクエリ
-
[解決済み] 現在のメソッド呼び出しのスレッド ID を取得する