Comment obtenir de caméra frontale, caméra arrière et audio avec AVCaptureDeviceDiscoverySession
Avant iOS 10 est sorti, j'ai été en utilisant le code suivant pour obtenir la capture vidéo et audio pour mon enregistreur vidéo:
for device in AVCaptureDevice.devices()
{
if (device as AnyObject).hasMediaType( AVMediaTypeAudio )
{
self.audioCapture = device as? AVCaptureDevice
}
else if (device as AnyObject).hasMediaType( AVMediaTypeVideo )
{
if (device as AnyObject).position == AVCaptureDevicePosition.back
{
self.backCameraVideoCapture = device as? AVCaptureDevice
}
else
{
self.frontCameraVideoCapture = device as? AVCaptureDevice
}
}
}
Quand iOS 10 est finalement sorti, j'ai reçu l'avertissement suivant lorsque j'ai été l'exécution de mon code. Notez que mon enregistreur vidéo était encore en train de doucement pendant environ 2 semaines.
appareils () " a été déprécié dans iOS 10.0: Utilisation AVCaptureDeviceDiscoverySession à la place.
Comme je l'ai été l'exécution de mon code ce matin, mon enregistreur vidéo cessé de travailler. xCode8 ne me donne pas toutes les erreurs, mais le previewLayer pour la capture de l'appareil photo est complètement blanc. Alors quand j'ai commencer l'enregistrement j'ai l'erreur suivante:
Erreur de Domaine=AVFoundationErrorDomain Code=-11800 "L'opération n'a pas pu être terminée" UserInfo={NSLocalizedDescription=L'opération n'a pas pu être terminée, NSUnderlyingError=0x17554440 {Erreur de Domaine=NSOSStatusErrorDomain Code=-12780 "(null)"}, NSLocalizedFailureReason=Une erreur inconnue s'est produite (-12780)}
Je crois qui a quelque chose à voir avec le fait que je suis en utilisant le obsolète approche AVCaptureDevice.devices()
. Donc, je me demandais comment utiliser AVCaptureDeviceDiscoverySession
à la place?
Merci pour votre aide d'avance!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir la caméra frontale avec les éléments suivants:
La caméra arrière:
Et le microphone:
Swift 4, iOS 10+ et Xcode 10.1 remplace
avec AVCaptureDevice.DiscoverySession mise en œuvre
Besoin de l'envelopper avec #disponible(iOS 10,*) vérifier.
if let cameraID = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.front).devices.first?.localizedName{ //cameraID = "Front Camera" }
AVCaptureDeviceType
a été remplacé parAVCaptureDevice.DeviceType
etAVCaptureDevicePosition
a été remplacé parAVCaptureDevice.Position
(XCode 9.2 / Swift 4)Voici mon code (Swift 3) pour obtenir la position de la caméra :
Si vous le souhaitez, vous pouvez également obtenir la nouvelle devicesTypes de l'iPhone 7+ (double caméra) par la modification de la deviceTypes tableau.
Voici une bonne lecture : https://forums.developer.apple.com/thread/63347
Il fonctionne sur Xcode 9.2 et Swift 4
https://developer.apple.com/documentation/avfoundation/avcapturedevice/2361508-default
Swift 3
Pour la sélection de la caméra arrière:(vous pouvez aussi changer .de retour en tant que de besoin)
Pour la sélection d'un autre deviceType ajoutez-le simplement à l'intérieur de l' [ ] (j'.e:
[deviceTypeCamera, AVCaptureDeviceType.builtInMicrophone]
(ou créer un privé laisser... comme je l'ai fait dans le code avec la caméra arrière)
exemple: iOS 11 Swift 4
Essayer de code ci-dessous pour obtenir l'ID de la caméra:
Pour ma vidéo de capture d'application que je suis en utilisant le code suivant pour obtenir le micro, caméra avant et arrière et j'ai testé ce code à partir d'iOS 7 pour 10.0.2.
Swift 4 (xCode 10.1)
C'est ce qui a fonctionné pour moi dans la dernière version de Swift. Je n'ai pas vu cette réponse, et il m'a fallu un certain temps pour suss, donc voici comment faire pour obtenir l'avant face à la caméra.
05/2019 :