AVAudioPlayer的NSOSStatusErrorDomain Code=1685348671錯(cuò)誤解決方案

項(xiàng)目有個(gè)播放本地音頻的功能,在測(cè)試過(guò)程中發(fā)現(xiàn)了一個(gè)問(wèn)題,有些音頻可以播放,有些音頻播放不了并且報(bào)錯(cuò):NSOSStatusErrorDomain Code=1685348671,代碼大致如下:
NSError *playerIninError;
NSURL *audioURL = [NSURL fileURLWithPath:filePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL 
error:&playerIninError];

1.直接報(bào)錯(cuò)NSOSStatusErrorDomain Code=1685348671,主要奇怪的是同樣的兩個(gè)都是mp3文件格式,一個(gè)可以播一個(gè)不可以播,后來(lái)改用如下方法就又可以播放了。

 NSError *playerIninError;
 NSData *audioData = [NSData dataWithContentsOfFile:filePath];
 _player = [[AVAudioPlayer alloc] initWithData:audioData fileTypeHint:AVFileTypeMPEGLayer3
 error:&playerIninError];

2.我想一定是initWithData 指定了fileTypeHint:AVFileTypeMPEGLayer3指定了音頻文件類(lèi)型就可以播放了,但是改成下面的initWithContentsOfURL:audioURL
fileTypeHint:AVFileTypeMPEGLayer3還是不行。

NSError *playerIninError;
NSURL *audioURL = [NSURL fileURLWithPath:filePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL 
fileTypeHint:AVFileTypeMPEGLayer3  error:&playerIninError];

3.查看了兩個(gè)mp3文件除了采樣率不一樣沒(méi)發(fā)現(xiàn)其他的不同,

不可以播的MP3文件.png

可以播的MP3文件.png

4.我用了ffmpeg查看了兩個(gè)音頻信息發(fā)現(xiàn):
a.不能播放的mp3文件其實(shí)是音頻編碼格式其實(shí)是wav格式。
b.而正常的mp3文件個(gè)音頻編碼格式是mp3.
c.所以可以推斷的是如果沒(méi)有用fileTypeHint:AVFileTypeMPEGLayer3 ,指定解碼格式的時(shí)候,AVAudioPlayer其實(shí)其實(shí)是根據(jù)二進(jìn)制的音頻流信息自動(dòng)解碼,解碼出的音頻格式和播放格式不符所以出錯(cuò)。
d.而指定了音頻格式后,強(qiáng)制將wav的音頻文件解碼成mp3格式并且播放,是支持的<個(gè)人理解,并不代表官方說(shuō)法,如有不當(dāng)之處歡迎指正>。

1.mp3
bgm.mp3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容