国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
zt: Android的MediaRecorder架構(gòu)介紹 - masterfish的個人空間 - 電玩俱樂部 PS3-XBOX360-Wii-PSP-NDSL-網(wǎng)游-紙客帝國-趣味第一 TGFC - powered by X-Space
第一部分 MediaRecorder概述
Android的MediaRecorder包含了Audio和video的記錄功能,在Android的界面上,Music和Video兩個應(yīng)用程序都是調(diào)用MediaRecorder實(shí)現(xiàn)的。
MediaRecorder在底層是基于OpenCore(PacketVideo)的庫實(shí)現(xiàn)的,為了構(gòu)建一個MediaRecorder程序,上層還包含了進(jìn)程間通訊等內(nèi)容,這種進(jìn)程間通訊的基礎(chǔ)是Android基本庫中的Binder機(jī)制。
以開源的Android為例MediaRecorder的代碼主要在以下的目錄中:
JAVA程序的路徑:
packages/apps/Camera/src/com/android/camera/VideoCamera.java

JAVA Framework的路徑:
frameworks/base/media/java/android/media/MediaRecorder.java

JAVA本地調(diào)用部分(JNI):
frameworks/base/media/jni/android_media_MediaRecorder.cpp
這部分內(nèi)容編譯成為目標(biāo)是libmedia_jni.so。

主要的頭文件在以下的目錄中:
frameworks/base/include/media/

多媒體底層庫在以下的目錄中:
frameworks/base/media/libmedia/
這部分的內(nèi)容被編譯成庫libmedia.so。

多媒體服務(wù)部分:
frameworks/base/media/libmediaplayerservice/
MediaRecorder和MeidaPlayer使用相同的服務(wù)。


基于OpenCore部分
external/opencore/android/author
這部分內(nèi)容被編譯成庫libopencoreauthor.so。


第二部分 MediaRecorder的接口與架構(gòu)
MediaRecorder的各個可以用下圖的表示:




MediaRecorder部分的頭文件在frameworks/base/include/media/目錄中,這個目錄是和libmedia.so庫源文件的目錄frameworks/base/media/libmedia/相對應(yīng)的。主要的頭文件有以下幾個:
■mediarecorder.h :mediarecorder的上層接口
■IMediaRecorder.h:MediaRecorder的服務(wù)部分實(shí)現(xiàn)接口
■PVMediaRecorder.h :MediaRecorder的下層接口,由OpenCore實(shí)現(xiàn)
在這些頭文件MediaRecorder.h提供了對上層的接口,而其他的幾個頭文件都是提供一些接口類(即包含了純虛函數(shù)的類),這些接口類必須被實(shí)現(xiàn)類繼承才能夠使用。
整個MediaRecorder庫和調(diào)用的關(guān)系如下圖所示





整個MediaRecorder在運(yùn)行的時候,可以大致上分成Client和Server兩個部分,它們分別在兩個進(jìn)程中運(yùn)行,它們之間使用Binder機(jī)制實(shí)現(xiàn)IPC通訊。
注意MediaRecorder中不需要使用callback,這點(diǎn)和MediaPlayer的架構(gòu)有一定的區(qū)別,因此并不需要一個MediaRecorderClient的類。
MediaRecorder C語言上層的接口在mediarecorder.h 中,定義一個MediaRecorder類:
  • class MediaRecorder
  • {
  • public:
  • MediaRecorder();
  • ~MediaRecorder();
  • status_tinitCheck();
  • status_tsetCamera(const sp<ICamera> camera);
  • status_tsetPreviewSurface(const sp<Surface> surface);
  • status_tsetVideoSource(int vs);
  • status_tsetAudioSource(int as);
  • status_tsetOutputFormat(int of);
  • status_tsetVideoEncoder(int ve);
  • status_tsetAudioEncoder(int ae);
  • status_tsetOutputFile(const char* path);
  • status_tsetVideoSize(int width, int height);
  • status_tsetVideoFrameRate(int frames_per_second);
  • status_tprepare();
  • status_tgetMaxAmplitude(int* max);
  • status_tstart();
  • status_tstop();
  • status_treset();
  • status_tinit();
  • status_tclose();
  • status_trelease();
  • };

