播放视频的特定部分
Play a specific part of video
我想使用 AVPlayerController
播放视频的特定部分。但是不知道怎么玩。这是我的代码
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()
}
您可以对代码进行以下修改:
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
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()
}
}
我想使用 AVPlayerController
播放视频的特定部分。但是不知道怎么玩。这是我的代码
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()
}
您可以对代码进行以下修改:
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
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()
}
}