首页 文章

使用AVFoundation为多张图像播放一次相机声音或者只需以编程方式静音/抑制声音

提问于
浏览
11

在参考Question 1Question 2Question 3时,我在同一平台上遇到了类似的问题 .

我正在使用AVFoundation捕获多个图像(5个图像 - 1.5秒内的突发模式),我能够成功捕捉5个图像,但每次拍摄新图像时都会产生快门声 .

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

My Queries are:

1)我可以播放声音 only once 即 . for first image only 而不是所有5张图片 .

2)我可以改变快门声,如果是,怎么样?

3)如果包含更改,苹果是否会批准此类应用 .

我知道按照第3.3.8节关于快门声音的App Store政策 .

User Interface, Data Collection, Local Laws and Privacy:

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

It is also fine if we can mute/totally suppress Camera shutter sound (no sound at all).

3 回答

  • 3

    我've used the method you'发布在Question 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)app store review guidelines没有提及拒绝改变快门声音的应用程序,所以你在这里几乎涵盖了 . 如果您提交的应用程序不符合列表中指定的任何条件,他们应该只拒绝您的应用程序 .

    希望这可以帮助!

  • 0

    在某些国家(如日本/中国我 think )拍照时必须使用快门声 . 因此,这可能会使这些国家的应用被拒绝 . 或者至少给你带来一些麻烦 .

    无论哪种方式,一个很好的解决方法,也可以帮助您解决问题,正在做以下事情 . 请注意,质量会稍微降低,但需要进行测试以确保:

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

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

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

    我仍然觉得值得尝试:)

  • 2

    我可以使用以下代码以编程方式截取屏幕截图,从而禁用/静音相机快门声音 . 确认在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];
    

相关问题