Я сопоставляю SKScene с SKVideoNode с одной из сторон SCNBox. Я изо всех сил пытаюсь получить правильное соотношение сторон видео. Вот код:
NSURL * url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"preview.mp4"]];
AVAsset * asset = [AVAsset assetWithURL:url];
AVAssetTrack * track = [[asset tracksWithMediaType:AVMediaTypeVideo] firstObject];
CGSize size = track.naturalSize;
NSLog(@"size w is %f Size h is %f", size.width, size.height);
float max = MAX(size.width, size.height);
size = CGSizeMake(max, max);
SKScene * videoScene = [SKScene sceneWithSize:size];
videoScene.scaleMode = SKSceneScaleModeAspectFit;
videoPlayer = [AVPlayer playerWithURL:url];
videoNode = [SKVideoNode videoNodeWithAVPlayer:videoPlayer];
videoNode.position = CGPointMake(size.width/2, size.height/2);
videoNode.size = size;
videoNode.yScale = -1;
[videoNode play];
[videoScene addChild:videoNode];
for (int n = 0; n < 6; n++){
SCNMaterial * material = [SCNMaterial material];
material.diffuse.contents = (n == 4) ? videoScene : bodyImage;
[materials addObject:material];
}
Он игнорирует любые настройки соотношения сторон, такие как подгонка и заливка. Он просто сжимает его, чтобы он соответствовал ограничивающей рамке. Увеличение ограничительной рамки, похоже, не помогает. Даже при фиксированном размере относительно видео соотношение сторон игнорируется.
diffuse.contents
для AVPlayer напрямую. - person rickster   schedule 26.07.2018SCNMaterialProperty.contents
может приниматьAVPlayer
объект в iOS 11 и выше. У вас могут возникнуть или не возникнуть проблемы, если этот проигрыватель также подключен к слою проигрывателя. - person rickster   schedule 27.07.2018