Hi, I have 5 local image on local, and wanna create video from these images and post it to friends or share it on social media.
I wrote as below but not working.Could you please help about it?
/********************************************************/
void CreateVideo()
{
SizeF size = new SizeF(480, 320);
String betaCompressionDirectory =
IOManager.GetPath("Movie.m4v");
IntPtr error;
NSUrl
outputPath=NSUrl.FromFilename(betaCompressionDirectory);
AVAssetWriter videoWriter;
try{
videoWriter=AVAssetWriter.FromUrl(outputPath,"com.apple.quicktime-movie",error);
if(videoWriter==null){
return;
}
}catch(Exception ex)
{
Console.WriteLine("Hata 1: "
+ex.Message);
return;
}
NSError nserror;
if (error != IntPtr.Zero)
nserror = (NSError) Runtime.GetNSObject (error);
NSObject[] keys = new NSObject[]{
new NSString("AVVideoCodecKey")
,new NSString("AVVideoWidthKey")
,new
NSString("AVVideoHeightKey")
};
NSObject[] objects = new NSObject[]{
new NSString("AVVideoCodecH264")
,new NSNumber(480)
,new
NSNumber(320)
};
NSDictionary
videoSettings=NSDictionary.FromObjectsAndKeys(objects,keys);
AVAssetWriterInput writerInput=new
AVAssetWriterInput(AVMediaType.Video,videoSettings);
NSDictionary sourcePixelBufferAttributesDictionary =
NSDictionary.FromObjectAndKey(NSNumber.FromObject(CVPixelFormatType.CV32ARGB),CVPixelBuffer.PixelFormatTypeKey);
AVAssetWriterInputPixelBufferAdaptor adaptor=new
AVAssetWriterInputPixelBufferAdaptor(writerInput,sourcePixelBufferAttributesDictionary);
if(writerInput!=null)
{
if(videoWriter.CanAddInput(writerInput))
{
Console.WriteLine(@"I can add this
input");
videoWriter.AddInput(writerInput);
videoWriter.StartWriting();
videoWriter.StartSessionAtSourceTime(CMTime.Zero);
UIImage
img=UIImage.FromFile("images/4_1.png");
DispatchQueue dquee=new
DispatchQueue("mediaInputQueue");
int frame=0;
CVPixelBuffer
buffer=pixelBufferFromCGImage(img.CGImage,size);
adaptor.AppendPixelBufferWithPresentationTime(buffer,CMTime.Zero);
for(int i=0;i<4;i++)
{
if(writerInput.ReadyForMoreMediaData==true)
{
CMTime frameTime = new
CMTime(1, 20);
CMTime lastTime = new
CMTime(i, 20);
CMTime presentTime=new
CMTime(frameTime.Value+lastTime.Value,frameTime.TimeScale+lastTime.TimeScale);
buffer=pixelBufferFromCGImage(img.CGImage,size);
Console.WriteLine(adaptor.AppendPixelBufferWithPresentationTime(buffer,presentTime));
}
}
writerInput.MarkAsFinished();
videoWriter.FinishWriting();
}
else
{
Console.WriteLine(@"i can't add this
input");
}
}
}
/**********************************************************/
CVPixelBuffer pixelBufferFromCGImage(CGImage image,SizeF size)
{
NSObject[] keys = new NSObject[]{
CVPixelBuffer.CGImageCompatibilityKey
,
CVPixelBuffer.CGBitmapContextCompatibilityKey
};
NSObject[] objects = new NSObject[]{
new NSNumber(true)
,new NSNumber(true)
};
NSDictionary
options=NSDictionary.FromObjectsAndKeys(objects,keys);
CVPixelBuffer pxbuffer=new
CVPixelBuffer((int)size.Width,(int)size.Height,CVPixelFormatType.CV32ARGB,options);
if(pxbuffer!=null)
{
pxbuffer.Lock (0);
IntPtr pxdata=pxbuffer.BaseAddress;
if(pxdata!=IntPtr.Zero)
{
using(var rgbColorSpace =
CGColorSpace.CreateDeviceRGB())
{
using(CGBitmapContext context=
new
CGBitmapContext(pxdata,(int)size.Width,(int)size.Height,8,4*(int)size.Width,
rgbColorSpace,CGImageAlphaInfo.PremultipliedFirst)){
if(context != null)
{
context.DrawImage(new
RectangleF(0,0,image.Width,image.Height),image);
imgBufferdanGelen.Image=UIImage.FromImage(context.ToImage());
Console.WriteLine("Yeni image olusturuluyor...");
}
}
}
}
pxbuffer.Unlock(0);
}
return pxbuffer;
}
}
--
View this message in context:
http://monotouch.2284126.n4.nabble.com/Create-Video-from-image-sequences-IOS-tp3801785p3801785.html
Sent from the MonoTouch mailing list archive at Nabble.com.
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch
