2011-09-07 84 views
13

我使用AVPlayer使用下面的代碼來播放來自互聯網的實時流:的iOS AVPlayer播放/暫停按鈕問題

NSString *u = @"http://192.192.192.192:8036"; 
NSURL *url = [NSURL URLWithString:u]; 
radiosound = [[AVPlayer alloc] initWithURL:url]; 
    [radiosound play]; 

而且我有一個按鈕,播放:

[radiosound play]; 

和暫停:

[radiosound pause]; 

我的問題是,我只想使用一個按鈕播放/暫停,但是當我使用此代碼

if (radiosound.isPlaying) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

我的應用程序崩潰,因爲AVPlayer不識別「isPlaying」。

任何提示?

回答

37

AVPlayer沒有isPlaying屬性。使用rate屬性(0.0表示停止,1.0播放)。

if (radiosound.rate == 1.0) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

你可以看一下在AVPlayer類引用here

+0

有些人說即使暫停,在飛行模式下它仍然是1.0。 – openfrog

+2

將_float_與_1.0_進行比較可能不是一個好主意。也許__if(radiosound.rate> 0.99)__? – SoftDesigner

+0

@SoftDesigner的好處,但AFAICT 0.0和1.0都可以在[IEEE-754浮點](http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point_representation.html)中精確表示。 –

5

經過一番研究,我發現當沒有網絡連接時,在收到-play消息後,AVPlayer仍然將速率設置爲1.0。

因此,我也檢查了CURRENTITEM和改進我的方法,像:

-(BOOL)isPlaying 
{ 
    if (self.player.currentItem && self.player.rate != 0) 
    { 
     return YES; 
    } 
    return NO; 
} 

請分享你的觀點,如果你認爲什麼是錯的這種方法。

+2

檢查currentItem有什麼意義?暫停時,不應該是零。該項目不會因爲您暫停播放器而消失。 – openfrog