iOS 8 录音重放出现 OSStatus error 1685348671 / 2003334207 问题的解决办法

2015-1-21   /   字数:816   /   阅读数:17201   /   分类: iOS & Swift     

许多录音类 APP 都提供录音回放功能,大家在做这类 APP 的时候也经常会遇到这个需求。当大家用以前的套路在 iOS 8 上录音的时候,在模拟器上跑得挺好的,但是一上真机就跪了,为什么?因为真机底层是真实的硬件,跟模拟器还是有一些差别的,例如真机支持硬件解码等等。

在 iOS 8 上,录音并播放需要在录音前就申请“录音并播放”的 session(swift):

func setSessionPlayAndRecord() {
    let session:AVAudioSession = AVAudioSession.sharedInstance()
    var error: NSError?
    if !session.setCategory("AVAudioSessionCategoryPlayAndRecord", withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker, error:&error) {
        println("could not set session category")
        if let e = error {
            println(e.localizedDescription)
        }
    }
    if !session.setActive(true, error: &error) {
        println("could not make session active")
        if let e = error {
            println(e.localizedDescription)
        }
    }
}

之后再开始录音,等录音结束后就可以正常播放啦。

WRITTEN BY

avatar

评论:

章鱼卷
2015-09-24 21:29
let baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
        self.audioURL = NSUUID().UUIDString + "sound.m4a"
        let pathComponents = [baseString, audioURL]
        audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!

       data.writeToFile(self.audioNSURL.path!, atomically: true)  音频写入路径
       self.audioPlayer = try AVAudioPlayer(contentsOfURL: self.audioNSURL)
       self.audioPlayer.prepareToPlay()
       self.audioPlayer.play()
从网络下载音频存在了audioNSURL路径下,但是通过 self.audioPlayer = try AVAudioPlayer(contentsOfURL: self.audioNSURL) 播放,有的音频能播放,有的不能。不能播放的音频,我检查了audioNSURL路径下文件是存在的。能播放的音频插入耳机的时候才有声音 .
期待小伙伴们的帮助
JohnLui
2015-09-25 11:02
@章鱼卷:不能播放的问题可以尝试先用 NSData 读出来,再播放。插入耳机才能听到声音是因为申明播放途径没有做应该。
mask
2015-01-21 15:20
你好我现在遇到了这个问题,想请教一下用OC语言怎么设置,我的开发工具时IPAD2
JohnLui
2015-01-21 18:07
@mask:我不会 OC。。。
Chauyan
2015-05-25 15:18
@mask:OC 的部分跟 Swift 差不多, 一樣是需要先設定 Session 為 PlayAndRecord.
接著錄完音在播放就行了.

    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError];
    
    if(setCategoryError){
        NSLog(@"%@", [setCategoryError description]);
    }
夢裏尋夢
2015-10-30 16:15
@Chauyan:录音文件有杂音 你知道是为什么吗
JohnLui
2015-10-30 16:16
@夢裏尋夢:可能手机进水了。。。
Chauyan
2015-10-30 16:18
@夢裏尋夢:估計是你背景音太大或者 mic 有些異常
我測試下倒是沒有這個狀況
小作家
2016-09-19 16:11
@Chauyan:还是不行呀,设定了,在播放的时候还是出现 error 2003334207 错误代码
JohnLui
2016-09-19 16:12
@小作家:64位设备需要使用特定的码率,奇怪码率无法播放。
Chauyan
2016-09-19 16:19
@小作家:我這邊沒遇到這個問題, 你播放的 file 是哪一種型別的啊 ?

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog