iOS錄音與編碼那點事,處理跨端播放問題

iOS錄音主要通過兩種方式來實現(xiàn):

其一:使用底層的AudioToolbox.framework 、CoreAudioTypes.framework相關(guān)主要類:AudioQueueRef、AudioStreamBasicDescription、AudioQueueBufferRef,此方式的好處是能實現(xiàn)邊錄制邊緩存數(shù)據(jù),在線播放無需等待音頻文件全部下載完成,可以邊緩沖邊播放,提高用戶體驗。另外實現(xiàn)混音、去除回音也得使用底層Api來實現(xiàn)。

AudioStreamBasicDescription recordFormat; ? //音頻流配置

-? (void)initFormat {

? ? recordFormat.mSampleRate=? KDefaultSampleRate;? //采樣率

? ? recordFormat.mChannelsPerFrame = KDefalutChannel; //聲道數(shù)量

? ? //編碼格式

? ? recordFormat.mFormatID = kAudioFormatLinearPCM;

? ? recordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;

? ? //每采樣點占用位數(shù)

? ? recordFormat.mBitsPerChannel = KBitsPerChannel;

? ? //每幀的字節(jié)數(shù)

? ? recordFormat.mBytesPerFrame = (recordFormat.mBitsPerChannel / 8) * recordFormat.mChannelsPerFrame;

? ? //每包的字節(jié)數(shù)

? ? recordFormat.mBytesPerPacket = recordFormat.mBytesPerFrame;

? ? //每幀的字節(jié)數(shù)

? ? recordFormat.mFramesPerPacket = 1;

}

其二:使用蘋果的AVFoundation.framework 的相關(guān)主要類:AVAudioSession、AVAudioRecorder

此方式使用起來簡單,容易理解各種參數(shù)配置。

- (NSDictionary *)getAudioSetting{

? ? NSMutableDictionary *dicM = [NSMutableDictionary dictionary];

? ? [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];

? ? [dicM setObject:@(ETRECORD_RATE) forKey:AVSampleRateKey];

? ? [dicM setObject:@(2) forKey:AVNumberOfChannelsKey];

? ? [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey];

? ? [dicM setObject:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];

? ? return?dicM;

}


錄音時設(shè)置的編碼通常是kAudioFormatLinearPCM或者kAudioFormatMPEG4AAC,但是發(fā)現(xiàn)一個問題,無論你使用何種編碼,哪怕設(shè)置kAudioFormatMPEGLayer3編碼后錄制的音頻文件在Android端或Chrome瀏覽器端都無法播放?那如何解決呢?

通過錄制pcm編碼的原始音頻,然后通過mp3的轉(zhuǎn)碼庫Lame(demo鏈接:https://github.com/CivelXu/iOS-Lame-Audio-transcoding)轉(zhuǎn)碼成mp3的編碼后再上傳到服務(wù)器,這樣解決了跨端播放的兼容問題。


文件大小如何?

本人測試了一下錄音文件的大小,近30秒鐘的音頻錄音測試,設(shè)備iPhone6s、雙聲道、采樣率11025 、16位。

pcm編碼? :1.3?MB,轉(zhuǎn)換成mp3編碼后的大?。? 109?KB 。(由此推算5分鐘的錄音大致1MB大?。?/p>

如果改成單聲道、采樣率還是11025:

pcm編碼 : 673?KB,轉(zhuǎn)換成mp3編碼后的大小? :85?KB 。

但是單聲道的文件通過Lame轉(zhuǎn)換后發(fā)現(xiàn)實際音頻時長變成了二分之一?這個估計需要修改demo的相關(guān)轉(zhuǎn)碼算法?具體還清楚!

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

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