I had to do something similar. In the end I just added a CALayer in the UIImageView on top of the video stream.
For example: add a watermark logo (Xamarin code - extension method) where parentLayer would be the UIImageView.Layer
public static void AddWatermarkLayer(this CALayer parentLayer, string watermarkImagePath, nfloat watermark_border, nfloat watermark_size)
{
nfloat watermark_x = parentLayer.Frame.Width - (watermark_size + watermark_border);
nfloat watermark_y = watermark_border;
var watermarkImage = UIImage.FromFile(watermarkImagePath); //
CALayer aLayer = new CALayer();
aLayer.Contents = watermarkImage.CGImage;
aLayer.Frame = new CGRect(watermark_x, watermark_y, watermark_size, watermark_size);
aLayer.Opacity = 1f;
parentLayer.AddSublayer(aLayer);
}
If you need to actually save this 'edited' stream, you'll have to use AVMutableVideoComposition to apply the changes that you want and save it to a file.