如何在AVPlayer中停止视频播放?

33

我正在使用这段代码来使用AVPlayer播放视频文件,如何停止它?

 [videoView setHidden:NO];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path2 = [documentsDirectory stringByAppendingPathComponent:saveFileName];
    NSURL *url1 = [[NSURL alloc] initFileURLWithPath: path2];
    videoPlayer = [AVPlayer playerWithURL:url1] ;
    self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:videoPlayer];

    //[self willAnimateRotationToInterfaceOrientation];
    avPlayerLayer.frame = videoView.bounds;
    [self.videoView.layer addSublayer: avPlayerLayer];

    [self.videoPlayer play];

我试过了,但它不起作用。

    //[self.videoPlayer release];
5个回答

70

AVPlayer没有名为stop的方法。您可以暂停(pause)或将播放速率(rate)设为0.0。


34

我通常会调用 seekToTime 0.0 方法,然后暂停。这对我来说运行得非常完美。 :)

[self.videoPlayer seekToTime:CMTimeMake(0, 1)];
[self.videoPlayer pause];

27

如果您不想将AV播放器设置为nil,更好的方法可能是:

videoPlayer.replaceCurrentItemWithPlayerItem(nil)

3
此选项不兼容Swift。 - Hola Soy Edu Feliz Navidad
如果不执行 replaceCurrentItem..,我发现网络活动指示器永远不会消失,即使播放器已经暂停并设置为 nil,应用程序也会消耗大量电池电量。 - snakeoil
3
@HolaSoyEduFelizNavidad,是的。您可以执行.replaceCurrentItem(with: nil) - gbhall

23

您可以暂停并将AVPlayer对象值设为nil。

在您的代码中,您可以使用以下代码:

[self.videoPlayer pause];
[self.avPlayerLayer removeFromSuperlayer];
self.videoPlayer = nil;

14

我们有Swift协议扩展 - 欣喜。

extension AVPlayer {
   func stop(){
    self.seek(to: CMTime.zero)
    self.pause()
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接