2013-02-11 16 views
9

Używanie kontrolera UIImagePicker lub AVFoundation Potrzebuję przechwycić lub nagrać wideo, w którym powinien być rejestrowany nie tylko obraz z kamery, ale także subplik. Widziałem wiele przykładów, aby dodać obraz nakładki do podglądu kamery, ale to, czego chcę, to nie tylko obraz nakładki lub podglądu tekstu, ale także faktyczne nagrywanie nakładki w końcowym wyjściu wideo.Nagrywanie wideo z nakładkowym tekstem i obrazkiem

// dodanie Graficzna warstwa

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; 

// Ustaw wideo Podgląd Warstwa

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]; 

// dodanie warstwy tekstowej

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]; 

// nawet dodać przycisk nakładki !! !

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]; 

Przykład ten jest modyfikowany z tego przykładowego kodu - Robi dodać tekst i rysunek do podglądu wideo, ale nie rejestruje te w ostatecznym pliku wyjściowego.

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

+0

Istnieje wideo WWDC, które omawia tę procedurę i powiązany kod źródłowy. Nie pamiętam teraz nazwy prezentacji (AVFoundation ...), ale powinno być łatwe do znalezienia. –

+0

@skinnyTOD: faktycznie przeszliśmy przez wiele filmów WWDC o AVFoundation, ale nie mogłem znaleźć prostego, ale dokładnego kodu dla tej konkretnej potrzeby, biorąc w ten sposób pomoc w StackOverFlow. Tak czy inaczej nadal surfuję po wideo WWDC opublikuję rozwiązanie, gdy tylko je otrzymam. –

+0

Znaleziono jeden kod dodający znak wodny do filmu wideo AVSimpleEditor to prosta aplikacja do edycji filmów oparta na AVFoundation, która wyświetla ... ... pokazuje, jak można ją wykorzystać do prostych zadań edycji wideo. Pokazuje również, w jaki sposób współdziałają one z odtwarzaniem (AVPlayerItem) i eksportem (AVAssetExportSession). Aplikacja wykonuje przycinanie, obracanie, przycinanie, dodawanie muzyki, dodawanie znaku wodnego i eksportowanie. Ta próbka ma włączoną obsługę ARC. http://developer.apple.com/library/ios/#samplecode/AVSimpleEditoriOS/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012797-Intro-DontLinkElementID_2 –

Odpowiedz

Powiązane problemy