首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer视频SeekToTime

AVPlayer视频SeekToTime
EN

Stack Overflow用户
提问于 2011-06-13 19:18:58
回答 2查看 23.4K关注 0票数 12

我正在使用AVPlayer播放我的视频,使用滑块和一些按钮。下面是我使用按钮向前和向后移动的方法。

代码语言:javascript
复制
-(IBAction)MoveForward
{
    //int value = timeSlider.value*36000 + 10;
    //CMTime newTime = CMTimeMakeWithSeconds(value, playspeed);
    //CMTime newTime = CMTimeMake(value,(playspeed*timeSlider.maximumValue));

    CMTime newTime = CMTimeMakeWithSeconds(timeSlider.value, playspeed);
    newTime.value += 60;
    [player seekToTime: newTime];
}

-(IBAction)MoveBackward
{
    CMTime newTime = CMTimeMakeWithSeconds(timeSlider.value-1, playspeed);
    [player seekToTime: newTime];
}

我的问题是,寻找的时间不能正常工作。它根据秒数导航到下一帧。我需要每分钟移动下一帧。帮帮我..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-16 03:27:30

我真的不理解你的代码,你不需要单独的方法来向前和向后移动,你可以对这两个使用相同的方法。我有一个可以工作的AVPlayer电影播放器,我会告诉你我是如何做滑块部分的。

代码语言:javascript
复制
-(IBAction)sliding:(id)sender {
    CMTime newTime = CMTimeMakeWithSeconds(seeker.value, 1);
    [self.player seekToTime:newTime];
}

-(void)setSlider {
    sliderTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateSlider) userInfo:nil repeats:YES] retain];
    self.seeker.maximumValue = [self durationInSeconds];
    [seeker addTarget:self action:@selector(sliding:) forControlEvents:UIControlEventValueChanged];
    seeker.minimumValue = 0.0;
    seeker.continuous = YES;  
}

- (void)updateSlider {
    self.seeker.maximumValue = [self durationInSeconds];
    self.seeker.value = [self currentTimeInSeconds];
}

- (Float64)durationInSeconds {
    Float64 dur = CMTimeGetSeconds(duration);
    return dur;
}

- (Float64)currentTimeInSeconds {
    Float64 dur = CMTimeGetSeconds([self.player currentTime]);
    return dur;
}

就是这样,在这段代码中有两个陷阱,首先,duration属性返回一个CMTime变量,您必须将其转换为浮点数,此外,这将返回原始秒数,如果您想要显示时间标签,则必须将其转换为h:mm:ss。其次,updateSlider方法每秒由一个计时器触发。祝好运。

票数 27
EN

Stack Overflow用户

发布于 2015-10-27 20:29:37

下面的代码片段适用于我:

代码语言:javascript
复制
CMTime videoLength = self.mPlayer.currentItem.asset.duration;  // Gets the video duration
float videoLengthInSeconds = videoLength.value/videoLength.timescale; // Transfers the CMTime duration into seconds
            
[self.mPlayer seekToTime:CMTimeMakeWithSeconds(videoLengthInSeconds * [slider value], 1) 
                   completionHandler:^(BOOL finished) 
{
    dispatch_async(dispatch_get_main_queue(), ^{
        isSeeking = NO;
        // Do some stuff
    });
}];
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6329706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档