iOS AVPlayer 播放/暂停按钮问题

13

我正在使用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"。

有什么建议吗?

2个回答

38

AVPlayer没有isPlaying属性。使用rate属性(0.0表示停止,1.0表示正在播放)。

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

你可以在这里查看AVPlayer类的参考文档


有些人说,即使在飞行模式下暂停,它仍然会显示为1.0。 - openfrog
3
将float和1.0进行比较可能不是一个好主意。也许可以改为__if (radiosound.rate > 0.99)__? - SoftDesigner
2
@SoftDesigner 说得好,但据我所知,在IEEE-754浮点数中,0.0和1.0都可以精确表示。 - j b
1
你可以使用 AVPlayer 的 timeControlStatus 属性。 player.timeControlStatus == .paused player.timeControlStatus == .playing - Niraj

5

经过一些研究,我发现当没有网络连接时,AVPlayer在接收到-play消息后仍然将速率设置为1.0。

所以,我还检查了当前项目并修改了我的方法:

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

请分享您的意见,如果您认为这种方法存在问题。

2
检查currentItem有什么意义?暂停时它不应该是nil的。只是因为你暂停了播放器,项目并不会消失。 - openfrog

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