Chciałbym użyć UIImagePickerController
do nagrania wielu klipów wideo, a następnie połączyć je w jeden film, podobny do tego, w jaki sposób działa aplikacja Vine. Czy ktoś może wskazać mi właściwy kierunek, w jaki sposób mogę połączyć klipy wideo w jeden film?Połącz klipy wideo w jeden klip wideo, taki jak Vine
7
A
Odpowiedz
1
Strona Ray'a Wenderlicha zawiera samouczek, który to omawia. http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
0
Oto przykład zszywania razem filmów, częściowo na podstawie bloga Ray Wenderlich.
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[appDelegate.playerLayer removeFromSuperlayer];
if (self.firstAsset)
{
self.secondAssetURL = [info objectForKey:UIImagePickerControllerMediaURL];
self.secondAsset = [AVAsset assetWithURL:self.secondAssetURL];
}
else
{
self.firstAssetURL = [info objectForKey:UIImagePickerControllerMediaURL];
self.firstAsset = [AVAsset assetWithURL:self.firstAssetURL];
}
if (self.secondAsset)
{
CMTime recordTime = CMTimeMakeWithSeconds(self.recordTime, NSEC_PER_SEC);
AVMutableComposition *mixComposition = [AVMutableComposition new];
AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, self.firstAsset.duration) ofTrack:[[self.firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, self.secondAsset.duration)
ofTrack:[[self.secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:recordTime error:nil];
AVURLAsset *firstAudioAsset = [[AVURLAsset alloc] initWithURL:self.firstAssetURL options:nil];
AVURLAsset *secondAudioAsset = [[AVURLAsset alloc] initWithURL:self.secondAssetURL options:nil];
AVAssetTrack *firstAudioTrack = [[firstAudioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVAssetTrack *secondAudioTrack = [[secondAudioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAudioAsset.duration) ofTrack:firstAudioTrack atTime:kCMTimeZero error:nil];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAudioAsset.duration) ofTrack:secondAudioTrack atTime:recordTime error:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithFormat:@"mergeVideo-%d.mov",arc4random() % 1000]];
NSURL *url = [NSURL fileURLWithPath:myPathDocs];
// 5 - Create exporter
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL=url;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{
NSLog(@"we are now exporting");
int exportStatus = exporter.status;
switch (exportStatus) {
case AVAssetExportSessionStatusFailed: {
// log error to text view
NSError *exportError = exporter.error;
NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError);
break;
}
case AVAssetExportSessionStatusCompleted: {
NSLog (@"AVAssetExportSessionStatusCompleted");
self.firstAssetURL = exporter.outputURL;
self.firstAsset = [AVAsset assetWithURL:self.firstAssetURL];
dispatch_async(dispatch_get_main_queue(), ^{
[self layoutVideo:exporter.outputURL];
});
break;
}
default: { NSLog (@"didn't get export status"); break;}
}
}];
}
else
{
[self layoutVideo:[info objectForKey:@"UIImagePickerControllerMediaURL"]];
}
}
Powiązane problemy
- 1. W wideo HTML5, jak odtwarzać mały klip z długiego wideo?
- 2. Nagrywanie wideo typu Vine z PhoneGap
- 3. Jak łączyć klipy wideo z inną orientacją za pomocą AVFoundation
- 4. Wiele źródeł wideo połączone w jeden
- 5. Jak dynamicznie zmieniać wideo wideo YouTubeID
- 6. Wideo wstępne pełne wideo HTML5 w javascript
- 7. Wideo z zapętlaniem wideo Replenish
- 8. Jak mogę oglądać wideo w widoku wideo w określonej pozycji?
- 9. Jak osadzić gps w wideo
- 10. łączenie oddzielnych plików audio i wideo w jeden plik C++
- 11. Formanty javascript wideo HTML5 - ponowne uruchamianie wideo
- 12. Jak nagrać wideo w iPhonie?
- 13. Jak zatrzymać wideo w AVPlayer?
- 14. Kompresuj wideo jak WhatsApp
- 15. Pobierz miniaturkę wideo z adresu URL wideo
- 16. Tło wideo w formacie HTML5, zachowaj centrum wideo w centrum
- 17. Uruchom wideo w wpf
- 18. Wyświetlanie wideo w DirectX
- 19. Jak wykrywać obsługiwane formaty wideo dla tagu wideo HTML5?
- 20. Odtwarzanie wideo w widoku tekstury z proporcjami wideo
- 21. Jak uzyskać prawidłowy adres URL pliku wideo z osadzonego wideo?
- 22. Przełączanie strumieniowania wideo
- 23. Wideo krzyżowe w Safari
- 24. Wideo Wydanie: android nagrane wideo nie grał w iPhone
- 25. Android - 360 metadane wideo
- 26. Jak połączyć pliki audio i wideo w Androidzie
- 27. Prześlij wideo i utwórz miniaturę z wideo w django
- 28. Uzyskaj czas odtwarzania wideo odtwarzanego w trybie wideo?
- 29. Nagrywanie wideo z innym rozmiarem podglądu niż wynikowy plik wideo
- 30. R + połącz listę wektorów w jeden wektor