【问题标题】:Stop AVPlayer and restart MP3 file again停止 AVPlayer 并重新启动 MP3 文件
【发布时间】:2014-09-16 13:49:30
【问题描述】:

我想启动、暂停和停止(与重新启动相同)我的 mp3 文件,我正在使用 AVPlayer。我从服务器获取文件。

要开始我做的这首歌:

[self.player start];

暂停一下:

[self.player pause];

但是当我想停止歌曲并重新加载它,以便用户下次点击“开始按钮”时歌曲从头开始,我不知道该怎么做。

我尝试过这样的事情:

[self.player pause];
self.player = nil;

但是播放器当然是零,如果没有新的初始化,我无法再次重新启动文件。任何想法如何阻止它?

【问题讨论】:

  • [self.player seekToTime:CMTimeMakeWithSeconds(0, 5) completionHandler:nil] 从头开始​​播放。
  • 完美,就像魅力一样,非常感谢!
  • @Sandeep 第二个参数 (5) 是干什么用的?

标签: ios objective-c avplayer avplayeritem


【解决方案1】:

使用[player pause]停止视频

然后在开始播放视频时使用此代码。

[player seekToTime:kCMTimeZero];
[player play];

我比解决 OP 的评论更喜欢它 b/c 它消除了警告并使用了常量。

【讨论】:

    【解决方案2】:

    在 Swift 中执行此操作的最佳解决方案

    player.seek(to: kCMTimeZero)
    player.play()
    

    斯威夫特 >= 4:

    player.seek(to: .zero)
    player.play()
    

    【讨论】:

      【解决方案3】:
      • 在 Xamarin.ios 中

      player.Seek(CoreMedia.CMTime.Zero);

      播放器.Play();

      【讨论】:

        【解决方案4】:

        seek#to 有一个完成处理程序。

        p?.seek(to: .zero)
        p?.rate = 1
        

        是不正确的。您可以获得音频抖动

        p?.seek(to: .zero) { [weak self] _ in
            self?.p?.rate = 1
        }
        

        可能是你想要的。

        如果它已经在播放,而您只进行搜索而不进行其他操作,那么您可能会再次感到紧张。

        你可能最好

        p?.rate = 0
        p?.seek(to: .zero) { [weak self] _ in
            self?.p?.rate = 1
        }
        

        如果它是一个非常重要的应用程序,您还必须考虑查找完成中的错误情况。

        【讨论】:

          【解决方案5】:

          在 Swift 4 中:self.player.seek(to: CMTime.zero)

          【讨论】:

            【解决方案6】:
            // If conti. play Video or audio apply this code
            
            
            
             [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(playerItemDidReachEnd
                                                             :)
                                                         name:AVPlayerItemDidPlayToEndTimeNotification
                                                       object:[avPlayer currentItem]];
            [avPlayer play];
            
            
            
            
             - (void)playerItemDidReachEnd:(NSNotification *)notification
            {
            
            NSLog(@"Replay video in method");
            AVPlayerItem *p = [notification object];
            [p seekToTime:kCMTimeZero];
              }
            

            【讨论】:

            • 因为代码格式不好,缺乏解释,这个答案没有帮助。
            猜你喜欢
            • 2013-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多