avcapturesession

___ answer7932657 ___

Heh, es scheint, dass niemand Lust hatte, hier mitzuspielen. Stellt sich heraus, die Antwort ist einfach. Bilder, die mit der Methode %code% erfasst werden, haben immer die folgenden Eigenschaften:

  • UIImage orientation = immer UIImageOrientationRight unabhängig von der Geräteausrichtung
  • UIIMagnetgröße = B x H (z. B. Hochformat x Hochformat, hängt von Ihrer Kameraauflösung ab)
  • CGImage size = hängt von der Geräteausrichtung ab (z. B. Hoch- oder Querformat)

Die Lösung zum Drehen des Bildes besteht also darin, die Geräteausrichtung in Verbindung mit der CGImage-Größe zu verwenden, um eine geeignete affine Transformation anzuwenden. Da ich meine eigene Frage beantworte, bin ich nicht die Lösung im Code, aber ich habe am Ende eine Routine geschrieben:

%Vor%

in einer UIImage-Kategorie mit verschiedenen Bildverarbeitungsverbesserungen.

EDIT - Implementierungsbeispiel

Ich habe eine Reihe von Anfragen für Funktionscode erhalten. Ich habe die relevante Implementierung aus einer funktionierenden App extrahiert.

%Vor%     
___ answer9491477 ___

Warum Sie AVCaptureVideoOrientationLandscape Richtig brauchen, wenn die Ausrichtung des Geräts UIDeviceOrientationLandscape Left lautet, liegt das daran, dass UIDeviceOrientationLandscape Left == UIInterfaceOrientationLandscape Richtig und die AVCaptureVideoOrientations folgen der UIInterfaceOrientation-Konvention.

Außerdem enthält UIDeviceOrientation andere Optionen wie UIDeviceOrientationFaceUp, UIDeviceOrientationFaceDown und UIDeviceOrientationUnknown. Wenn Sie Ihre Benutzeroberfläche drehen lassen, um sie an die Ausrichtung des Geräts anzupassen, können Sie versuchen, die UIDeviceOrientation stattdessen von [UIApplication sharedApplication] .statusBarOrientation abzurufen.

    
___ answer39794572 ___

Tatsächlich gibt es keinen Fehler in Ihrer Implementierung und Sie können den gesamten Switch-Fall eliminieren.

Warum die Groß- und Kleinschreibung vermieden werden kann:

Die entsprechenden Werte der Geräte- und Videoausrichtungen sind numerisch gleich, d. h. solange die Geräteausrichtung nicht unbekannt ist, können Sie UIDeviceOrientation und AVCaptureVideoOrientation

gleichsetzen

Über die verwirrende Nomenklatur:

Geräteausrichtung LandscapeLeft = & gt; Die Oberseite Ihres Telefons befindet sich auf der linken Seite.

Stellen Sie sich also vor, wo der Ausgangspunkt des Videos ist ..... das ist richtig, TOP RIGHT corner = & gt; Landschaft rechts.

Auch in der anderen Querformatausrichtung ist die Videoausrichtung von der Oberseite des Telefons entfernt. Dies ist nicht verwirrend im Falle eines Portraits und auf dem Kopf stehend

Beweis

Wenn Sie ein Standbild aufnehmen, überprüfen Sie den EXIF-Wert für die Ausrichtung. Für die linke Landschaft ist die EXIF-Ausrichtung 3 (180 Grad Inversion) Für Querformat rechts ist die EXIF-Ausrichtung 1 (keine Drehung)

Wenn Sie anzeigen, wird Ihre Exif-Ausrichtung in die entsprechende UIImageOrientation konvertiert, so dass es keine Inversion geben sollte.

Im Fall der Frontkamera habe ich bemerkt, dass EXIF-Werte einfach den Video-Orientierungswerten folgen (Spiegeleffekt wird nicht beachtet). Es werden nur 1, 3, 6, 8 Werte von EXIF ​​verwendet.

Auch der Spiegel ist immer entlang der Linie von der Oberseite des Geräts nach unten Die Landschaft wird also auf den Kopf gestellt, während das Porträt und das umgedrehte Porträt nur gespiegelt sind.

    
___ tag123iphone ___ Verwenden Sie diesen Tag NICHT, es sei denn, Sie wenden sich speziell an Apple's iPhone und / oder iPod touch. Verwenden Sie für nicht hardwareabhängige Fragen das Tag [ios]. Weitere zu betrachtende Tags sind [xcode] (aber nur, wenn es sich um die IDE selbst handelt), [swift], [objective-c] oder [cacao-touch] (aber nicht [cocoa]). Bitte verzichten Sie auf Fragen zum iTunes App Store oder zu iTunes Connect. Wenn Sie C # verwenden, markieren Sie mit [mono]. ___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ tag123avcapturedevice ___ AVCaptureDevice repräsentiert ein physisches Aufnahmegerät und die Eigenschaften, die diesem Gerät zugeordnet sind. Sie verwenden ein Erfassungsgerät, um die Eigenschaften der zugrunde liegenden Hardware zu konfigurieren. ___ tag123imagecapture ___ hilf uns dieses Wiki zu bearbeiten ___ qstnhdr ___ Warum führen AVCaptureVideoOrientation-Landschaftsmodi zu verdrehten Standbildern? ___ tag123avcapturessession ___ iPhone - Um eine Echtzeit- oder Offline-Erfassung durchzuführen, instanziieren Sie ein AVCaptureSession-Objekt und fügen entsprechende Eingaben (z. B. AVCaptureDeviceInput) und Ausgaben (z. B. AVCaptureMovieFileOutput) hinzu. ___ qstntxt ___

