Воспроизведение звука камеры только один раз для нескольких изображений с использованием AVFoundation ИЛИ Простое отключение звука/подавление звука

В отношении Вопрос 1, Вопрос 2, Вопрос 3, у меня есть аналогичный вопрос на той же платформе.

Я собираю несколько изображений (5 изображений - тип режима Burst за 1,5 секунды) с помощью AVFoundation, я могу успешно скрепить 5 изображений, но каждый раз при каждом новом изображении звук затвора становится затвором.

Я использую captureStillImageAsynchronouslyFromConnection для неподвижных изображений. Качество изображения/ясность - это мой основной фокус, я не хочу компрометировать качество изображения и скорость захвата изображений.

Мои запросы:

1) Можно ли воспроизводить звук только один раз, т.е. только для первого изображения, а не для всех 5 изображений.

2) Могу ли я изменить звук затвора, если да, как?

3) Будет ли яблоко одобрять такие приложения, если будут внесены изменения.

Мне известно о политике магазина App Store для звука затвора в соответствии с разделом 3.3.8.

Пользовательский интерфейс, сбор данных, локальные законы и конфиденциальность:

Раздел 3.3.8: Любая форма сбора данных пользователем или устройством, а также запись или запись изображения, изображения или голоса (в совокупности "Записи" ) и любая форма данных, содержимого или сбора информации, обработки, обслуживания, синхронизация, хранение, передача, совместное использование, раскрытие или использование, выполняемые посредством или в связи с вашей Заявкой, должны соответствовать всем применимым законам и правилам конфиденциальности, а также любым связанным с ними требованиям к программе, включая, но не ограничиваясь, любые требования к уведомлению или соглашению. В частности, пользователю, как часть приложения, должен быть показан достаточно заметный звуковой, визуальный или другой индикатор, чтобы указать, что происходит запись.

Это также прекрасно, если мы можем отключить звук/полностью подавить звук затвора камеры (без звука вообще).

Любая помощь в правильном направлении будет оценена.

Ответ 1

Я использовал метод, который вы разместили в Вопрос 1, и он работает как магия. Поэтому я настоятельно рекомендую вам следовать примеру наилучшего ответа.

Относительно ваших запросов:

1) Вы можете иметь звук для первого изображения только путем объединения решения примера, завернутого в логическое, которое проверяет, было ли выполнено первое изображение или нет. Например:

if (hasTakenFirstPicture) {
    static SystemSoundID soundID = 0;
    if (soundID == 0) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"photoShutter2" ofType:@"caf"];
        NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath, &soundID);
    }
    AudioServicesPlaySystemSound(soundID);
} else {
    hasTakenFirstPicture = YES;
}
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:
...

2) Вы не можете изменить звук затвора по умолчанию.

3) рекомендации по обзору магазинов приложений не упоминает об отказе от приложения для изменения звука затвора, поэтому вы в значительной степени охвачены Вот. Они должны только отклонять ваше приложение, если приложение, которое вы отправляете, не соответствует ни одному из критериев, указанных в списке.

Надеюсь, это поможет!

Ответ 2

В некоторых странах (например, Япония/Китай, я думаю) звук затвора является обязательным при съемке. Так что это может заставить ваше приложение отказаться от этих стран. Или, по крайней мере, дать вам какие-то проблемы.

В любом случае, хороший способ обхода проблемы, который может помочь вам в вашей проблеме, заключается в следующем. Обратите внимание, что качество будет немного меньше, но для проверки потребуется тестирование:

Взятие видео - еще одно решение, и снимки 5 изображений видео (например, каждые 0,3 секунды). Поэтому вместо того, чтобы снимать 5 фото, вы снимаете 1 видео и программно редактируете его.

Видео также не требуют щелчков затвора, поэтому вы можете программно (используя SystemSounds) воспроизводить любой звук, который вы хотели бы.

Пользователь не заметит разницы, но из-за того, что это видео, качество может быть меньше, а способ обработки изображения может отличаться.

Я все еще думаю, что стоит попробовать:)

Ответ 3

Мне удалось отключить/отключить звук затвора камеры, используя программный снимок экрана, используя приведенный ниже код. Подтверждено работать на iOS8.3 на iPhone 5 и принято в магазине приложений. Вызовите этот код непосредственно перед съемкой:

MPVolumeView* volumeView = [[MPVolumeView alloc] init];
//find the volumeSlider
UISlider* volumeViewSlider = nil;
for (UIView *view in [volumeView subviews]){
    if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
        volumeViewSlider = (UISlider*)view;
        break;
    }
}

[volumeViewSlider setValue:0.0f animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];