美文网首页iOS视频开发
iOS视频添加水印遇到的坑

iOS视频添加水印遇到的坑

作者: akielvis | 来源:发表于2016-12-10 21:51 被阅读734次

    在做iOS视频相关的开发的时候,遇到了一点点坑。


    iOS视频添加水印,你首先会想到使用 animationTool , 苹果官方是这样写的

    A video composition describes, for any time in the aggregate time range of its instructions, the number and IDs of video tracks that are to be used in order to produce a composed video frame corresponding to that time. When AV Foundation’s built-in video compositor is used, the instructions an AVVideoComposition comprises can specify a spatial transformation, an opacity value, and a cropping rectangle for each video source, and these can vary over time via simple linear ramping functions.

    然后就按照步骤实现就可以了

    // 1 - set up the overlay

    CALayer *overlayLayer = [CALayer layer];

    [overlayLayer setContents:(id)[image CGImage]];

    overlayLayer.frame = CGRectMake(0, 0, size.width, size.height);

    [overlayLayer setMasksToBounds:YES];

    // 2 - set up the parent layer

    CALayer *parentLayer = [CALayer layer];

    CALayer *videoLayer = [CALayer layer];

    parentLayer.frame = CGRectMake(0, 0, size.width, size.height);

    videoLayer.frame = CGRectMake(0, 0, size.width, size.height);

    [parentLayer addSublayer:videoLayer];

    [parentLayer addSublayer:overlayLayer];

    // 3 - apply magic

    composition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer

    但是在iOS 10下发现,有时候这个方法导出的视频不能立即播放,要等一会儿视频才能播放,于是就使用了下面的这个接口

    CIFilter *watermarkFilter = [CIFilter filterWithName:@"CISourceOverCompositing"];

    mainVideoComposition= [AVMutableVideoComposition videoCompositionWithAsset:mixComposition applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest * _Nonnull request) {

    CIImage *watermarkImage  =  [[CIImage alloc] initWithCGImage:image.CGImage];

    CIImage *source = request.sourceImage;

    [watermarkFilter setValue:source forKey:kCIInputBackgroundImageKey];

    [watermarkFilter setValue:[watermarkImage imageByApplyingTransform:CGAffineTransformMakeScale(source.extent.size.width/watermarkImage.extent.size.width, source.extent.size.height/watermarkImage.extent.size.height)] forKey:kCIInputImageKey];

    [request finishWithImage:watermarkFilter.outputImage context:nil];

    }];

    相关文章

      网友评论

      • 8afce4bcf1e6:你好,我用第一种方法后,水印会有点模糊,有什么解决方法吗?
        akielvis:@学无止境20152015 水印图片的分辨率和视频的分辨率不一样吧

      本文标题:iOS视频添加水印遇到的坑

      本文链接:https://www.haomeiwen.com/subject/vhpumttx.html