gpt4 book ai didi

iphone - 如何从AVPlayer获取音频流状态的通知?

转载 作者:行者123 更新时间:2023-12-02 22:47:39 35 4
gpt4 key购买 nike

我正在使用AVPlayer来传输一些实时HTTP音频,而不是不支持不支持实时HTTP音频流的AVAudioPlayer,问题是,如何获取当前播放的状态?例如:

点击播放按钮-> [正在加载]-> [正在播放]
点击暂停按钮-> [已暂停]

我需要在加载时显示一个微调框,在播放时显示一个暂停按钮,在暂停时显示一个播放按钮,我知道我可以观察到AVPlayer的“状态”和“速率”属性:

率:
当前的播放速率。 0.0表示“已停止”,1.0表示“以当前项目的自然速率播放”。

状态:
指示是否可以使用播放器进行播放。

AVPlayerStatusUnknown,
AVPlayerStatusReadyToPlay,
AVPlayerStatusFailed

因此无法指示音频为“LOADING”,并且在状态更改为AVPlayerStatusReadyToPlay之后,仍需要一些时间来播放音频(可能是因为它是实时音频)。

但是无论如何,如何获得当前播放的正确状态?我知道Matt提供了一个AudioStream,但它不支持HTTP Live音频。

非常感谢!

最佳答案

我用了

    [self.mPlayerItem addObserver:self 
forKeyPath:kStatusKey
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
context:AVPlayerDemoPlaybackViewControllerStatusObservationContext];

监视状态键(“状态”)。然后我创建了播放器
[self setPlayer:[AVPlayer playerWithPlayerItem:self.mPlayerItem]];  

并在watchValueForKeyPath中
    if (context == AVPlayerDemoPlaybackViewControllerStatusObservationContext)
{
AVPlayerStatus status = [[change objectForKey:NSKeyValueChangeNewKey] integerValue];
switch (status)
{
/* Indicates that the status of the player is not yet known because
it has not tried to load new media resources for playback */
case AVPlayerStatusUnknown:
{
[lblvalidation setText:@"Loading..."];

NSLog(@"AVPlayerStatusUnknown");
}
break;

case AVPlayerStatusReadyToPlay:
{
/* Once the AVPlayerItem becomes ready to play, i.e.
[playerItem status] == AVPlayerItemStatusReadyToPlay,
its duration can be fetched from the item. */

NSLog(@"AVPlayerStatusReadyToPlay");

[self.player play];
[lblvalidation setText:@"Playing..."];
}
break;

case AVPlayerStatusFailed:
{
[lblvalidation setText:@"Error..."];
NSLog(@"AVPlayerStatusFailed");
}
break;
}
}

这对我有用...希望对您有帮助。

关于iphone - 如何从AVPlayer获取音频流状态的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9786046/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com