【文章內(nèi)容簡介】
mand (new PlayerSetDataSource (mDataSourcePath,0,0) )。將PlayerSetDataSource的mand類加入到PlayerDriver的mand處理隊列中,在void PlayerDriver::Run()函數(shù)中處理此mand,調(diào)用下面的handleSetDataSource函數(shù)。void PlayerDriver::handleSetDataSource(PlayerSetDataSource* ec)PVCommandId PVPlayerEngine::AddDataSource(PVPlayerDataSourceamp。 aDataSource, const OsclAny* aContextData)PVMFStatus PVPlayerEngine::DoAddDataSource(PVPlayerEngineCommandamp。 aCmd)PVMFStatus PVPlayerEngine::DoSetupSourceNode(PVCommandId aCmdId, OsclAny* aCmdContext) Android MediaPlayer介紹在實際開發(fā)中我們并不會過多的研究Open Core的實現(xiàn),Android提供了上層的Media API給開發(fā)人員使用,MediaPlayer和MediaRecorder。MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video兩個應用程序都是調(diào)用MediaPlayer實現(xiàn)的。MediaPlayer在底層是基于Opencore(PacketVideo)的庫實現(xiàn)的,為了構建一個MediaPlayer程序,上層還包含了進程間通訊等內(nèi)容,這種進程間通訊的基礎是Android基本庫中的Binder機制。圖35 MediaPlayer庫結構圖由圖35可以看出在各個庫中。 Player()來完成。圖36整個MediaPlayer庫和調(diào)用的關系圖從框架結構上來看,、,MeidaPlayer的具體功能在PVPlayer()中的實現(xiàn)。Media :我們可以看出MediaPlayer類提供了一個多媒體播放器的基本操作,播放,暫停,停止,設置音量等等。簡單的例子:MediaPlayer mp = new MediaPlayer()。 //構建MediaPlayer對象(PATH_TO_FILE)。 //設置文件路徑()。 //準備()。 //開始播放 MediaPlayer的基本接口方法(Public Methods)說明static MediaPlayer create(Context context, Uri uri)構造方法創(chuàng)建一個要播放的多媒體(Convenience method to create a MediaPlayer for a given Uri.)int getCurrentPosition()得到當前播放位置(Gets the current playback position.)int getDuration()得到文件的播放時間 (Gets the duration of the file.)int getVideoHeight()返回視頻的高度值(Returns the height of the video.)int getVideoWidth()返回視頻的寬度值(Returns the width of the video. )boolean isPlaying()檢查媒體是否播放(Checks whether the MediaPlayer is playing.)void pause()暫停播放(Pauses playback.)void prepare()準備播放(同步)(Prepares the player for playback, synchronously.)void prepareAsync()準備播放(異步)(Prepares the player for playback, asynchronously.)void release()釋放MediaPlayer對象(Releases resources associated with this MediaPlayer object.)void start()開始播放(Starts or resumes playback.)void stop()停止播放(Stops playback after playback has been stopped or paused.)void reset()重置MediaPlayer對象(Resets the MediaPlayer to its uninitialized state.)void seekTo(int msec)指定播放的位置(Seeks to specified time position.)void setAudioStreamType(int streamtype)設置流媒體的類型(Sets the audio stream type for this MediaPlayer.)void setDataSource(String path)設置流媒體的數(shù)據(jù)來源(Sets the data source (filepath or /rtsp URL) to use.)void setVolume(float leftVolume, float rightVolume)設置音量(Sets the volume on this player.)4 常見音頻格式介紹要在計算機內(nèi)播放或是處理音頻文件,也就是要對聲音文件進行數(shù)、模轉換,這個過程同樣由采樣和量化構成,人耳所能聽到的聲音,最低的頻率是從20Hz起一直到最高頻率20KHZ,20KHz以上人耳是聽不到的,因此音頻的最大帶寬是20KHZ,故而采樣速率需要介于40~50KHZ之間,而且對每個樣本需要更多的量化比特數(shù)。音頻數(shù)字化的標準是每個樣本16位96dB的信噪比,采用線性脈沖編碼調(diào)制PCM,每一量化步長都具有相等的長度。在音頻文件的制作中,正是采用這一標準。對于播放,Android支持各種各樣的音頻文件格式和編解碼。對于錄音的支持少一些。 CD格式:天籟之音 當今世界上音質最好的音頻格式是什么?當然是CD了。因此要講音頻格式,CD自然是打頭陣的先鋒。在大多數(shù)播放軟件的“打開文件類型”中,都可以看到*.cda格式,這就是CD音軌了。,速率88K/秒,16位量化位數(shù),因為CD音軌可以說是近似無損的,因此它的聲音基本上是忠于原聲的。CD光盤可以在CD唱機中播放,也能用電腦里的各種播放軟件來重放。一個CD音頻文件是一個*.cda文件,這只是一個索引信息,并不是真正的包含聲音信息,所以不論CD音樂的長短,在電腦上看到的“*.cda文件”都是44字節(jié)長。 WAV:無損的音樂是微軟公司的一種聲音文件格式,它符合 PIFFResource Interchange File Format 文件規(guī)范,用于保存WINDOWS平臺的音頻信息資源,被WINDOWS平臺及其應用程序所支持。 “*.WAV”格式支持MSADPCM、CCITT A LAW等多種壓縮算法,支持多種音頻位數(shù)、采樣頻率和聲道,標準格式的WAV文件和CD格式一樣,速率88K/秒,16位量化位數(shù),看到了吧,WAV格式的聲音文件質量和CD相差無幾,也是目前PC機上廣為流行的聲音文件格式,幾乎所有的音頻編輯軟件都“認識”WAV格式。 MP3:流行的風尚MP3格式誕生于八十年代的德國,所謂的MP3也就是指的是MPEG標準中的音頻部分,也就是MPEG音頻層。根據(jù)壓縮質量和編碼處理的不同分為3層,分別對應“*.mp1/“*.mp2”/“*.mp3”這3種聲音文件。MPEG音頻文件的壓縮是一種有損壓縮,MPEG3音頻編碼具有10:1~12:1的高壓縮率,同時基本保持低音頻部分不失真,但是犧牲了聲音文件中12KHz到16KHz高音頻這部分的質量來換取文件的尺寸,相同長度的音樂文件,用*.mp3格式來儲存,一般只有*.wav文件的1/10,而音質要次于CD格式或WAV格式的聲音文件。由于其文件尺寸小,音質好;所以在它問世之初還沒有什么別的音頻格式可以與之匹敵,因而為*.mp3格式的發(fā)展提供了良好的條件。直到現(xiàn)在,這種格式還是風靡一時,作為主流音頻格式的地位難以被撼動。但是樹大招風,MP3音樂的版權問題也一直是找不到辦法解決,因為MP3沒有版權保護技術,說白了也就是誰都可以用。 MIDI:作曲家的最愛經(jīng)常玩音樂的人應該常聽到MIDI(Musical Instrument Digital Interface)這個詞,MIDI允許數(shù)字合成器和其他設備交換數(shù)據(jù)。MID文件格式由MIDI繼承而來。MID文件并不是一段錄制好的聲音,而是記錄聲音的信息,然后在告訴聲卡如何再現(xiàn)音樂的一組指令。這樣一個MIDI文件每存1分鐘的音樂只用大約5~10KB。今天,MID文件主要用于原始樂器作品,流行歌曲的業(yè)余表演,游戲音軌以及電子賀卡等。*.mid文件重放的效果完全依賴聲卡的檔次。*.mid格式的最大用處是在電腦作曲領域。*.mid文件可以用作曲軟件寫出,也可以通過聲卡的MIDI口把外接音序器演奏的樂曲輸入電腦里,制成*.mid文件。 WMA:最具實力的敵人WMA (Windows Media Audio) 格式是來自于微軟的重量級選手,后臺強硬,音質要強于MP3格式,更遠勝于RA格式,它和日本YAMAHA公司開發(fā)的VQF格式一樣,是以減少數(shù)據(jù)流量但保持音質的方法來達到比MP3壓縮率更高的目的,WMA的壓縮率一般都可以達到1:18左右,WMA的另一個優(yōu)點是內(nèi)容提供商可以通過DRM(Digital Rights Management)方案如Windows Media Rights Manager 7加入防拷貝保護。這種內(nèi)置了版權保護技術可以限制播放時間和播放次數(shù)甚至于播放的機器等等,這對被盜版攪得焦頭亂額的音樂公司來說可是一個福音,另外WMA還支持音頻流(Stream)技術,適合在網(wǎng)絡上在線播放,作為微軟搶占網(wǎng)絡音樂的開路先鋒可以說是技術領先、風頭強勁,更方便的是不用象MP3那樣需要安裝額外的播放器,而Windows操作系統(tǒng)和Windows Media Player的無縫捆綁讓你只要安裝了windows操作系統(tǒng)就可以直接播放WMA音樂,新版本的Windows Media ,在Windows操作系統(tǒng)中,WMA是默認的編碼格式,大家知道Netscape的遭遇,現(xiàn)在“狼”又來了。WMA這種格式在錄制時可以對音質進行調(diào)節(jié)。同一格式,音質好的可與CD媲美,壓縮率較高的可用于網(wǎng)絡廣播。雖然現(xiàn)在網(wǎng)絡上還不是很流行,但是在微軟的大規(guī)模推廣下已經(jīng)是得到了越來越多站點的承認和大力支持,在網(wǎng)絡音樂領域中直逼*.mp3,在網(wǎng)絡廣播方面,也正在瓜分Real打下的天下。因此,幾乎所有的音頻格式都感受到了WMA格式的壓力。 RealAudio流動的旋律RealAudio主要適用于在網(wǎng)絡上的在線音樂欣賞,現(xiàn)在大多數(shù)的用戶仍然在使用56Kbps或更低速率的Modem,所以典型的回放并非最好的音質。有的下載站點會提示你根據(jù)你的Modem速率選擇最佳的Real文件?,F(xiàn)在real的的文件格式主要有這么幾種:有RA(RealAudio)、RM(RealMedia,RealAudio G2)、RMX(RealAudio Secured),還有更多。這些格式的特點是可以隨網(wǎng)絡帶寬的不同而改變聲音的質量,在保證大多數(shù)人聽到流暢聲音的前提下,令帶寬較富裕的聽眾獲得較好的音質。 ARM自適應多速率編解碼(AMRNB,AMRWB),.3gp,.amr文件。AMR音頻編解碼已經(jīng)被標準化了,主要被3GPP(第三代合作伙伴項目)用于語音音頻編解碼。3GPP是一個為其合作伙伴創(chuàng)建規(guī)范的電信行業(yè)機構。換句話說,AMR編解碼主要用于現(xiàn)代移動電話的語音呼叫程序,并且手機廠商和手機攜帶者普遍都支持這個格式。AMR這格式一般對語音編碼很有用,但對更復雜的類型表現(xiàn)的不夠好,比如音樂。5 Android平臺錄音及編碼模塊 Android 錄音API介紹 使用MediaRecorder進行聲音錄制簡單方便,不需要理會中間錄制過程。結束錄制后可以直接得到音頻文件進行播放。MediaRecorder在底層是基于OpenCore(PacketVideo)的庫實現(xiàn)的,為了構建一個MediaRecorder程序,上層還包含了進程間通訊等內(nèi)容,這種進程間通訊的基礎是Android基本庫中的Binder機制。以開源的Android為例MediaRecorder的代碼主要在以下的目錄中:JAVA程序的路徑:packages/apps/Camera/src//android/camera/JAVA Framework的路徑:frameworks/base/media/java/android/media/JAVA本地調(diào)用部分(JNI):frameworks/base/media/jni/。主要的頭文件在以下的目錄中:frameworks/base/include/media/多媒體底層庫在以下的目錄中:frameworks/base/media/libmedia/ 。多媒體服務部分:frameworks/base/media/libmediaplayerservice/MediaRecorder和MeidaPlayer使用相同的服務。基于OpenCore部分 external/opencore/android/author。在聲音錄制過程中,有可能我們需要得到采集的聲音數(shù)據(jù)并進行處理,比如降噪,合成等。MediaRecorder明顯不能符合要求。而AudioRecorder恰能滿足這種要求。過程