AVPlayer - Fast Backward / Forward Stream

后端 未结 4 1517
生来不讨喜
生来不讨喜 2021-01-14 00:08

This is my code in the viewDidLoad :

AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@\"http://groove.wavestreamer.com:7321/l         


        
4条回答
  •  长发绾君心
    2021-01-14 00:46

    In Swift,

    fileprivate let seekDuration: Float64 = 5
    
    
    @IBAction func doForwardJump(_ sender: Any) {
        guard let duration  = player.currentItem?.duration else{
            return
        }
        let playerCurrentTime = CMTimeGetSeconds(player.currentTime())
        let newTime = playerCurrentTime + seekDuration
    
        if newTime < CMTimeGetSeconds(duration) {
    
            let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
            player.seek(to: time2)
        }
    }
    @IBAction func doBackwardJump(_ sender: Any) {
    
        let playerCurrentTime = CMTimeGetSeconds(player.currentTime())
        var newTime = playerCurrentTime - seekDuration
    
        if newTime < 0 {
            newTime = 0
        }
        let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
        player.seek(to: time2)
    
    }
    

    In Objective-C,

    #define seekDuration (float)5
    
    - (IBAction)backwardButtonAction:(UIButton *)sender {
        float playerCurrentTime = [self getCurrentTime];
        float newTime = playerCurrentTime - seekDuration;
    
        if (newTime < 0) {
            newTime = 0;
        }
        CMTime time = CMTimeMake(newTime*1000, 1000);
        [self.player seekToTime:time completionHandler:^(BOOL finished) {
            dispatch_async(dispatch_get_main_queue(), ^{
                playerSliderisScrubbing = NO;
            });
        }];
    }
    - (IBAction)forwardButtonAction:(UIButton *)sender {
        float duration = [self getPlayerDuration];
        float playerCurrentTime = [self getCurrentTime];
        float newTime = playerCurrentTime + seekDuration;
    
        if (newTime < duration) {
            CMTime time = CMTimeMake(newTime*1000, 1000);
            [self.player seekToTime:time completionHandler:^(BOOL finished) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    playerSliderisScrubbing = NO;
                });
            }];
    
        }
    }
    - (float)getCurrentTime {
        float seconds = 0;
        if (_player) {
            seconds = CMTimeGetSeconds([_player currentTime]);
        }
        return seconds;
    }
    - (float)getPlayerDuration {
        float seconds = 0;
        if (_player) {
            seconds = CMTimeGetSeconds([[_player currentItem] duration]);
        }
        return seconds;
    }
    

提交回复
热议问题