復(fù)制代碼
在meidarecorder的上層接口中,基本不涉及數(shù)據(jù)流的處理,但是需要設(shè)置兩個重要的部分,一個是輸入的設(shè)備ICamera,另一個是ICamera的預(yù)覽(preview)Surface:
  • status_tsetCamera(const sp<ICamera> camera);
  • status_tsetPreviewSurface(const sp<Surface> surface);

復(fù)制代碼
這兩個類需要通過上層的接口設(shè)置,其中設(shè)置的Surface在下層的處理中也會被設(shè)置到ICamera的接口中,ICamera則作為這種meidarecorder視頻輸入的設(shè)備,在meidarecorder底層的實(shí)現(xiàn)中,通過這個Icamera獲取視頻流。
prepare(),start(),stop()和reset()等幾個函數(shù)用于設(shè)置控制媒體記錄的運(yùn)行。
另外的幾個接口用于設(shè)置音頻、視頻的輸入和格式,輸出的格式。



第三部分 PVAuthor的架構(gòu)
PVAuthor是基于OpenCore的AuthorEngine的Android實(shí)現(xiàn), 代碼在以下路徑中:
external/opencore/android/author/
它實(shí)現(xiàn)的接口類是PVMediaRecorder.h,這個類基本上是一個封裝,它需要處理三個方面的內(nèi)容:
音頻的輸入環(huán)節(jié)(Audio Input)
視頻的輸入(Camera)
視頻的預(yù)覽(使用ISurface)


其中實(shí)現(xiàn)PVMediaRecorder.h的類是 PVMediaRecorder.cpp,authordriver.h和authordriver.cpp是具體實(shí) 現(xiàn),android_audio_input.*和android_camera_input.*是兩個PvmiMIOControl的實(shí) 現(xiàn),PvmiMIOControl最終會構(gòu)建成一個Node.。它們是Active Source類型的Node,因此它們需要實(shí)現(xiàn)PvmiMediaTransfer::writeComplete()函數(shù)。
在AndroidCameraInput內(nèi)部會建立一個Camera(可以不使用從外部得到的方 式);AndroidCameraInput::SetPreviewSurface的函數(shù)用于得到一個外部的ISurface,這個Surface將被 設(shè)置到Camera中,作為Camera的預(yù)覽。
android_audio_input.*是作為音頻輸入的實(shí)現(xiàn),它基于Android的Audio系統(tǒng)構(gòu)建,主要使用media/AudioRecord.h接口。


第四部分 Android MediaRecorder和Camera的關(guān)系從功能的角度MediaRecorder一般包含音頻,視頻記錄,視頻預(yù)覽的功能,Camera包含了取景區(qū)預(yù)覽,靜態(tài)圖像捕獲的功能。
在Android中,應(yīng)用程序自上而下分成JAVA應(yīng)用,JAVA框架,JNI,C框架,具體實(shí)現(xiàn)幾個部分。多媒體方面的程序尤其是這樣。
MediaRecorder和Camera在Android中都有自上而下的架構(gòu),它們在頂層JAVA應(yīng)用層,共用一個應(yīng)用程序Camera(其中的程序 也是獨(dú)立的),在JAVA框架和JNI層是獨(dú)立的,主要的聯(lián)系在于Camer的C框架以下的內(nèi)容被MediaRecorder實(shí)現(xiàn)(也就是 PVAuthor)所調(diào)用,作為MediaRecorder實(shí)現(xiàn)的視頻輸入設(shè)備,它的作用是負(fù)責(zé)傳輸視頻數(shù)據(jù)和提供顯示預(yù)覽。本身Camera C框架以下的代碼基本提供了取景器預(yù)覽(Preview)、視頻數(shù)據(jù)流獲取、靜止圖像獲取三方面的功能,MediaRecorder實(shí)現(xiàn)使用其取景器預(yù)覽 和視頻數(shù)據(jù)流獲取的功能,而Camera的JNI使用其取景器預(yù)覽和靜止圖像獲取兩方面的功能
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android的Camera架構(gòu)介紹
android Camera 架構(gòu)簡介
android Camera模塊分析
Android 5
《堂食點(diǎn)餐》云應(yīng)用前后端全部免費(fèi)開源啦!
Android JNI
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服