相关疑难解决方法(0)

第一次播放声音时AVAudioPlayer启动缓慢

我试图通过iPhone上的AVAudioPlayer播放(非常短 - 少于2秒)的音频文件来消除启动延迟.

一,代码:

NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"];
NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile];

NSError *err;
AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err];

audioPlayer.delegate = self;
[audioPlayer play];
Run Code Online (Sandbox Code Playgroud)

一旦完成,我还实现了audioPlayerDidFinishPlaying方法来释放AVAudioPlayer.

我第一次播放音频时滞后是显而易见的 - 至少2秒.然而,之后立即播放声音.我怀疑那个罪魁祸首是[NSData dataWithContentsOfMappedFile]最初从闪存中读取了很长时间,但后来读取速度很快.不过,我不确定如何测试.

是这样的吗?如果是这样,我是否应该预先缓存NSData对象并积极地在低内存条件下清除它们?

iphone audio caching nsdata avaudioplayer

36
推荐指数
4
解决办法
2万
查看次数

iOS:AVPlayer视频预加载

我正在使用AVPlayer播放视频.它们的长度很短,2-5秒.它们以随机顺序播放.问题是,当改变视频,并且新视频开始播放时,设备会滞后很短的时间,但我不会变得流畅.有没有办法用AVPlayer预加载视频?

video preload ios avplayer

8
推荐指数
1
解决办法
6488
查看次数

AVPlayer缓慢加载

我正在使用AVPlayer远程网址播放mp3文件.我对mp3的初始加载时间有一些问题,它非常慢(大约5-8秒).
我将它与其他第三方玩家进行了比较,速度要慢得多,我也将它与Android玩家进行了比较,而且速度也慢得多.
所以问题不在于网址本身,也不在于网络连接.

另一个有趣的一点是,在AVPlayer开始播放mp3后,寻求非常快(几乎立即),这是否意味着播放器在开始播放前下载整个mp3文件,这就是它如此慢的原因?
我可以控制这种行为吗?如果没有,任何其他想法可能是什么原因?

audio ios avplayer

6
推荐指数
1
解决办法
2148
查看次数

AVPlayer在缓冲后停止播放视频

当我从互联网上加载视频(10-40MB大)时,我无法提供流畅的播放体验.

我的AVPlayer要么加载整个视频然后播放,要么播放1s缓冲区然后停止播放.

我尝试了无穷无尽的库,缓冲区观察器方法和教程.似乎没有任何帮助.

    .
    .
    .

    self.makeLoaderVisible()

    let playerItem = AVPlayerItem(url: url)
    playerItem.addObserver(self, forKeyPath: "playbackBufferEmpty", options: .new, context: nil)
    playerItem.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .new, context: nil)
    playerItem.addObserver(self, forKeyPath: "playbackBufferFull", options: .new, context: nil)

    avPlayer?.replaceCurrentItem(with: playerItem)
    avPlayer?.automaticallyWaitsToMinimizeStalling = false
    avPlayer?.playImmediately(atRate: 0)
//  avPlayer?.play()

    }


override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if object is AVPlayerItem {
        switch keyPath! {
        case "playbackBufferEmpty":
            // Show loader
            makeLoaderVisible()

        case "playbackLikelyToKeepUp":
            // Hide loader
            hideLoader()

        case "playbackBufferFull": …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios avplayer swift avkit

6
推荐指数
1
解决办法
1075
查看次数

使用AVFoundation在视频之间快速切换

我正在编写一个应用程序,用户最多可以录制6个视频片段,每个片段的持续时间为2秒.当录制视频剪辑时,用户可以使用6个按钮进行播放 - 每个剪辑一个.然后,用户可以通过在6个剪辑之间切换来录制电影.问题是,当用户按下按钮时,我需要在6个剪辑之间进行近乎瞬时的切换 - 否则会丢失播放剪辑的错觉 - 该功能有点类似于App Store中名为CamBox的应用程序.

每当用户按下按钮时,我首先尝试使用AVPlayer中的AvPlayerItem和AVAsset初始化每个剪辑.播放器的输出在我的主视图中指向AVPlayerLayer.问题是加载和开始播放所花费的时间很长,这意味着当用户快速连续按下按钮时视频会滞后.

我决定尝试使用5个AVPlayers和5个AVPlayerLayers预加载所有剪辑.5 PlayerLayers被插入到我的主视图中,当用户按下按钮时,当前正在播放的AVPlayer被暂停和倒回,并且当前可见的AVPlayerLayer被隐藏.启动新的AVPlayer并显示相应的AVPlayerLayer.它工作得比我的第一个解决方案快得多,虽然不是瞬间但问题是我只能预加载4个剪辑,这意味着当用户按下播放最后两个按钮的按钮时,它会滞后很长时间.下面是我预加载剪辑的代码

-(void)loadVideos
{
  layers = [[NSMutableArray alloc] initWithCapacity:6];
  players = [[NSMutableArray alloc] initWithCapacity:6];

  for(int i = 1; i < 7; i++)
  {
      NSURL* fileURL = [NSURL fileURLWithPath:[self getFileName:i]];        
      AVPlayerItem* avPlayerItem = [[[AVPlayerItem alloc] initWithURL:fileURL] autorelease];
      [avPlayerItem addObserver:self forKeyPath:@"status" options:0 context:nil];   

      AVPlayer *avPlayer = [[[AVPlayer alloc] initWithPlayerItem:avPlayerItem] autorelease];

      [avPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];   
      [avPlayer addObserver:self forKeyPath:@"currentItem" options:0 context:nil];   
      AVPlayerLayer* layer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
      layer.frame = self.playerView.bounds;
      [playerView.layer addSublayer:layer];
      [layers addObject:layer];
      [players …
Run Code Online (Sandbox Code Playgroud)

video avfoundation ios avplayer

5
推荐指数
1
解决办法
4176
查看次数

标签 统计

avplayer ×4

ios ×4

audio ×2

avfoundation ×2

video ×2

avaudioplayer ×1

avkit ×1

caching ×1

iphone ×1

nsdata ×1

preload ×1

swift ×1