2013-02-11 15 views
9

Bir UIImagePicker Controller veya AVFoundation kullanarak ya yalnızca kamera çıkışının değil, aynı zamanda yer paylaşımlı alt görüntülerin kaydedileceği videoyu da kaydetmem veya kaydetmem gerekiyor. Bindirme görüntüsünü kamera önizlemesine eklemek için birçok örnek gördüm, ancak istediğim sadece görüntü veya metin önizlemesini değil aynı zamanda son video çıkışındaki bindirmenin gerçek kaydını da kapsıyor.Yer paylaşımlı metni ve görüntüyü içeren video kaydetme

// Grafik Katman ekleme

CALayer *theDonut = [CALayer layer]; 
theDonut.bounds = CGRectMake(50,50, 150, 150); 
theDonut.cornerRadius = 50/2; 
theDonut.backgroundColor = [UIColor clearColor].CGColor; 
theDonut.borderWidth = 50/5; 
theDonut.borderColor = [UIColor orangeColor].CGColor; 

// Video Önizleme Katman

videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:capSession]; 
videoPreviewLayer.frame = videoPreview.bounds; 
videoPreviewLayer.backgroundColor = [UIColor blackColor].CGColor; 
videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 

videoPreview.layer.masksToBounds = YES; 
[videoPreview.layer addSublayer:videoPreviewLayer]; 
[videoPreview.layer addSublayer:theDonut]; 

// ekleyerek metin katmanı oluşturun

UIFont *font = [UIFont fontWithName:@"MarkerFelt-Thin" size:40.0]; 
    CGSize maxSize = CGSizeMake(480, 10000.0); 
    CGSize labelSize = [@"Test Text" sizeWithFont:font constrainedToSize:maxSize lineBreakMode:NSLineBreakByWordWrapping]; 
    CGRect labelFrame = CGRectMake(50.0, 10.0, labelSize.width, labelSize.height); 
    UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 
    label.font = font; 
    label.text = @"Test Text"; 
    label.numberOfLines = 0; 
    [videoPreview addSubview:label]; 

// hatta düğme bindirmesi eklemek !! !

UIButton *snap = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [snap setImage:[UIImage imageNamed:@"takePic"] 
      forState:UIControlStateNormal]; 
    [snap addTarget:self 
      action:@selector(pickerCameraSnap:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    snap.frame = CGRectMake(74, 370, 178, 37); 

    [videoPreview addSubview:snap]; 

    // 8) Commit session configuration 
    // 9) Start running capture session 
    // ======================================== 
    [capSession commitConfiguration]; 
    [capSession startRunning]; 


    //Make sure video is not recording 
    [[videoDataOutput connectionWithMediaType:AVMediaTypeVideo] setEnabled:NO]; 

Bu Örnek

bu örnek koddan değiştirilir - Videonun önizleme metin ve çizim eklese ama son çıkış dosyasında olanlar kaydetmez.

http://ioscoreframeworks.com/assets/code/DemoCapture.zip

+0

Bunun nasıl yapılacağını gösteren bir WWDC videosu var ve ilişkili kaynak kodu var. Şimdi sunum adını hatırlayamıyorum (AVFoundation ...) ama bulmak kolay olmalı. –

+0

@skinnyTOD: Aslında AVFoundation hakkında birçok WWDC videosundan geçtiniz ancak StackOverFlow'da bu özel ihtiyaç için basit ama kesin kodu bulamadınız. Her neyse hala WWDC videolar aracılığıyla sörf yapıyorum bir tane olsun en kısa sürede çözüm gönderecek. –

+0

Videoya filigran ekleme yapan bir kod buldu AVSimpleEditor, basit video düzenleme görevleri için nasıl kullanılabileceğini gösteren basit bir AVFoundation tabanlı film düzenleme uygulamasıdır. Ayrıca oynatma (AVPlayerItem) ve dışa aktarma (AVAssetExportSession) ile nasıl etkileşimde olduklarını da gösterir. Uygulama, kırpma, döndürme, kırpma, müzik ekleme, filigran ekleme ve dışa aktarma işlemlerini gerçekleştirir. Bu örnek ARC etkin. http://developer.apple.com/library/ios/#samplecode/AVSimpleEditoriOS/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012797-Intro-DontLinkElementID_2 –

cevap

İlgili konular