0

AVPlayerItem有这个属性forwardPlaybackEndTime

该值指示当播放速率为正时播放应结束的时间(请参阅 AVPlayer 的 rate 属性)。

默认值为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

4 回答 4

0

我认为你必须更新avPlayer's current playerItem

所以,

 playerItem.forwardPlaybackEndTime = CMTimeMake(5, 1);

它应该是:

 self.avPlayer.currentItem.forwardPlaybackEndTime = CMTimeMake(5, 1);
于 2015-02-23T13:57:33.430 回答
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

于 2014-09-09T09:49:39.910 回答
0

尝试这个

   AVPlayerItem.forwardPlaybackEndTime = CMTimeMake(5, 1);
   Here 5 is the time till the AVPlayerItem will play.
于 2014-09-08T06:43:34.800 回答
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]; }];
于 2014-09-09T07:21:07.207 回答