iOS AVFoundation: Einstellung der Videoausrichtung

7

Ich habe mich mit verschiedenen Aspekten des Problems der Steuerung der Videoausrichtung während und nach der Aufnahme auf einem iOS-Gerät herumgeschlagen. Dank vorheriger Antworten und Dokumentation von Apple konnte ich es herausfinden. Aber jetzt, da ich etwas Video auf eine Website pushen möchte, stoße ich auf bestimmte Probleme. Ich habe dieses Problem in in dieser Frage und Die vorgeschlagene Lösung stellt fest, dass während der Videokodierung Orientierungsoptionen festgelegt werden müssen.

Das mag sein, aber ich habe keine Ahnung, wie ich das machen soll. Die Dokumentation zur Einstellung der Ausrichtung bezieht sich auf die richtige Einstellung für die Anzeige auf dem Gerät, und ich habe den Hinweis hier gefunden. Dieser Hinweis bezieht sich jedoch nicht auf die richtige Ausrichtung von Nicht-Apple-Software wie VLC oder dem Chrome-Browser.

>

Kann jemand einen Einblick geben, wie man die Ausrichtung auf dem Gerät richtig einstellt, so dass es für alle Betrachtungssoftware korrekt angezeigt wird?

    
Aaron Vegh 20.11.2012, 02:29
quelle

5 Antworten

10

Schließlich, basierend auf den Antworten von @Aaron Vegh und @Prince, habe ich meine Lösung herausgefunden: // Video konvertieren

%Vor%

// aktuelle Orientierung erhalten

%Vor%

// Video holen

%Vor%

}

    
Jagie 14.09.2014 12:48
quelle
5

In Apples Dokumentation hier heißt es:

  

Clients können nun in ihrem AVCaptureVideoDataOutput -captureOutput physisch rotierte CVPixelBuffers empfangen: didOutputSampleBuffer: fromConnection: delegate callback. In früheren iOS-Versionen würde die Frontkamera immer Puffer in AVCaptureVideoOrientationLandscapeLeft liefern, und die nach hinten gerichtete Kamera würde immer Puffer in AVCaptureVideoOrientationLandscapeRight liefern. Alle 4 AVCaptureVideoOrientations werden unterstützt und die Rotation wird hardwarebeschleunigt. Um die Rotation des Puffers anzufordern, ruft ein Client -setVideoOrientation: im Video AVCaptureConnection des AVCaptureVideoDataOutput auf. Beachten Sie, dass bei physisch rotierenden Puffern Performancekosten anfallen, also bei Bedarf nur eine Rotation anfordern. Wenn Sie zum Beispiel gedrehtes Video in eine QuickTime-Filmdatei mit AVAssetWriter schreiben möchten, sollten Sie die Eigenschaft -transform auf AVAssetWriterInput setzen, anstatt die Puffer in AVCaptureVideoDataOutput physisch zu drehen.

Also funktioniert die veröffentlichte Lösung von Aaron Vegh, die eine AVAssetExportSession verwendet, aber nicht benötigt wird. Wie der Apple-Doc sagt, wenn Sie die Ausrichtung richtig eingestellt haben möchten, so dass sie in Nicht-Apple-Quicktime-Playern wie VLC oder im Web mit Chrome wiedergegeben wird, müssen Sie die Videoausrichtung auf AVCaptureConnection für AVCaptureVideoDataOutput einstellen. Wenn Sie versuchen, es für den AVAssetWriterInput festzulegen, erhalten Sie eine falsche Ausrichtung für Spieler wie VLC und Chrome.

Hier ist mein Code, den ich beim Einrichten der Aufnahmesitzung eingestellt habe:

%Vor%

}

    
Kazzin 19.06.2013 15:59
quelle
3

Falls jemand anderes auch nach dieser Antwort sucht, ist dies die Methode, die ich mir ausgedacht habe (ein wenig modifiziert, um zu vereinfachen):

%Vor%

Dieses Zeug ist leider schlecht dokumentiert, aber durch das Zusammenfassen von Beispielen aus anderen SO-Fragen und das Lesen der Header-Dateien konnte ich das zum Laufen bringen. Hoffe das hilft jedem anderen!

    
Aaron Vegh 26.11.2012 03:20
quelle
2

Verwenden Sie diese unter method , um correct orientation gemäß video asset orientation in AVMutableVideoComposition

festzulegen %Vor%     
Paresh Navadiya 03.05.2013 05:06
quelle
1

Seit iOS 5 können Sie rotierte CVPixelBuffers mit AVCaptureVideoDataOutput anfordern. hier . Dadurch erhalten Sie die korrekte Ausrichtung, ohne das Video erneut mit AVAssetExportSession erneut verarbeiten zu müssen.

    
CEarwood 04.05.2013 05:31
quelle

Tags und Links