經(jīng)過前面幾章,我們要來寫一個簡單的本地播放器,運用到之前說到的AudioFileStream,AudioFile,AVAudioSession
AudioFileStream vs AudioFile
兩種都是解析音頻信息及分離幀,為什么要同時使用
1.對于網(wǎng)絡流播放必須要AudioFileStream,因為我們之前在AudioFile說過Open的時候要求使用者提供數(shù)據(jù),如果提供的數(shù)據(jù)不足會直接跳過并且返回錯誤碼,而數(shù)據(jù)不足的情況在網(wǎng)絡流中很常見,所以沒辦法使用AudioFile單獨進行網(wǎng)絡流數(shù)據(jù)的解析
2.本地音樂播放選用AudioFile更為合適,原因是AudioFileStream是主要用在流播放,雖然不限于網(wǎng)絡流和本地流,但是流數(shù)據(jù)是按順序提供的所以AudioFileStream也是順序解析的,被解析的音頻文件還是需要符合流播放的特性,對于不符合的本地文件AudioFileStream會在Parse返回NotOptimized錯誤;而AudioFile的解析過程并不是順序的,它會在解析時通過回調向使用者索要某個位置的數(shù)據(jù),即使數(shù)據(jù)在文件末尾也沒關系,所以AudioFile適用于所有類型的音頻文件;
所以我們需要同時使用這兩個類,前者可以應對流播放的音頻數(shù)據(jù),實現(xiàn)邊播邊緩沖的體驗,用AudioFile處理無法流播放的音頻數(shù)據(jù),讓用戶在下載完成之后仍然能夠進行播放