AVPlayerItem
拥有此属性forwardPlaybackEndTime
该值表示播放应该结束的时间 播放速率为正(请参阅AVPlayer的速率属性)。
默认值为kCMTimeInvalid,表示没有结束时间 指定了正向播放。在这种情况下,有效结束 正向播放的时间是项目的持续时间。
但我不知道为什么它不起作用。我尝试在AVPlayerItemStatusReadyToPlay
中设置它,持续时间可用回调,...但它没有任何效果,它只是播放到最后
我认为forwardPlaybackEndTime
用于限制播放头,对吧?
在我的应用程序中,我只想从电影的一半到一半播放
我的代码看起来像这样
- (void)playURL:(NSURL *)URL
{
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:URL];
if (self.avPlayer) {
if (self.avPlayer.currentItem && self.avPlayer.currentItem != playerItem) {
[self.avPlayer replaceCurrentItemWithPlayerItem:playerItem];
}
} else {
[self setupAVPlayerWithPlayerItem:playerItem];
}
playerItem.forwardPlaybackEndTime = CMTimeMake(5, 1);
// Play
[self.avPlayer play];
}
如何让forwardPlaybackEndTime
工作?
答案 0 :(得分:0)
试试这个
AVPlayerItem.forwardPlaybackEndTime = CMTimeMake(5, 1);
Here 5 is the time till the AVPlayerItem will play.
答案 1 :(得分:0)
在AVPlayer上设置以下内容
AVPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
然后设置通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidPlayToEndTime:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
用这个方法明显
- (void) playerItemDidPlayToEndTime:(NSNotification*)notification
{
// do something here
}
然后设置你的forwardPlaybackEndTime
AVPlayer.currentItem.forwardPlaybackEndTime = CMTimeAdd(AVPlayer.currentItem.currentTime, CMTimeMake(5.0, 1));
开始玩avplayer
AVPlayer.rate = 1.0;
通知将被触发,您的曲目将继续播放。在你的处理程序中,你可以停止它并执行seekToTime或其他任何操作。
或者你可以设置一个边界观察者
NSArray *array = [NSArray arrayWithObject:[NSValue valueWithCMTime:CMTimeMakeWithSeconds(5.0, 1)]];
__weak OTHD_AVPlayer* weakself = self;
self.observer_End = [self addBoundaryTimeObserverForTimes:array queue:NULL usingBlock:^{ if( weakself.rate >= 0.0 ) [weakself endBoundaryHit]; }];
答案 2 :(得分:0)
我已检查下面的代码,其运行和流式传输在指定时间停止:
- (void)playURL
{
NSURL *url = [NSURL URLWithString:@"http://clips.vorwaerts-gmbh.de/VfE_html5.mp4"];
self.playerItem = [AVPlayerItem playerItemWithURL:url];
self.playerItem.forwardPlaybackEndTime = CMTimeMake(10, 1);
self.avPlayer = [AVPlayer playerWithPlayerItem:self.playerItem];
[videoView setPlayer:self.avPlayer];
// Play
[self.avPlayer play];
}
我希望这会对你有所帮助。
另请查看以下教程:AVFoundation Framework
答案 3 :(得分:0)
我认为您必须更新avPlayer's current playerItem
。
所以,
playerItem.forwardPlaybackEndTime = CMTimeMake(5, 1);
它应该是:
self.avPlayer.currentItem.forwardPlaybackEndTime = CMTimeMake(5, 1);