Sì, si può fare la maggior parte delle cose che menzionato. Penso che non sia così semplice accedere ai file multimediali del telefono. Ma puoi leggere i dati dalla rete ed esportarli sul tuo rullino fotografico, se lo desideri.
Per prima cosa devi importare i tuoi video o file audio.
Quello che serve per iniziare è il proprio videoplayer che si crea nella propria vista. Se non ti piace riprodurre i tuoi video ma semplicemente comporre i tuoi contenuti, puoi semplicemente andare senza vista.
Questo è molto facile: 1. Creare una composizione mutevole:
AVMutableComposition *composition = [AVMutableComposition composition];
Questo terrà i tuoi video. Ora hai un Asset di composizione vuoto. Aggiungere alcuni file dalla directory o dal Web:
NSURL* sourceMovieURL = [NSURL fileURLWithPath:moviePath];
AVURLAsset* sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
Quindi aggiungere il video alla composizione
// calculate time
CMTimeRange editRange = CMTimeRangeMake(CMTimeMake(0, 600), CMTimeMake(sourceAsset.duration.value, sourceAsset.duration.timescale));
// and add into your composition
BOOL result = [composition insertTimeRange:editRange ofAsset:sourceAsset atTime:composition.duration error:&editError];
Se si desidera aggiungere altri video nella vostra composizione, è possibile aggiungere un altro Assets e impostalo nuovamente nella composizione utilizzando il tuo intervallo di tempo. Ora è possibile esportare la nuova composizione utilizzando il codice in questo modo:
NSError *exportError = nil;
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality];
NSURL *exportURL = [NSURL fileURLWithPath:exportVideoPath];
exportSession.outputURL = exportURL;
exportSession.outputFileType = @"com.apple.quicktime-movie";
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusFailed:{
NSLog (@"FAIL");
[self performSelectorOnMainThread:@selector (doPostExportFailed:)
withObject:nil
waitUntilDone:NO];
break;
}
case AVAssetExportSessionStatusCompleted: {
NSLog (@"SUCCESS");
[self performSelectorOnMainThread:@selector (doPostExportSuccess:)
withObject:nil
waitUntilDone:NO];
break;
}
};
}];
Se si desidera riprodurre i tuoi video, utilizzare il codice come questo (presumo, si ha accesso alla visualizzazione):
// create an AVPlayer with your composition
AVPlayer* mp = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:composition]];
// Add the player to your UserInterface
// Create a PlayerLayer:
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:mp];
// integrate it to your view. Here you can customize your player (Fullscreen, or a small preview)
[[self view].layer insertSublayer:playerLayer atIndex:0];
playerLayer.frame = [self view].layer.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
E infine riprodurre il video:
[mp play];
Esporta in rullino fotografico:
NSString* exportVideoPath = >>your local path to your exported file<<
UISaveVideoAtPathToSavedPhotosAlbum (exportVideoPath, self, @selector(video:didFinishSavingWithError: contextInfo:), nil);
E ottenere la notifica, se è finito (il vostro metodo di callback)
- (void) video: (NSString *) videoPath didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
// Error is nil, if succeeded
NSLog(@"Finished saving video with error: %@", error);
// do postprocessing here, i.e. notifications or UI stuff
}
Purtroppo non ho trovato alcuna soluzione "legale" per leggere dal CameraRoll.
una fonte molto buona su come iniziare è:
http://www.subfurther.com/blog/?cat=51
scaricare VTM_Player.zip, VTM_AVRecPlay.zip o VTM_AVEditor.zip per un tempo molto bella introduzione in questo
Grazie! Buona risposta! – SAKrisT
Ciao, il tuo codice non mostra il video ... quale può essere il problema? –
@iError: Hmm, non è facile rispondere perché ci sono molti ostacoli sulla strada. Ho scoperto che a volte la rotazione del lettore di film viene ruotata, il che significa che può essere lì, ma al di fuori della cornice visibile. Se stai sviluppando usando arco assicurati di avere un riferimento forte o un riferimento di proprietà al tuo lettore di film. ARC potrebbe rilasciare l'oggetto giocatore immediatamente dopo aver lasciato il metodo in cui è stato creato. Controlla se hai attivato la funzione di autorotazione. Forse hai bisogno di usare la proprietà "layer.transform" per impostare la rotazione. – JackPearse