gpt4 book ai didi

ios - AVAssetTrack preferredTransform 总是返回风景

转载 作者:可可西里 更新时间:2023-11-01 03:34:29 25 4
gpt4 key购买 nike

我有一个录制视频的应用。

为了处理手机旋转,我有以下代码:

    // called on phone rotation
AVCaptureConnection *previewLayerConnection = [[self previewLayer] connection];
if ([previewLayerConnection isVideoOrientationSupported]) {
[previewLayerConnection setVideoOrientation:[self getVideoOrientation]];
}

和getVideoOrientation函数:

- (AVCaptureVideoOrientation) getVideoOrientation {
UIInterfaceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
AVCaptureVideoOrientation newOrientation = AVCaptureVideoOrientationPortrait;
switch (deviceOrientation) {
case UIInterfaceOrientationPortrait:
NSLog(@"UIInterfaceOrientationPortrait");
newOrientation = AVCaptureVideoOrientationPortrait;
break;
case UIInterfaceOrientationLandscapeLeft:
NSLog(@"UIInterfaceOrientationLandscapeRight");
newOrientation = AVCaptureVideoOrientationLandscapeLeft;
break;
case UIInterfaceOrientationLandscapeRight:
NSLog(@"UIInterfaceOrientationLandscapeLeft");
newOrientation = AVCaptureVideoOrientationLandscapeRight;
break;
default:
NSLog(@"default");
newOrientation = AVCaptureVideoOrientationPortrait;
break;
}

return newOrientation;
}

应用程序的这一部分工作正常(我在任何设备方向上都能看到视频)。但是当我尝试制作缩略图(或播放视频)时遇到问题。

正如我在其他问题中所读到的,我对每首轨道执行以下操作:

        AVAssetTrack* videoTrack    = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
CGAffineTransform txf = [videoTrack preferredTransform];
CGFloat videoAngleInDegree = RadiansToDegrees(atan2(txf.b, txf.a));

if (txf.a == 0 && txf.b == 1.0 && txf.c == -1.0 && txf.d == 0) {
thumbOrientation = UIImageOrientationLeft;
}
if (txf.a == 0 && txf.b == -1.0 && txf.c == 1.0 && txf.d == 0) {
thumbOrientation = UIImageOrientationRight;
}
if (txf.a == 1.0 && txf.b == 0 && txf.c == 0 && txf.d == 1.0) {
thumbOrientation = UIImageOrientationUp;
}
if (txf.a == -1.0 && txf.b == 0 && txf.c == 0 && txf.d == -1.0) {
thumbOrientation = UIImageOrientationDown;
}

UIImage *image = [UIImage imageWithCGImage:im scale:1.0 orientation:thumbOrientation];

我有 2 个示例文件:1 - 横向右侧,2 - 横向左侧。我希望它们在上面的代码中具有不同的方向,但出乎意料的是它们具有相同的方向(并且 videoAngleInDegree 对它们都是相同的)。

有什么解决方法吗?

最佳答案

你确定它工作正常吗?那里的 getVideoOrientation 看起来不对 - AVCapture 和 UIDevice 对于横向左右具有相反的含义。

这是来自 this question 的正确实现-- 查看那里的讨论,看看是否有帮助。

- (void)deviceOrientationDidChange{

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

AVCaptureVideoOrientation newOrientation;

if (deviceOrientation == UIDeviceOrientationPortrait){
NSLog(@"deviceOrientationDidChange - Portrait");
newOrientation = AVCaptureVideoOrientationPortrait;
}
else if (deviceOrientation == UIDeviceOrientationPortraitUpsideDown){
NSLog(@"deviceOrientationDidChange - UpsideDown");
newOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
}

// AVCapture and UIDevice have opposite meanings for landscape left and right (AVCapture orientation is the same as UIInterfaceOrientation)
else if (deviceOrientation == UIDeviceOrientationLandscapeLeft){
NSLog(@"deviceOrientationDidChange - LandscapeLeft");
newOrientation = AVCaptureVideoOrientationLandscapeRight;
}
else if (deviceOrientation == UIDeviceOrientationLandscapeRight){
NSLog(@"deviceOrientationDidChange - LandscapeRight");
newOrientation = AVCaptureVideoOrientationLandscapeLeft;
}

else if (deviceOrientation == UIDeviceOrientationUnknown){
NSLog(@"deviceOrientationDidChange - Unknown ");
newOrientation = AVCaptureVideoOrientationPortrait;
}

else{
NSLog(@"deviceOrientationDidChange - Face Up or Down");
newOrientation = AVCaptureVideoOrientationPortrait;
}

[self setOrientation:newOrientation];
}

关于ios - AVAssetTrack preferredTransform 总是返回风景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com