我想使用AVPlayer旋转视频回放。有没有办法把它顺时针旋转90度
这里有一些代码:
self.player = AVPlayer(URL: NSURL(fileURLWithPath: dataPath))
playerLayer = AVPlayerLayer.init(player: self.player)
playerLayer.frame = view.bounds
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
view.layer.addSublayer(playerLayer)
player.play()
更新
这个有效:
self.player = AVPlayer(URL: NSURL(fileURLWithPath: dataPath))
playerLayer = AVPlayerLayer.init(player: self.player)
playerLayer.setAffineTransform(CGAffineTransformMakeRotation(CGFloat(M_PI))
playerLayer.frame = view.bounds
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
view.layer.addSublayer(playerLayer)
player.play()
Swift 3:中的Hooni答案
let affineTransform = CGAffineTransform(rotationAngle: degreeToRadian(90))
avPlayerLayer.setAffineTransform(affineTransform)
func degreeToRadian(_ x: CGFloat) -> CGFloat {
return .pi * x / 180.0
}
如果您使用的是Objective-C,下面的代码会有所帮助。
示例代码:
#define degreeToRadian(x) (M_PI * x / 180.0)
#define radianToDegree(x) (180.0 * x / M_PI)
- (void)rotateVideoPlayerWithDegree:(CGFloat)degree {
[_playerLayer setAffineTransform:CGAffineTransformMakeRotation(degreeToRadian(degree))];
}
我愿意,
+ (Class)layerClass
{
return [AVPlayerLayer class];
}
然后在init中,类是一个NSView:
[(AVPlayerLayer*)self.layer setPlayer:player];
self.wantsLayer=YES;
self.superview.wantsLayer=YES;
if (fakePortrait) {
[self rotateByAngle:90];
}
然而,这只适用于10.13。我正在寻找10.9及以上版本的解决方案。如果我旋转10.13之前的视频,它就会消失。