Tyl*_*ler 83 iphone objective-c ios avplayer avplayerviewcontroller
我环顾四周,但我找不到代表协议AVPlayer class
.是什么赋予了?
我正在使用它的子类,AVQueuePlayer
来播放一个数组AVPlayerItems
,每个数组都从一个URL加载.有什么方法可以在歌曲播放完毕后调用方法吗?特别是在队列的最后?
如果那是不可能的,那么在缓冲之后,当歌曲STARTS播放时,我有什么方法可以调用方法吗?我正试图在那里获得一个加载图标,但它会在音乐实际开始之前关闭图标,即使它是在[audioPlayer play]
动作之后.
are*_*exx 150
是的,AVPlayer类没有像AVAudioPlayer那样的委托协议.您需要订阅AVPlayerItem上的通知.您可以使用您-initWithURL:
在AVPlayer上传递的相同URL创建AVPlayerItem.
-(void)startPlaybackForItemWithURL:(NSURL*)url {
// First create an AVPlayerItem
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:url];
// Subscribe to the AVPlayerItem's DidPlayToEndTime notification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];
// Pass the AVPlayerItem to a new player
AVPlayer* player = [[[AVPlayer alloc] initWithPlayerItem:playerItem] autorelease];
// Begin playback
[player play]
}
-(void)itemDidFinishPlaying:(NSNotification *) notification {
// Will be called when AVPlayer finishes playing playerItem
}
Run Code Online (Sandbox Code Playgroud)
是.将KVO观察者添加到玩家的状态或比率:
- (IBAction)go {
self.player = .....
self.player.actionAtItemEnd = AVPlayerActionStop;
[self.player addObserver:self forKeyPath:@"rate" options:0 context:0];
}
- (void)stopped {
...
[self.player removeObserver:self]; //assumes we are the only observer
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (context == 0) {
if(player.rate==0.0) //stopped
[self stopped];
}
else
[super observeVal...];
}
Run Code Online (Sandbox Code Playgroud)
所以基本上就是这样.
免责声明:我在这里写了这个,所以我没有检查代码是否良好.我之前从未使用过AVPlayer,但它应该是正确的.
Swift 3 - 我AVPlayerItem
每次向播放器添加视频时都会添加一个观察者:
func playVideo(url: URL) {
let playerItem = AVPlayerItem(asset: AVURLAsset(url: someVideoUrl))
NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEndTime), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem)
self.player.replaceCurrentItem(with: playerItem)
self.player.play()
}
func playerItemDidPlayToEndTime() {
// load next video or something
}
Run Code Online (Sandbox Code Playgroud)
Apple 文档AVFoundation 编程指南中有很多信息(查找监控播放部分)。它似乎主要是通过 KVO 进行的,因此如果您不太熟悉,您可能希望温习一下(Key Value Observing PlanningGuide有一个指南)。
归档时间: |
|
查看次数: |
58698 次 |
最近记录: |