2013-02-16 6 views
8

Sto cercando di capire come posso implementare la funzionalità per sospendere e riprendere ripetutamente l'acquisizione video in una singola sessione, ma avere ogni nuovo segmento (i segmenti catturati dopo ogni pausa) aggiunto allo stesso file video, con AVFoundation. Attualmente, ogni volta che premo "stop" e "registra" di nuovo, salva semplicemente un nuovo file video nell'album del mio iphone e inizia a catturare in un file separato/nuovo. Devo essere in grado di premere il pulsante "record/stop" più e più volte ... solo acquisire l'audio del video & quando la registrazione è attiva ... quindi quando viene premuto il pulsante "done", avere un singolo file AV con tutte le segmenti insieme. E tutto questo deve accadere nella stessa sessione di cattura/sessione di anteprima.Sospendi e riprendi l'acquisizione video per lo stesso file con AVFoundation in iOS

l'unico modo in cui posso pensare di provare questo è quando viene premuto il pulsante "done", prendendo ogni singolo file di output e combinandoli in un unico file ... Ma sono abbastanza sicuro il tempo di elaborazione per incollare un gruppo di clip separate insieme non sarà accettabile. Inoltre, sembra proprio che questo sia un modo davvero incasinato di fare questo &, con troppo codice.

C'è un modo semplice per sospendere l'acquisizione video in una singola sessione e semplicemente riprendere l'acquisizione sullo stesso file? O altre idee?

Se non è troppo disturbo, codice di esempio mi avrebbe aiutato fuori una tonnellata ... Sto ancora imparando & insegnamento me stesso, quindi non sono grande con i seguenti la terminologia gergo & nelle spiegazioni. Grazie

edit: questo è il progetto che sto iniziando ad imparare con AVFoundation ... quindi questo è il codice che sto cercando di modificare per ottenere la funzionalità di cui sopra: http://developer.apple.com/library/ios/#samplecode/AVCam/Introduction/Intro.html

+0

Se si finisce per trovare una risposta a questa domanda, mandami un messaggio. –

+0

@Daniel Hai trovato la soluzione? –

risposta

10

Invece di utilizzare l'output del file filmato dalla sessione di acquisizione, è possibile utilizzare AVCaptureVideoDataOutput e, nel delegato, passare gli esempi a un'istanza di AVAssetWriterInput. Quindi è possibile disaccoppiare l'anteprima dalla registrazione. Se il delegato non inoltra i buffer allo scrittore asset, non c'è registrazione per quella parte.

Quando si desidera avviare la registrazione di una seconda sessione (e successiva) sullo stesso file, è necessario regolare i timestamp in modo che siano sequenziali dal punto in cui si è arrestato e sarà necessario assicurarsi che fai la stessa regolazione sia per l'audio che per il video in modo che rimangano nel lavandino. Quindi un po 'laborioso, ma sicuramente funzionale.

Edit: c'è un applicazione per iPhone di esempio che illustra questo a http://www.gdcl.co.uk/2013/02/20/iPhone-Pause.html

G

+0

Grazie, Geraint, per la risposta. Sono ancora nuovo all'obiettivo-c e sto cercando di armeggiare per capire cosa hai detto. Certamente capisco la logica dietro la tua risposta, e sembra che probabilmente funzionerebbe. Il problema per me è capire come implementare realmente. Sto scavando intorno ad esempi/codice di esempio per pezzi e pezzi di ciò che hai suggerito, ma sto avendo un momento difficile. Continuerò a dare la caccia e se riuscirò a farlo funzionare, accetterò immediatamente la tua risposta. Nel frattempo, se hai qualche codice di esempio o link per iniziare, mi sarebbe di grande aiuto! Thx –

+0

Ho un po 'di codice. Lo sistemo in un campione pubblicabile. Suonami se non vedi qualcosa nel giro di pochi giorni. –

+0

@Geraint Davies - Sto cercando esattamente la stessa cosa. Puoi per favore pubblicare il tuo codice qui su github. Anch'io non riesco a trovare alcun commento o esempio su questo. Grazie –

1

In generale, io uso startRunning e stopRunning se sto usando AVCaptureSession. Suppongo che lo farai.

Vedere la documentazione di AVCaptureSession.

+0

Non si interrompe L'interruzione interrompe l'intera sessione e termina l'anteprima dal vivo di ciò che la fotocamera acquisirà durante la registrazione effettiva? –

+0

Corretto perché quando si crea un'istanza di AVCaptureVideoPreviewLayer, lo si fa con una sessione specifica. Stavi cercando di mantenere attivo il livello di anteprima ed essere in grado di avviare l'acquisizione/arresto dell'acquisizione?simile al videoregistratore? – Spectravideo328

+0

Sì, ho bisogno di mantenere attivo il livello di anteprima. l'utente deve essere fondamentalmente in grado di puntare, catturare per qualche secondo, fermarsi .... guardare qualcos'altro, puntare, catturare, fermarsi .... guardare qualcos'altro, puntare, sparare, fermarsi ... ecc. tutto nella stessa sessione. Al termine, disporre di un singolo file video che riproduce semplicemente ogni acquisizione in un unico file scorrevole. Ho anche modificato la mia domanda un po 'per essere un po' più chiara e avere un po 'più senso –

0

Si può semplicemente utilizzare HBRecorder. HBRecorder è uno strumento di registrazione video con funzione di pausa/avvio & bellissime animazioni tra i segmenti video.

+0

Posso chiederti di dare un'occhiata a [Come offrire librerie open source personali?] (// meta.stackexchange.com/q/229085) per favore? –