Play a specific part of video

杀马特。学长 韩版系。学妹 提交于 2019-12-23 05:09:48

问题


I want to play a specific part of the video using AVPlayerController. But don't know how to play. Here is my code

func playVideoMethod(path:URL) {       

    avpController = AVPlayerViewController()
    avpController.player = AVPlayer.init(url: path)
    avpController.view.frame = self.playerView.bounds
    avpController.showsPlaybackControls = false
    let translate = CGAffineTransform(rotationAngle: CGFloat(Int(M_PI/18.0)))
    avpController.view.transform = translate
    self.playerView.addSubview(avpController.view)
    self.playerView.autoresizesSubviews = true
    avpController.player?.play()
}

回答1:


You can make this modifications to your code:

let item = AVPlayerItem(url: path)
let player = AVPlayer(playerItem: item)
player.seek(to: CMTime(... // add time what you want to start from
item.forwardPlaybackEndTime = CMTime(... // add preferred end time
avpController.player = player



回答2:


func playVideoOfSpecificTime(startTime:NSInteger, endTime:NSInteger){

    let path2 = Bundle.main.path(forResource: "justin", ofType:"mp4")
    let fileUrl2  = NSURL(fileURLWithPath: path2!)
    let asset = AVURLAsset(url: (fileUrl2 as URL), options: nil)

    let mixComposition = AVMutableComposition()
    let videoTrackComposition: AVMutableCompositionTrack? = mixComposition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
    let audioTrackComposition: AVMutableCompositionTrack? = mixComposition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)

    let preferredTimerScale = Int32(asset.duration.seconds * 10)
    let chunkStart = CMTimeMakeWithSeconds(Float64(startTime), preferredTimerScale)
    let chunkDuration: CMTime = CMTimeMakeWithSeconds(Float64(endTime), preferredTimerScale)
    do {
        try? videoTrackComposition!.insertTimeRange(CMTimeRangeMake(chunkStart, chunkDuration), of: asset.tracks(withMediaType: .video)[0], at: kCMTimeZero)
    } catch {
        print("Failed to insert track")
    }
    do {
        try? audioTrackComposition!.insertTimeRange(CMTimeRangeMake(chunkStart, chunkDuration), of: asset.tracks(withMediaType: .audio)[0], at: kCMTimeZero)
    } catch {
        print("Failed to insert track")
    }
    let playerItem = AVPlayerItem(asset: mixComposition)
    let player = AVPlayer(playerItem: playerItem)
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player
    self.present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }
}


来源:https://stackoverflow.com/questions/43045227/play-a-specific-part-of-video

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!