10

关于Question 1 , Question 2 , Question 3,我在同一个平台上有类似的问题。

我正在使用 AVFoundation 拍摄多张图像(5 张图像 - 1.5 秒内的连拍模式),我能够成功拍摄 5 张图像,但每次拍摄新图像时都会发出快门声。

我将captureStillImageAsynchronouslyFromConnection用于静止图像。图像质量/清晰度是我的主要关注点,我不想在图像质量和图像捕获速度上妥协。

我的查询是:

1)我可以只播放一次声音,即。仅适用于第一张图像,而不适用于所有 5 张图像。

2)我可以改变快门声音,如果是,如何?。

3) 如果合并了更改,苹果是否会批准此类应用程序。

我了解第 3.3.8 节中有关快门声音的 App Store 政策。

用户界面、数据收集、当地法律和隐私:

第 3.3.8 节:任何形式的用户或设备数据收集,或图像、图片或语音捕获或记录(统称为“记录”),以及任何形式的数据、内容或信息收集、处理、维护、上传、同步、存储、由您的应用程序执行、通过或与您的应用程序相关的传输、共享、披露或使用必须遵守所有适用的隐私法律和法规以及任何相关的计划要求,包括但不限于任何通知或同意要求。特别是,作为应用程序的一部分,必须向用户显示合理显眼的音频、视觉或其他指示符,以表明正在录制。

如果我们可以静音/完全抑制相机快门声音(完全没有声音)也很好。

4

3 回答 3

3

我使用了您在问题 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)应用商店审查指南没有提到拒绝应用程序更改快门声音,所以你在这里几乎涵盖了。如果您提交的应用程序不符合列表中指定的任何标准,他们应该只拒绝您的应用程序。

希望这可以帮助!

于 2015-05-22T12:49:25.500 回答
2

在某些国家(例如日本/中国,我认为)拍照时必须发出快门声。因此,这可能会使您的应用在这些国家/地区被拒绝。或者至少给你一些麻烦。

无论哪种方式,一个很好的解决方法也可以帮助您解决问题,执行以下操作。请注意,质量会有所降低,但需要进行测试以确保:

拍摄视频是另一种解决方案,拍摄 5 张视频照片(例如每 0.3 秒)。因此,您无需拍摄 5 张照片,而是拍摄 1 个视频并以编程方式对其进行编辑。

视频也不需要点击快门,因此您可以通过编程方式(使用 SystemSounds)播放您想要的任何声音。

用户不会注意到差异,但因为它是视频,所以质量可能会更低,并且相机处理图像的方式也可能不同。

我仍然认为值得尝试:)

于 2015-05-22T13:06:05.567 回答
0

在使用以下代码以编程方式截取屏幕截图时,我能够禁用/静音相机快门声音。确认可以在 iPhone 5 上的 iOS8.3 上工作,并在 App Store 中接受。在拍照之前调用此代码:

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];
于 2015-07-29T14:21:41.423 回答