iOS: Рівень факела на iPhone 11 Pro


9

Я використовую AVCaptureDevice.setTorchModeOn(level) метод для включення ліхтарика при змінній яскравості.

На мій старий iPhone SE це працює відмінно - я можу ясно бачити 4 різних рівнів яскравості , як я міняю levelвід 0до 1.

Але на iPhone 11 Pro ліхтарик включається лише тоді, коли рівень 1.0! І це яскравість, якщо далеко не максимальний рівень (порівняно з ліхтариком від Центру управління).

Я намагався використовувати maxAvailableTorchLevelконстанту, але результати такі ж, як і використання 1.0.
Також випробувані значення більше 1.0- це призводить до виключення (як очікувалося).

Хтось теж мав цю проблему? Можливо, є якісь обхідні шляхи?


1
Будь-яке оновлення щодо цього? Я отримую звіти з цим питанням, тому я знаходжусь на межі придбання iPhone 11 Pro в екстреному випадку через це: /
blackjack75

На жаль, поки що. Можливо, Apple виправить це в якомусь оновленні ... Чи знаєте ви, чи є це лише на iPhone 11 Pro чи всі нові телефони?
Павло Алексєєв

Я ще не впевнений, чи вплине iPhone 11. У мене були скарги лише від користувачів iPhone 11 pro. Я спробував кілька сліпих виправлень, обробляючи більше експлікацій тощо, але не знаю, чи допомогло це, оскільки у мене ще немає пристрою. Якщо у вас є фактичний пристрій, ви можете перевірити тут версію 1.81 і побачити, чи допомагає це? Мені користувачі сказали, що він працював на першому запуску, але потім не вдався до зміни яскравості і став тьмяним, тому, можливо, є вирішення проблеми. i.smte.ch/ledflashfree
blackjack75

developer.apple.com/documentation/avfoundation/avcapturedevice/… Ви викликаєте lockForConfiguration () та розблокуватиForConfiguration () перед встановленням факела?
Антоніо Яфіар

@antonioyaphiar, впевнений, що так!
Павло Алексєєв

Відповіді:


1

Я згадав, що ще в iOS 3.x днів у нас не було простого світлодіодного API. Треба було розпочати повний сеанс захоплення відео. Ну виявляється, що для iPhone 11 це здається єдиним рішенням. Я хотів би почути про інших, які цього не потребують.

Це мій тестований спосіб вирішення. Я тут використовую Objective C, а не Swift, тому що це я використовував у цьому старому додатку з 2009 року! Ви можете легко знайти код Swift, щоб почати захоплення відео (і ігнорувати вихід, він повинен працювати так само.

AVCaptureSession* session = [[AVCaptureSession alloc] init];

AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];
if ([session canAddInput:deviceInput]) {
    [session addInput:deviceInput];
}

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

CALayer *rootLayer = self.view.layer;
[rootLayer setMasksToBounds:YES];

CGRect frame = self.view.frame;
[previewLayer setFrame:frame];
[rootLayer insertSublayer:previewLayer atIndex:0];

//This is where you'd save the video with AVCaptureVideoDataOutput but of course we don't.

[session startRunning];

Після цього ви просто запускаєте світлодіод, як завжди:

NSError *error = nil;

if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];

Це отримує максимальну яскравість на моєму iPhone 11 Pro. Зараз я шукаю те саме рішення, не використовуючи відеозйомку (яка, очевидно, використовує акумулятор І вимагає дозволу, який може не подобатися користувачам. Це потрібно добре пояснити).


-1

Відповідно до документації на с maxAvailableTorchLevel

Ця константа завжди представляє максимальний доступний рівень факела, незалежний від фактичного максимального значення, що підтримується пристроєм.

Якщо ця константа завжди представляє максимальний доступний рівень факела, ми не тільки добуваємо, що різні пристрої мають різні максимально доступні рівні, але також і те, що пристрій, про який ви згадуєте, не може перевищувати 1,0.

Найкраще, що можна зробити зараз, - це звернутися до підтримки розробників Apple .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.