iOS - AVPlayer seekToTime到后退(HLS)位置有时无法正常工作

时间:2014-08-19 14:33:57

标签: ios avfoundation h.264 avplayer

我还没有找到解决问题的方法,希望有人可以帮助我。

假设:

  • 带有AVUrlAsset(HTTP直播)的AVPlayer实例

  • m3u8规范:

    EXT-X-VERSION:3
    EXT-X-PLAYLIST-TYPE:EVENT
    
    #EXTINF:0.96000, 178200
    segment-00000.ts
    
  • 每个段都以IDR帧开头(因此.ts是对齐的,至少我希望如此)

  • seekTo与CMTimeMakeWithSeconds(时间刻度= 1)一起使用,kCMTimeZero准确度

  • currentPlayerItem.duration和asset.duration设置了无穷大标志

  • 让我们假设我们处于200的第二个100,我们想要向前一秒和向后一秒

问题:

  • seekTo寻求fardward(永远)和向后(总是)
  • 它看起来有特定的框架位置,向后搜索操作只会减少当前时间!! AVPlayer实例的值,但没有别的

  • 我多次向后搜索(-1秒)并且玩家显示旧图片

  • 在我多次寻找(看到错误的位置)之后,玩家最终继续真正寻求倒退。但是现在currentTime就像-40秒,显示图片的PTS就像-3秒。

  • info:seekTo完成并且finishHandler被调用,完成= YES,总是!

  • info2:与kCMTimeIndefinite准确性相同的问题

问题

  • 这个问题的原因是什么?
  • 可能会影响哪种帧?
  • 寻求之后:为什么AVPlayer不知道它何时呈现旧的PTS ...否则AVPlayer不会将currentTime设置为更新的位置。
  • 我是否需要寻求两个部分之间的中间位置?例如0.96秒,或者我可以在这种情况下使用CMTimeMakeWithSecond(1,1)吗?

最好的反对!

用户请求的代码:

AVPlayer* avPlayerStart = [[AVPlayer alloc] init];
_mStartPlayer = avPlayerStart;

[_mPreviewStartView setPlayer:_mStartPlayer];

AVURLAsset* anAssest= [[AVURLAsset alloc]initWithURL:url options:nil];

_mCurrentPlayerItemStart = [AVPlayerItem playerItemWithAsset:anAssest];
[_mStartPlayer replaceCurrentItemWithPlayerItem:_mCurrentPlayerItemStart];

//operation:
taggingStart -= 1;
[_mStartPlayer seekToTime:CMTimeMakeWithSeconds(taggingStart, 1) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

0 个答案:

没有答案