如何更改AVPlayer的视频方向?

17

我想使用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()

请查看此链接:https://dev59.com/4mrWa4cB1Zd3GeqP_n5h - Landelin Delcoucq
那是Objective-C,我完全没有相关经验。 - mafioso
代码不起作用!! - Ramani Hitesh
3个回答

8

Hooni在Swift 3中的答案:

let affineTransform = CGAffineTransform(rotationAngle: degreeToRadian(90))
avPlayerLayer.setAffineTransform(affineTransform)

func degreeToRadian(_ x: CGFloat) -> CGFloat {
    return .pi * x / 180.0
}

6
如果你正在使用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))];
}

-2

我做,

+ (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之前旋转视频,则会消失。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接