Sto cercando di utilizzare AVCaptureSession per acquisire video dalla telecamera e quindi vorrei utilizzare AVAssetWriter per scrivere i risultati in un file (in particolare, utilizzare più AVAssetWriters per scrivere l'acquisizione in video di blocchi, ma non è necessario complicare questa domanda con quello). Tuttavia, ho difficoltà a capire dove i dati devono essere effettivamente passati a AVAssetWriter. Nella documentazione per gli sviluppatori Apple ho visto solo i dati di AVCaptureSession passati a un AVCaptureFileOutput. Forse mi manca qualcosa però. È possibile utilizzare AVAssetWriter come output della sessione di acquisizione? Un esempio rilevante o un bit di codice (anche se non necessario) sarebbe apprezzato. Grazie mille!AvFoundation - Come connettere AVCaptureSession e AVAssetWriter?
risposta
Qual è il tuo obiettivo, esattamente? Perché stai chiedendo (l'uso di un AVAssetWriter come output per una AVCaptureSession) non è possibile.
Fondamentalmente, un oggetto AVCaptureSession
dispone di input (ad esempio una telecamera, rappresentata da alcune sottoclasse AVCaptureInput
) e di uscite (nel formato di AVCaptureOutput
). E una AVAssetWriter
non è una sottoclasse AVCaptureOutput
, quindi non c'è modo di usarla direttamente da una AVCaptureSession.
Se si desidera utilizzare un AVAssetWriter, dovrete scrivere i dati utilizzando un'istanza AVCaptureFileOutput
, e poi leggere di nuovo con una AVAssetReader
, modificare i propri dati in qualche modo, e poi uscita tramite un AVAssetWriter
.
Ultima cosa da tenere a mente: AVAssetReader
è documentato per non garantire le operazioni in tempo reale.
Dai uno sguardo allo http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html. Questo mostra come connettere l'output di acquisizione con il writer di asset e quindi estrae i dati dal writer di asset per lo streaming.
G
Hmm, interessante. Stavo cercando di andare fuori da ciò che ho trovato nella risposta [qui] (http://stackoverflow.com/questions/13851481/http-live-streaming-server-on-iphone) e i commenti di upvoted [qui] (http: //stackoverflow.com/questions/3444791/streaming-video-from-an-iphone) (tra gli altri) per cui suggeriscono che lo streaming può essere ottenuto creando due AVAssetWriters e usandoli uno alla volta. – golmschenk
Questo sembra essere, in base alla mia ricerca, il modo più comune in cui viene realizzato lo streaming di video di una telecamera live da un iphone. Ora che ne hai parlato, sono più confuso sul motivo per cui questo è il metodo suggerito ... – golmschenk
Non hai bisogno di usare un 'AVAssetWriter' per spezzare il video in blocchi di 10 secondi. Puoi farlo con 'AVCaptureMovieFileOutput'; imposta la proprietà 'maxRecordedDuration' su 10s e riavvia la registrazione (in un nuovo file) in' -captureOutput: didFinishRecordingToOutputFileAtURL: fromConnections: error: 'per ottenere i successivi 10s. – zadr