Я пытаюсь масштабировать, центрировать и заполнять стандартное видео 16: 9 с установленным разрешением 1920x1080.Кажется, что проблемы не в коде, а в математической проблеме, которую я не могу решить, особенно для вращающихся видео.
Что мне нужно сделать, чтобы центрировать видео, так как оно масштабируется, но часто оставляет черную рамку на видео.Я знаю, что это просто случай игры с CGAffineTransformMakeTranslation
-(CGAffineTransform)exportTransform:(AVAsset *)asset {
AVAssetTrack *track = [asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
UIImageOrientation orientation = UIImageOrientationUp;
BOOL portrait = false;
CGAffineTransform firstTransform = track.preferredTransform;
if(firstTransform.a == 0 && firstTransform.b == 1.0 && firstTransform.c == -1.0 && firstTransform.d == 0) {
orientation= UIImageOrientationRight;
portrait = true;
}
if(firstTransform.a == 0 && firstTransform.b == -1.0 && firstTransform.c == 1.0 && firstTransform.d == 0) {
orientation = UIImageOrientationLeft;
portrait = true;
}
if(firstTransform.a == 1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == 1.0) {
orientation = UIImageOrientationUp;
}
if(firstTransform.a == -1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == -1.0) {
orientation = UIImageOrientationDown;
}
CGFloat FirstAssetScaleToFitRatio = self.videoresize.height / track.naturalSize.height;
if (portrait) {
FirstAssetScaleToFitRatio = self.videoresize.width / track.naturalSize.height;
CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio);
return CGAffineTransformConcat(track.preferredTransform, FirstAssetScaleFactor);
}
else {
CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio);
return CGAffineTransformConcat(CGAffineTransformConcat(track.preferredTransform, FirstAssetScaleFactor),CGAffineTransformMakeTranslation(0.0, -0.0));
}
}