Ich verwende AVFoundation-Klassen, um eine benutzerdefinierte Kamera in meiner App zu implementieren. Ich nehme nur Standbilder auf, nicht Video. Ich habe alles in Ordnung, bin aber von etwas überrascht. Ich berücksichtige die Geräteausrichtung, wenn ein Standbild aufgenommen wird, und stelle die Videoausrichtung der Videoverbindung entsprechend ein. Ein Code-Snippet:

%Vor%

Beachten Sie meine Kommentare in den Landschaftsfällen. Ich muss das Orientierungsmapping umkehren oder das resultierende Bild steht auf dem Kopf. Ich erfasse und speichere das Bild mit dem folgenden Code:

%Vor%

Es gibt keine andere Bildverarbeitung oder Manipulation.

Meine App funktioniert mit dem obigen Code. Ich versuche nur zu verstehen, warum die Orientierungskonstanten für Querformat-Orientierungen umgekehrt werden müssen. Danke!

    
___
2
Antworten

AVCaptureSession und AVAudioSession Videoaufnahme, während Hintergrundmusik nur einmal abgespielt wird

Nach dem Betrachten dieser Frage: AVAudioSession AVAudioSessionCategoryPlayAndRecord glitch , ich versuchte einen Stich zu versuchen, um Video-Aufnahme mit Hintergrundmusik richtig funktionieren zu bekommen. Ich begnüge mich mit dem Audio-Panne...
15.09.2017, 03:25
1
Antwort

AVCaptureVideoPreviewLayer falsche Ausrichtung, wenn UI-Rotation deaktiviert ist

Ich habe eine AVCaptureVideoPreviewLayer -Instanz zu einer View-Controller-Ansichtshierarchie hinzugefügt. %Vor% Der Layerrahmen wird in -viewDidLayoutSubviews method aktualisiert. View-Controller-Ausrichtung ist auf UIInterfaceOrient...
27.04.2017, 13:12
1
Antwort

Hintergrund Audio für iOS Video App

Also habe ich an einer Video-Capture-App gearbeitet, die Hintergrund-Audio (von Spotify oder Apple Music) abspielt und ich habe ein kleines Problem, wenn ich eine kleine Audiounterbrechung habe, wenn ich meine App öffne, während Audio abgespielt...
22.06.2016, 22:50
1
Antwort

AVCaptureDevice adjusttingExposure ist False, aber das aufgenommene Bild ist dunkel

Die Mac OS X-Anwendung, die ich gerade programmiere, nimmt eine Fotoaufnahme mit der integrierten macbook-Facetime-Kamera vor. Auf MacBookAir3,2, MacBookPro8,2 und MacBookPro10,2 funktioniert es gut, aber auf neuen Macbooks dauert es "dunkle"...
02.12.2014, 23:03
1
Antwort

In AVFoundation, wie man Aufnahme und Wiedergabe synchronisiert

Ich bin daran interessiert, Medien mit AVCaptureSession in iOS aufzuzeichnen, während ich mit einem AVPlayer Medien wiedergebe (genauer gesagt, ich spiele Audio und Video auf, aber ich bin mir nicht sicher, ob das wichtig ist). Das Problem is...
14.09.2013, 16:22
1
Antwort

AVFoundation Kamera-Tutorial

Gibt es ein grundlegendes Tutorial für die AVFoundation zur Verwendung mit der Kamera? UIImagePicker ist nicht das richtige Tool für meine App und es sieht so aus, als ob es das ist, aber ich bin mir nicht sicher, wie ich es in Gang bringen s...
04.09.2010, 18:18
3
Antworten

Warum führen AVCaptureVideoOrientation-Landschaftsmodi zu verdrehten Standbildern?

Ich verwende AVFoundation-Klassen, um eine benutzerdefinierte Kamera in meiner App zu implementieren. Ich nehme nur Standbilder auf, nicht Video. Ich habe alles in Ordnung, bin aber von etwas überrascht. Ich berücksichtige die Geräteausrichtung,...
21.10.2011, 06:00