forwardPlaybackEndTime不起作用

时间:2014-09-08 05:15:15

标签: ios time avplayer forward avplayeritem

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工作?

4 个答案:

答案 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);