簡體   English   中英

使用AVFoundation為多張圖像播放一次相機聲音或者只需以編程方式靜音/抑制聲音

[英]Playing camera sound only once for for multiple images using AVFoundation OR Simply mute/suppress sound programmatically

關於問題1問題2問題3 ,我在同一平台上有類似的問題。

我正在使用AVFoundation拍攝多張圖像(5張圖像 - 1.5秒內的突發模式),我能夠成功拍攝5張圖像,但每次拍攝新圖像時都會產生快門聲。

我正在使用captureStillImageAsynchronouslyFromConnection來拍攝靜止圖像。 圖像質量/清晰度是我的主要關注點,我不想在圖像質量和圖像捕獲速度上妥協。

我的查詢是:

1)我只能播放一次聲音嗎? 僅適用於第一張圖像 ,不適用於所有5張圖像。

2)我可以改變快門聲,如果是,怎么樣?

3)如果包含更改,Apple會批准此類應用嗎?

我知道按照第3.3.8節關於快門聲音的App Store政策。

用戶界面,數據收集,當地法律和隱私:

第3.3.8節:任何形式的用戶或設備數據收集,或圖像,圖片或語音捕獲或記錄(統稱為“記錄”),以及任何形式的數據,內容或信息收集,處理,維護,上載,同步,存儲通過,通過或與您的應用程序相關的傳輸,共享,披露或使用必須遵守所有適用的隱私法律和法規以及任何相關的計划要求,包括但不限於任何通知或同意要求。 特別是,作為應用程序的一部分,必須向用戶顯示相當顯着的音頻,視覺或其他指示符,以指示正在進行記錄。

如果我們可以靜音/完全抑制相機快門聲音(根本沒有聲音)也很好。

我已經使用了你在問題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) 應用程序商店評論指南沒有提及拒絕改變快門聲音的應用程序,所以你在這里幾乎涵蓋了。 如果您提交的應用程序不符合列表中指定的任何條件,他們應該只拒絕您的應用程序。

希望這可以幫助!

在某些國家(比如日本/中國,我認為 )拍照時必須使用快門聲。 因此,這可能會使這些國家的應用被拒絕。 或者至少給你帶來一些麻煩。

無論哪種方式,一個很好的解決方法,也可以幫助您解決問題,正在做以下事情。 請注意,質量會稍微降低,但需要進行測試以確保:

拍攝視頻是另一種解決方案,並拍攝5張視頻照片(例如每0.3秒)。 因此,不是拍攝5張照片,而是拍攝1張視頻並以編程方式進行編輯。

視頻也不需要快門點擊,因此您可以以編程方式(使用SystemSounds)播放您想要的任何聲音。

用戶不會注意到差異,但因為它是視頻,質量可能會更低,相機處理圖像的方式也可能不同。

我仍然覺得值得嘗試:)

我可以使用以下代碼以編程方式截取屏幕截圖,從而禁用/靜音相機快門聲音。 確認在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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM