2011-06-13 6 views
11

슬라이더와 일부 버튼을 사용하여 내 비디오를 재생할 때 AVPlayer를 사용하고 있습니다. 단추를 사용하여 앞뒤로 이동하는 방법은 다음과 같습니다.AVPlayer Video SeekToTime

-(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]; 
} 

제 문제는 시크가 제대로 작동하지 않을 때입니다. 초를 기준으로 다음 프레임으로 이동합니다. 나는 다음 프레임을 미세하게 움직여야한다. 도와주세요 ...

답변

22

코드를 실제로 이해하지 못합니다. 앞뒤로 이동하는 데 별도의 메서드가 필요하지 않습니다. 둘 다 동일한 메서드를 사용할 수 있습니다. 저는 AVPlayer Movie Player를 가지고 있습니다. 어떻게 슬라이더 부분을했는지 보여 드리겠습니다. 이 코드에서 두 개는가

-(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; 
     } 

그리고 그것 뿐이다은, 첫째, 지속 시간 속성은 float로 변환해야하는 CMTime 변수를 반환합니다, 또한, 이것은 당신은, 초 원료 수를 반환 시간 레이블을 표시하려면 h : mm : ss로 변환하십시오. 둘째, updateSlider 메서드는 매초마다 타이머에 의해 트리거됩니다. 행운을 비네.

+0

입니까? –

+0

하이와 오디오를 재생하는거야 작동하지, 찾는 사람 어떤

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 }); }]; 

4

다음 코드 조각은 나를 위해 일한 :

me..i 코드에서 ... avpaler
+1

매력적인 작품! –

+1

'CMTime'은'초'편의 속성을 가지고 있기 때문에 원하지 않는다면 직접 계산할 필요가 없습니다. – LucasTizma

+0

도움이 되셨습니다 .. – NSPratik