iphonecobjective-ccocoavideo-watermarking

Cocoa - Add Video Watermark General Info


Just looking for how to programmatically add a watermark or some sort of overlay to video using cocoa. Not looking for a step by step ( although that would awesome ), but more or less looking for where I should start looking to learn how. Are there frameworks developed to work for this. Would like something native to cocoa or objective-c or c because I would like to eventually give this a go on the iPhone. Any help would be great.


Solution

  • I'm not sure if you mean just for playback, or if you'd like to export a video with a watermark that'll show up on other players.

    If you mean just for playback, you can probably just add a view on top of the player view on Mac and iPhone that contains the watermark.

    If you'd like a watermark on the video itself, this is hard on the Mac and probably impossible on the iPhone without essentially rewriting QuickTime.

    On the Mac, the code might look like this (you need to import QTKit):

    // Make a new movie so we don't destroy the existing one
    QTMovie* movie = [[QTMovie alloc] initWithMovie:currentMovie 
                                          timeRange:QTMakeTimeRange(QTMakeTime(0,1000), [currentMovie duration]) 
                                              error:nil];
    
    // Make it editable
    [movie setAttribute:[NSNumber numberWithBool:YES] 
                 forKey:QTMovieEditableAttribute];
    
    //Get the size
    NSValue *value = [movie attributeForKey:QTMovieNaturalSizeAttribute];
    NSSize size = [value sizeValue];
    
    // Add a new track to the movie and make it the frontmost layer
    QTTrack *track = [movie addVideoTrackWithSize:size];
    [track setAttribute:[NSNumber numberWithShort:-1] forKey:QTTrackLayerAttribute];        
    
    // Create a codec dictionary for the image we're about to add
    NSDictionary *imageDict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"tiff", QTAddImageCodecType,
            [NSNumber numberWithLong:codecHighQuality], QTAddImageCodecQuality, nil];
    
    
    // Get the video length in QT speak
    
    QTTime qttime = [currentMovie duration];
    NSTimeInterval reftime;
    
    QTGetTimeInterval(qttime, &reftime);
    
    //Add the image for the entire duration of the video 
    
    [track addImage:image forDuration:qttime withAttributes:imageDict];
    
    // Finally, tell the track that it should use its alpha correctly
    
    MediaHandler media = GetMediaHandler([[track media] quickTimeMedia]);
    MediaSetGraphicsMode(media, graphicsModeStraightAlpha, NULL);
    

    ... And that's it! Your movie now has a watermark, and you can export it to file.