潘寻求AVPlayer

mal*_*974 5 seek ios avplayer

我试图在我的AVPlayer中平移并寻找前进和后退.它有点工作,但确定平移转换为资产长度的基本数学是错误的.任何人都可以提供协助吗?

- (void) handlePanGesture:(UIPanGestureRecognizer*)pan{

    CGPoint translate = [pan translationInView:self.view];
    CGFloat xCoord = translate.x;
    double diff = (xCoord);
    //NSLog(@"%F",diff);

    CMTime duration = self.avPlayer.currentItem.asset.duration;
    float seconds = CMTimeGetSeconds(duration);
    NSLog(@"duration: %.2f", seconds);

    CGFloat gh = 0;

    if (diff>=0) {
        //If the difference is positive
        NSLog(@"%f",diff);
        gh = diff;
    } else {
        //If the difference is negative
        NSLog(@"%f",diff*-1);
        gh = diff*-1;
    }

    float minValue = 0;
    float maxValue = 1024;
    float value = gh;

    double time = seconds * (value - minValue) / (maxValue - minValue);

    [_avPlayer seekToTime:CMTimeMakeWithSeconds(time, 10) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
    //[_avPlayer seekToTime:CMTimeMakeWithSeconds(seconds*(Float64)diff , 1024) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

}
Run Code Online (Sandbox Code Playgroud)

Jam*_*ush 3

您没有标准化触摸位置和相应的时间值。两者之间是1:1的关系吗?那是不可能的。

获取平移手势的最小和最大触摸位置值以及资源持续时间(显然,从零到视频长度)的最小和最大值,然后应用以下公式将触摸位置转换为搜索时间:

// Map
#define map(x, in_min, in_max, out_min, out_max) ((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
Run Code Online (Sandbox Code Playgroud)

这是我编写的使用该公式的代码:

- (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender {
        if (sender.state == UIGestureRecognizerStateChanged){
            CGPoint location = [sender locationInView:self];
            float nlx = ((location.x / ((CGRectGetMidX(self.frame) / (self.frame.size.width / 2.0)))) / (self.frame.size.width / 2.0)) - 1.0;
            //float nly = ((location.y / ((CGRectGetMidY(self.view.frame) / (self.view.frame.size.width / 2.0)))) / (self.view.frame.size.width / 2.0)) - 1.0;
            nlx = nlx * 2.0;
            [self.delegate setRate:nlx];
        }
}
Run Code Online (Sandbox Code Playgroud)

我挑选了显示速率的标签,以及在拖动时出现的播放图标,该图标会根据平移视频的快慢来改变大小。虽然你没有要求,但如果你想要,就问吧。

哦,“两倍”因子旨在为发送到委托的 setRate 方法的平移手势值添加加速曲线。您可以使用任何公式,甚至是实际曲线,例如 pow(nlx, 2.0) 或其他...