如何更改AVPlayer的视频方向?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改AVPlayer的视频方向?相关的知识,希望对你有一定的参考价值。

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

UPDATE

这个工作:

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()
答案

如果您使用的是Objective-C,则以下代码将有所帮助。

Sample code:

#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))];
}
另一答案

Hooni在Swift 3中回答:

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

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

我做,

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

以上是关于如何更改AVPlayer的视频方向?的主要内容,如果未能解决你的问题,请参考以下文章

切换方向时 AVPlayer 刷新(使用 Firebase Firestore 视频链接)

在 SwiftUI 中更改 AVPlayer 源?

如何防止在方向更改时重新创建片段寻呼机中的片段?

是否可以使用 AVPlayer 缓存 HLS 段?

方向/配置更改后如何维护 ListView 片段状态?

使用 AVPlayer 时为啥我的视频无法在我的 UIView 中播放