關於做ipod library開發的體驗。


最近在忙着做一個文件傳輸的軟件,剛開始也沒去想項目實現的困難度,可不可行。怎么說呢,因為有類似的軟件都已經上線了,別人都已經實現了,就算在可行性上面做再多的分析,也是多余的了。做這個項目也是我換工作后的第一個項目,以前做ios開發時間並不是很長,對ios開發的經驗也是有限的。也沒想過會遇到什么困難,既來之則安之了吧。

  項目分下來后,我被安排做音視頻模塊和圖片模塊,主要做UI和媒體文件的獲取任務和播放。看起來並不是很多事情,我按照以前的工作思維,拿到需求,找到解決方案,考慮工作周期,計划工作量,恭恭敬敬的做起來。一般我的做法都是先把自己沒把握的問題先去找個解決方案,要是有了這些方案后,工作起來就不會感覺到壓力,就只是工作量的問題了。所以看了需求后,我第一個就是去找怎么獲取ipod里面的文件,以及它們的基本屬性,比如音樂文件,它們的專輯名稱、歌手、封面等。當時在博客園上找到了一篇關於獲取ipod音樂文件基本信息的博客,很興奮的看完了,同時也轉載到了自己的博客中,供自己以后隨時翻閱,在我的博客中叫《ios獲取音樂庫信息(轉)》,當時看的也不是原文,所以我也不知道原文在哪,就只是在標題上加了個“轉”字,以表非自己著作。然后我便按照此篇文章將ipod里的操作都完成了,播放音樂,音樂列表,音樂文件的封面,歌手等。其實僅僅只是做到這些,並不是很難,因為你只需要使用MPMediaQuery就可以獲取ipod里的所有音樂文件,然后循環他的item就可以拿到每個音樂文件對象,根據音樂文件對象的valueForProperty:方法可以拿到你想要的東西。小說明一下:並不是你想要的所有都能拿到。正因為這個,我才遇到了些問題,也是我在此項目中遇到最困難最難解決的問題。也開始了解ios系統的基本原理。文章開始就說了,我是要做一個文件傳輸的軟件,所以並不是只將自己程序中的文件傳輸,既然要提到ipod,也意味着要對ipod里面的文件進行操作,需要播放,傳輸等。我想:做ios開發的人都知道ios是一個比較封閉的,這也是此系統的高安全性所在。他基於沙盒原理,想要對其他程序的文件進行操作,不是系統給出的接口,你是沒辦法去實現你想要的需求的。所以當時我一直對ipod文件導出困惑不解,查閱了很多資料,發過很多貼,問過一些同事,但都沒能解決問題。所以這個問題也拖了很久。問題不主要在於怎么導出,關鍵在於導出后還能提供給其他平台的系統使用,比如android系統。這就是文件的格式問題了。因為在ios系統中,提供的接口導出的文件基本上是m4a、caf等的格式。這些格式在android系統上播放不了。所以要想在其他系統中也能播放,也就只能是mp3格式了。想要導出成mp3格式的文件,我想很多人都想要這個需求吧,這是我在很多貼上看到的,但基本上沒人能把這個導出成mp3格式的解決方案貼的很詳細。后來我能想到的辦法就是使用網上說的lame庫,首先將ipod里面的文件導出成caf格式的,再通過lame庫將其轉換成mp3格式的。我試了,成功了,讓我興奮了一把,但導出的結果卻不盡人意。有兩個最嚴重的缺點,一個是轉換的時間比較長,10M的文件轉換花了一分鍾,我想:對於一個文件傳輸的軟件是接受不了這個現實的;二就是它轉換后音質變底了,文件大小也明顯變小了。我想這是mp3格式的問題,mp3本身就是有損的轉換。做到這里了,我實在是絕望了,不知道怎么去解決這個問題了。但別的軟件有是怎么解決這個問題的呢?我自己都不知道怎么去說服自己,難道別人是自己做的格式轉換?還是花了錢給了蘋果找了接口直接導出mp3文件?這些困惑我無法證實。突然感覺到絕望了。我也開始轉移了注意,着手做了其他項目。也就在做其他項目不久,終於看到希望了,有個同事在網上找到了一個demo,導出mp3文件就在一秒之內解決。很神奇,讓我有驚訝有興奮。沒有音質的損失,文件大小基本沒變化,但還是丟失了一些基本元素,比如歌曲的封面、歌手等屬性。要想做到屬性也不丟失,還得自己加上這些屬性,我想我們已經做的更好了,能導出mp3文件已經實在是讓我很興奮了。這些小問題也就先不看吧。

  導出mp3格式的文件了,問題也就解決了。我心情也平復了許多。如果有朋友也有此方面的需求,我可以發demo哦。

---------------------------

追加:2014.06.20

由於最近也有蠻多人遇到此問題。我就不一一發郵件了,當時找到的demo地址不記得了,現在我將當時找到的demo上傳到了github,你可以從這里下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM