2017-01-30 10 views
0

Ich habe erfolgreich AVAssetWriter zum Aufnehmen und Speichern von Videos auf meiner Kamera eingerichtet. Das einzige Problem besteht darin, dass das erste Bild des aufgezeichneten Videos ein leerer weißer Rahmen ist. Kann ich das irgendwie umgehen? Was ist los?AVAssetWriter Videoaufnahme in Swift?

Antwort

1

Machst du irgendeine Manipulation an Videoframes? In meinem Fall habe ich die Größe der Videorahmen vor dem Schreiben geändert. In diesem Fall wurden zunächst Audioframes geschrieben und nach wenigen Frames wurden Videoframes geschrieben. Aus diesem Grund wurden die ersten Frames in der Vorschau weiß dargestellt. Aber es war kaum in der Videowiedergabe bemerkbar.

Lösung:

überspringen Schreiben von Audio-Frames, bis Sie einen Video-Frame avasssetwriter

mit schreiben

Empfohlene Code für captureoutput

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection!) { 

    if CMSampleBufferDataIsReady(sampleBuffer) == false 
    { 
     // Handle error 
     return; 
    } 
    startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer) 

    if videoWriter.status == AVAssetWriterStatus.Unknown { 
       videoWriter.startWriting() 
       videoWriter.startSessionAtSourceTime(startTime) 
       return 
     } 

    if videoWriter.status == AVAssetWriterStatus.Failed { 
     // Handle error here 
     return; 
    } 

    // Here you collect each frame and process it 

    if(recordingInProgress){ 

    if let _ = captureOutput as? AVCaptureVideoDataOutput { 

     if videoWriterInput.isReadyForMoreMediaData{ 
      videoWriterInput.append(sampleBuffer) 
      video_frames_written = true 
     } 
    } 
    if let _ = captureOutput as? AVCaptureAudioDataOutput { 
      if audioWriterInput.isReadyForMoreMediaData && video_frames_written{ 
       audioWriterInput.append(sampleBuffer) 
      } 

     } 

    } 

} 
+0

Ich dachte, das könnte funktionieren, aber es scheint, Obwohl ich Audioframes nur schreibe, wenn Videoframes geschrieben werden, gibt es immer noch einen weißen Frame, in dem weder Video noch Au Dio sind aufgezeichnet. Irgendwelche anderen Vorschläge? –

+0

können Sie die aufgenommene Datei teilen und ein Protokoll für den ersten Sample-Puffer sein? – manishg

+0

Hier ist ein Beispiel für das Video https://drive.google.com/file/d/0B2QAK-lm39WhdVlqa0hSY0tNaGM/view?usp=sharing. Die Art und Weise, wie der Rekorder eingerichtet wird, besteht darin, ein neues Segment alle eine Sekunde aufzunehmen, aber das Problem ist nicht damit, weil es immer noch einen leeren Rahmen ohne Video oder Audio für die erste Sekunde der Aufzeichnung gibt. –