Есть ли способ сделать снимок экрана в AVPlayerLayer? - PullRequest
2 голосов
/ 07 октября 2019

Я сейчас создаю приложение для видео-коллажа. У меня есть один вид, который содержит Avplayerlayer в качестве подслоя. Мне нужно сделать снимок экрана с видом, который содержит AvplayerLayer. Когда я попытался сделать это, он получает снимок экрана, но для avplayerlayer (внутри которого воспроизводится видео) нет скриншота, просто черный экран. Для симулятора отлично работает и показывает слой также, но для реального устройства просто черный экран.

Я перепробовал все решения в документации StackOverFlow и appleds, но ничего не получалось.

Некоторые решениячто я пробовал:

swift: Как сделать снимок экрана AVPlayerLayer ()

Скриншот для AVPlayer и видео

https://developer.apple.com/documentation/avfoundation/avcapturevideopreviewlayer

Как вы можете видеть из моего кода, он должен работать для получения изображений из вида, но avplayerlayer не работает.

- (UIImage *)imageFromView:(UIView *)view
{
   UIGraphicsBeginImageContext(view.frame.size);

    [view drawViewHierarchyInRect:_videoFrame afterScreenUpdates:false];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    NSString *fileExtension = @"png";

    NSData *data;

    Boolean *isOutputJPS = false;

    if (isOutputJPS) {
        data = UIImageJPEGRepresentation(image, 0.5);
        fileExtension = @"jpg";
    }else{
        data = UIImagePNGRepresentation(image);
    }

    UIImage  *rasterizedView = [UIImage imageWithData:data];
    UIGraphicsEndImageContext();
    return rasterizedView;
}

//in the viewController

UIImage *image =  [self imageFromView:recordingView];

Я немного отчаялся, потому что естьнет никакого решения для Avplayerlayer. Когда я проверяю изображения, сгенерированные в реальном устройстве. Он просто показывает мне вид, но для симулятора он работает так, как я ожидаю.

...