Android的多媒體框架OpenCore介紹_第1頁
Android的多媒體框架OpenCore介紹_第2頁
Android的多媒體框架OpenCore介紹_第3頁
Android的多媒體框架OpenCore介紹_第4頁
Android的多媒體框架OpenCore介紹_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一部分 OpenCore概述OpenCore的另外一個常用的稱呼是PacketVideo,它是Android的多媒體核心。在防站的過程中,PacketVideo是一家公司的名稱,而OpenCore是這套多媒體框架的軟件層的名稱。在Android的開發(fā)者中間,二者的含義基本相同。對比Android的其它程序庫,OpenCore的代碼非常龐大,它是一個基于C+的實現,定義了全功能的操作系統(tǒng)移植層,各種基本的功能均被封裝成類的形式,各層次之間的接口多使用繼承等方式。OpenCore是一個多媒體的框架,從宏觀上來看,它主要包含了兩大方面的內容:PVPlayer:提供媒體播放器的功能,完成各種音頻(A

2、udio)、視頻(Video)流的回放(Playback)功能PVAuthor:提供媒體流記錄的功能,完成各種音頻(Audio)、視頻(Video)流的以及靜態(tài)圖像捕獲功能PVPlayer和PVAuthor以SDK的形式提供給開發(fā)者,可以在這個SDK之上構建多種應用程序和服務。在移動終端中常常使用的多媒體應用程序,例如媒體播放器、照相機、錄像機、錄音機等等。為了更好的組織整體的架構,OpenCore在軟件層次在宏觀上分成幾個層次:OSCL:Operating System Compatibility Library (操作系統(tǒng)兼容庫),包含了一些操作系統(tǒng)底層的操作,為了更好地在不同操作系統(tǒng)移植

3、。包含了基本數據類型、配置、字符串工具、IO、錯誤處理、線程等內容,類似一個基礎的C+庫。PVMF:PacketVideo Multimedia Framework(PV多媒體框架),在框架內實現一個文件解析(parser)和組成(composer)、編解碼的NODE,也可以繼承其通用的接口,在用戶層實現一些NODE。PVPlayer Engine:PVPlayer引擎。PVAuthor Engine:PVAuthor引擎。事實上,OpenCore中包含的內容非常多:從播放的角度,PVPlayer的輸入的(Source)是文件或者網絡媒體流,輸出(Sink)是音頻視頻的輸出設備,其基本功能包含

4、了媒體流控制、文件解析、音頻視頻流的解碼(Decode)等方面的內容。除了從文件中播放媒體文件之外,還包含了與網絡相關的RTSP流(Real Time Stream Protocol,實時流協(xié)議)。在媒體流記錄的方面,PVAuthor的輸入的(Source)是照相機、麥克風等設備,輸出(Sink)是各種文件,包含了流的同步、音頻視頻流的編碼(Encode)以及文件的寫入等功能。在使用OpenCore的SDK的時候,有可能需要在應用程序層實現一個適配器(Adaptor),然后在適配器之上實現具體的功能,對于PVMF的NODE也可以基于通用的接口,在上層實現,以插件的形式使用。第二部分 OpenC

5、ore的代碼結構2.1 代碼結構 以開源Android的代碼為例,OpenCore的代碼在以下目錄中:external/opencore/。這個目錄是OpenCore的根 目錄,其中包含的子目錄如下所示:android:這里面是一個上層的庫,它基于PVPlayer和PVAuthor的SDK實現了一個為Android使用的Player和Author。baselibs:包含數據結構和線程安全等內容的底層庫codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現engines:包含PVPlayer和PVAuthor引擎的實現extern_libs_v2:包含了kh

6、ronos的OpenMAX的頭文件fileformats:文件格式的解析(parser)工具nodes:提供一些PVMF的NODE,主要是編解碼和文件解析方面的。oscl:操作系統(tǒng)兼容庫pvmi: 輸入輸出控制的抽象接口protocols:主要是與網絡相關的RTSP、RTP、HTTP等協(xié)議的相關內容pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件。pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件。pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件。tools_v2:編譯工具以及一些可注冊的模塊。 在exte

7、rnal/opencore/目錄中還有2個文件,如下所示:Android.mk:全局的編譯文件pvplayer.conf:配置文件 在external/opencore/的各個子文件夾中包含了眾多的Android.mk文件,它們之間還存在著“遞歸”的關系。例如根目錄下的Android.mk,就包含了如下的內容片斷:復制代碼1. include $(PV_TOP)/pvcommon/Android.mk2. include $(PV_TOP)/pvplayer/Android.mk3. include $(PV_TOP)/pvauthor/Android.mk這表示了要引用pvcommon,pv

8、player和pvauthor等文件夾下面的Android.mk文件。external/opencore/的各個Android.mk文件可以按照排列組合進行使用,將幾個Android.mk內容合并在一個庫當中2.2 編譯結構 1庫的層次關系:在Android的開源版本中編譯出來的內容,OpenCore編譯出來的各個庫如下所示:libopencoreauthor.so:OpenCore的Author庫libopencorecommon.so:OpenCore底層的公共庫libopencoredownloadreg.so :下載注冊庫libopencoredownload.so:下載功能實現庫li

9、bopencoremp4reg.so :MP4注冊庫libopencoremp4.so:MP4功能實現庫libopencorenet_support.so:網絡支持庫libopencoreplayer.so :OpenCore的Player庫libopencorertspreg.so:RTSP注冊庫libopencorertsp.so :RTSP功能實現庫 這些庫的層次關系如下圖所示:OpenCore的各個庫之間具有如下的關系:libopencorecommon.so是所有的庫的依賴庫,提供了公共的功能;libopencoreplayer.so和libopencoreauthor.so是兩個并

10、立的庫,分別用于回放和記錄,而且這兩個庫是OpenCore對外的接口庫;libopencorenet_support.so提供網絡支持的功能;一些功能以插件(Plug-In)的方式放入Player中使用,每個功能使用兩個庫,一個實現具體功能,一個用于注冊。2libopencorecommon.so庫的結構libopencorecommon.so是整個OpenCore的核心庫,它的編譯控制的文件的路徑為pvcommon/Android.mk,這個文件使用遞歸的方式尋找子文件:復制代碼1. include $(BUILD_SHARED_LIBRARY)2. include $(PV_TOP)/os

11、cl/oscl/osclbase/Android.mk3. include $(PV_TOP)/oscl/oscl/osclerror/Android.mk4. include $(PV_TOP)/oscl/oscl/osclmemory/Android.mk5. include $(PV_TOP)/oscl/oscl/osclutil/Android.mk6. include $(PV_TOP)/oscl/pvlogger/Android.mk7. include $(PV_TOP)/oscl/oscl/osclproc/Android.mk8. include $(PV_TOP)/oscl

12、/oscl/osclio/Android.mk9. include $(PV_TOP)/oscl/oscl/osclregcli/Android.mk10. include $(PV_TOP)/oscl/oscl/osclregserv/Android.mk11. include $(PV_TOP)/oscl/unit_test/Android.mk12. include $(PV_TOP)/oscl/oscl/oscllib/Android.mk13. include $(PV_TOP)/pvmi/pvmf/Android.mk14. include $(PV_TOP)/baselibs/p

13、v_mime_utils/Android.mk15. include $(PV_TOP)/nodes/pvfileoutputnode/Android.mk16. include $(PV_TOP)/baselibs/media_data_structures/Android.mk17. include $(PV_TOP)/baselibs/threadsafe_callback_ao/Android.mk18. include $(PV_TOP)/codecs_v2/utilities/colorconvert/Android.mk19. include $(PV_TOP)/codecs_v

14、2/audio/gsm_amr/amr_nb/common/Android.mk20. include $(PV_TOP)/codecs_v2/video/avc_h264/common/Android.mk這些被包含的Android.mk文件真正指定需要編譯的文件,這些文件在Android.mk的目錄及其子目錄中。事實上,在libopencorecommon.so庫中包含了以下內容:OSCL的所有內容Pvmf框架部分的內容(pvmi/pvmf/Android.mk)基礎庫中的一些內容(baselibs)編解碼的一些內容文件輸出的node(nodes/pvfileoutputnode/Andr

15、oid.mk)從庫的結構中可以看出,最終生成庫的結構與OpenCore的層次關系并非完全重合。libopencorecommon.so庫中就包含了底層的OSCL的內容、PVMF的框架以及Node和編解碼的工具。3libopencoreplayer.so庫的結構libopencoreplayer.so是用于播放的功能庫,它的編譯控制的文件的路徑為pvplayer/Android.mk,它包含了以下的內容:復制代碼1. include $(BUILD_SHARED_LIBRARY)2. include $(PV_TOP)/engines/player/Android.mk3. include $(

16、PV_TOP)/codecs_v2/audio/aac/dec/util/getactualaacconfig/Android.mk4. include $(PV_TOP)/codecs_v2/video/avc_h264/dec/Android.mk5. include $(PV_TOP)/codecs_v2/audio/aac/dec/Android.mk6. include $(PV_TOP)/codecs_v2/audio/gsm_amr/amr_nb/dec/Android.mk7. include $(PV_TOP)/codecs_v2/audio/gsm_amr/amr_wb/d

17、ec/Android.mk8. include $(PV_TOP)/codecs_v2/audio/gsm_amr/common/dec/Android.mk9. include $(PV_TOP)/codecs_v2/audio/mp3/dec/Android.mk10. include $(PV_TOP)/codecs_v2/utilities/m4v_config_parser/Android.mk11. include $(PV_TOP)/codecs_v2/utilities/pv_video_config_parser/Android.mk12. include $(PV_TOP)

18、/codecs_v2/omx/omx_common/Android.mk13. include $(PV_TOP)/codecs_v2/omx/omx_queue/Android.mk14. include $(PV_TOP)/codecs_v2/omx/omx_h264/Android.mk15. include $(PV_TOP)/codecs_v2/omx/omx_aac/Android.mk16. include $(PV_TOP)/codecs_v2/omx/omx_amr/Android.mk17. include $(PV_TOP)/codecs_v2/omx/omx_mp3/A

19、ndroid.mk18. include $(PV_TOP)/codecs_v2/omx/factories/omx_m4v_factory/Android.mk19. include $(PV_TOP)/codecs_v2/omx/omx_proxy/Android.mk20. include $(PV_TOP)/nodes/common/Android.mk21. include $(PV_TOP)/pvmi/content_policy_manager/Android.mk22. include $(PV_TOP)/pvmi/content_policy_manager/plugins/

20、oma1/passthru/Android.mk23. include $(PV_TOP)/pvmi/content_policy_manager/plugins/common/Android.mk24. include $(PV_TOP)/pvmi/media_io/pvmiofileoutput/Android.mk25. include $(PV_TOP)/fileformats/common/parser/Android.mk26. include $(PV_TOP)/fileformats/id3parcom/Android.mk27. include $(PV_TOP)/filef

21、ormats/rawgsmamr/parser/Android.mk28. include $(PV_TOP)/fileformats/mp3/parser/Android.mk29. include $(PV_TOP)/fileformats/mp4/parser/Android.mk30. include $(PV_TOP)/fileformats/rawaac/parser/Android.mk31. include $(PV_TOP)/fileformats/wav/parser/Android.mk32. include $(PV_TOP)/nodes/pvaacffparserno

22、de/Android.mk33. include $(PV_TOP)/nodes/pvmp3ffparsernode/Android.mk34. include $(PV_TOP)/nodes/pvamrffparsernode/Android.mk35. include $(PV_TOP)/nodes/pvmediaoutputnode/Android.mk36. include $(PV_TOP)/nodes/pvomxvideodecnode/Android.mk37. include $(PV_TOP)/nodes/pvomxaudiodecnode/Android.mk38. inc

23、lude $(PV_TOP)/nodes/pvwavffparsernode/Android.mk39. include $(PV_TOP)/pvmi/recognizer/Android.mk40. include $(PV_TOP)/pvmi/recognizer/plugins/pvamrffrecognizer/Android.mk41. include $(PV_TOP)/pvmi/recognizer/plugins/pvmp3ffrecognizer/Android.mk42. include $(PV_TOP)/pvmi/recognizer/plugins/pvwavffre

24、cognizer/Android.mk43. include $(PV_TOP)/engines/common/Android.mk44. include $(PV_TOP)/engines/adapters/player/framemetadatautility/Android.mk45. include $(PV_TOP)/protocols/rtp_payload_parser/util/Android.mk46. include $(PV_TOP)/android/Android.mk47. include $(PV_TOP)/android/drm/oma1/Android.mk48

25、. include $(PV_TOP)/tools_v2/build/modules/linux_rtsp/core/Android.mk49. include $(PV_TOP)/tools_v2/build/modules/linux_rtsp/node_registry/Android.mk50. include $(PV_TOP)/tools_v2/build/modules/linux_net_support/core/Android.mk51. include $(PV_TOP)/tools_v2/build/modules/linux_download/core/Android.

26、mk52. include $(PV_TOP)/tools_v2/build/modules/linux_download/node_registry/Android.mk53. include $(PV_TOP)/tools_v2/build/modules/linux_mp4/core/Android.mk54. include $(PV_TOP)/tools_v2/build/modules/linux_mp4/node_registry/Android.mklibopencoreplayer.so中包含了以下內容:一些解碼工具文件的解析器(mp4)解碼工具對應的Nodeplayer的引

27、擎部分(engines/player/Android.mk)為Android的player適配器(android/Android.mk)識別工具(pvmi/recognizer)編解碼工具中的OpenMax部分(codecs_v2/omx)對應幾個插件Node的注冊libopencoreplayer.so中的內容較多,其中主要為各個文件解析器和解碼器,PVPlayer的核心功能在engines/player/Android.mk當中,而android/Android.mk的內容比較特殊,它是在PVPlayer之上構建的一個為Android使用的播放器。4libopencoreauthor.so

28、庫的結構libopencoreauthor.so是用于媒體流記錄的功能庫,它的編譯控制的文件的路徑為pvauthor/Android.mk,它包含了以下的內容:復制代碼1. include $(BUILD_SHARED_LIBRARY)2. include $(PV_TOP)/engines/author/Android.mk3. include $(PV_TOP)/codecs_v2/video/m4v_h263/enc/Android.mk4. include $(PV_TOP)/codecs_v2/audio/gsm_amr/amr_nb/enc/Android.mk5. include

29、 $(PV_TOP)/codecs_v2/video/avc_h264/enc/Android.mk6. include $(PV_TOP)/fileformats/mp4/composer/Android.mk7. include $(PV_TOP)/nodes/pvamrencnode/Android.mk8. include $(PV_TOP)/nodes/pvmp4ffcomposernode/Android.mk9. include $(PV_TOP)/nodes/pvvideoencnode/Android.mk10. include $(PV_TOP)/nodes/pvavcen

30、cnode/Android.mk11. include $(PV_TOP)/nodes/pvmediainputnode/Android.mk12. include $(PV_TOP)/android/author/Android.mk libopencoreauthor.so中包含了以下內容:一些編碼工具(視頻流H263、H264,音頻流Amr)文件的組成器(mp4)編碼工具對應的Node表示媒體輸入的Node(nodes/pvmediainputnode/Android.m)author的引擎部分(engines/author/Android.mk)為Android的author適配器(a

31、ndroid/author/Android.mk)libopencoreauthor.so中主要為各個文件編碼器和文件組成器,PVAuthor的核心功能在engines/author/Android.mk當中,而android/author/Android.mk是在PVAuthor之上構建的一個為Android使用的媒體記錄器。5其他庫另外的幾個庫的Android.mk文件的路徑如下所示:網絡支持庫libopencorenet_support.so:tools_v2/build/modules/linux_net_support/core/Android.mkMP4功能實現庫libopenco

32、remp4.so和注冊庫libopencoremp4reg.so:tools_v2/build/modules/linux_mp4/core/Android.mktools_v2/build/modules/linux_mp4/node_registry/Android.mkRTSP功能實現庫libopencorertsp.so和注冊庫libopencorertspreg.so:tools_v2/build/modules/linux_rtsp/core/Android.mktools_v2/build/modules/linux_rtsp/node_registry/Android.mk下載

33、功能實現庫libopencoredownload.so和注冊庫libopencoredownloadreg.so:tools_v2/build/modules/linux_download/core/Android.mktools_v2/build/modules/linux_download/node_registry/Android.mk第三部分 OpenCore OSCL簡介OSCL,全稱為Operating System Compatibility Library (操作系統(tǒng)兼容庫),它包含了一些在不同操作系統(tǒng)中移植層的功能,其代碼結構如下所示:oscl/oscl|- config:配

34、置的宏|- makefile|- makefile.pv|- osclbase:包含基本類型、宏以及一些STL容器類似的功能|- osclerror:錯誤處理的功能|- osclio:文件IO和Socket等功能|- oscllib:動態(tài)庫接口等功能|- osclmemory :內存管理、自動指針等功能|- osclproc:線程、多任務通訊等功能|- osclregcli :注冊客戶端的功能|- osclregserv:注冊服務器的功能- osclutil :字符串等基本功能在oscl的目錄中,一般每一個目錄表示一個模塊。OSCL對應的功能是非常細致的,幾乎對C語言中每一個細節(jié)的功能都進行封

35、裝,并使用了C+的接口提供給上層使用。事實上,OperCore中的PVMF、Engine部分都在使用OSCL,而整個OperCore的調用者也需要使用OSCL。在OSCL的實現中,很多典型的C語言函數被進行了簡單的封裝,例如:osclutil中與數學相關的功能在oscl_math.inl中被定義成為了內嵌(inline)的函數:復制代碼1. OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_log(double value)2. 3. return (double) log(value);4. 5. OSCL_COND_EXPORT_REF OSCL_I

36、NLINE double oscl_log10(double value)6. 7. return (double) log10(value);8. 9. OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_sqrt(double value)10. 11. return (double) sqrt(value);12. oscl_math.inl文件又被oscl_math.h所包含,因此其結果是oscl_log()等功能的使用等價于原始的log()等函數。很多C語言標準庫的句柄都被定義成為了C+類的形式,實現由一些繁瑣,但是復雜性都不是很高。以oscll

37、ib為例,其代碼結構如下所示:oscl/oscl/oscllib/|- Android.mk|- build| - make| - makefile- src|- oscl_library_common.h|- oscl_library_list.cpp|- oscl_library_list.h|- oscl_shared_lib_interface.h|- oscl_shared_library.cpp- oscl_shared_library.hoscl_shared_library.h是提供給上層使用的動態(tài)庫的接口功能,它定義的接口如下所示:復制代碼1. class OsclShare

38、dLibrary2. 3. public:4. OSCL_IMPORT_REF OsclSharedLibrary();5. OSCL_IMPORT_REF OsclSharedLibrary(const OSCL_String& aPath);6. OSCL_IMPORT_REF OsclSharedLibrary();7. OSCL_IMPORT_REF OsclLibStatus LoadLib(const OSCL_String& aPath);8. OSCL_IMPORT_REF OsclLibStatus LoadLib();9. OSCL_IMPORT_REF void SetL

39、ibPath(const OSCL_String& aPath);10. OSCL_IMPORT_REF OsclLibStatus QueryInterface(const OsclUuid& aInterfaceId, OsclAny*& aInterfacePtr);11. OSCL_IMPORT_REF OsclLibStatus Close();12. OSCL_IMPORT_REF void AddRef();13. OSCL_IMPORT_REF void RemoveRef();14. 這些接口顯然都是與庫的加載有關系的,而在oscl_shared_library.cpp 中其

40、具體的功能是使用dlopen()等函數來實現的。第四部分 文件格式處理和編解碼部分簡介在多媒體方面,文件格式的處理和編解碼(Codec)是很基礎的兩個方面的內容。多媒體應用的兩個方面是媒體的播放(PlayBack)和媒體的記錄(Recording)。 在媒體的播放過程中,通常情況是從對媒體文件的播放,必要的兩個步驟為文件的解析和媒體流的解碼。例如對于一個mp4的文件,其中可能包括AMR和AAC的音頻流,H263、MPEG4以及AVC(H264)的視頻流,這些流被封裝在3GP的包當中,媒體播放器要做的就是從文件中將這些流解析出來,然后對媒體流進行解碼,解碼后的數據才可以播放。 在媒體的記錄過程中

41、,通過涉及到視頻、音頻、圖像的捕獲功能。對于將視頻加音頻錄制成文件功能,其過程與播放剛好相反,首先從硬件設備得到視頻和音頻的媒體流,然后對其進行編碼,編碼號的流還需要被分層次寫入到文件之中,最終得到組成好的文件。OpenCore有關文件格式處理和編解碼部分兩部分的內容,分別在目錄fileformats和codecs_v2當中。這兩部分都屬于基礎性的功能,不涉及具體的邏輯,因此它們被別的模塊調用來使用,例如:構建各種Node。4.1 文件格式的處理 由于同時涉及播放文件和記錄文件兩種功能,因此OpenCore中的文件格式處理有兩種類型,一種是parser(解析器),另一種是composer(組成

42、器)。fileformats的目錄結構如下所示:fileformats|- avi| - parser|- common| - parser|- id3parcom| |- Android.mk| |- build| |- include| - src|- mp3| - parser|- mp4| |- composer| - parser|- rawaac| - parser|- rawgsmamr| - parser- wav- parser 目錄包含各個子目錄中,它們對應的是不同的文件格式,例如mp3、mp4和wav等。4.2 編解碼 編解碼部分主要針對Audio和Video,codec

43、s_v2的目錄結構如下所示:codecs_v2|- audio| |- aac| |- gsm_amr| |- mp3| - sbc|- omx| |- factories| |- omx_aac| |- omx_amr| |- omx_common| |- omx_h264| |- omx_m4v| |- omx_mp3| |- omx_proxy| - omx_queue|- utilities| |- colorconvert| |- m4v_config_parser| - pv_video_config_parser- video|- avc_h264- m4v_h263 在audi

44、o 和video目錄中,對應了針對各種流的子目錄,其中可能包含dec和enc兩個目錄,分別對應解碼和編碼。video目錄展開后的內容如下所示:- video|- avc_h264| |- common| |- dec| |- enc| - patent_disclaimer.txt- m4v_h263|- dec|- enc- patent_disclaimer.txt codecs_v2目錄的子目錄omx實現了一個khronosOpenMAX的功能。OpenMAX是一個多媒體應用程序的框架標準,由NVIDIA公司和Khronos在2006年推出。OpenMAX IL 1.0(集成層)技術規(guī)格

45、定義了媒體組件接口,以便在嵌入式器件的流媒體框架中快速集成加速式編解碼器。OpenMAX的設計實現可以讓具有硬件編輯碼功能的平臺提供統(tǒng)一的接口和框架,在OpenMAX中可以直接使用硬件加速的進行編解碼乃至輸出的功能,對外保持統(tǒng)一的接口。但是在此處的OpenMAX則是一個純軟件的實現。第五部分 OpenCore Player介紹5.1 Player的組成OpenCore的Player的編譯文件是pvplayer/Android.mk,將生成動態(tài)庫文件libopencoreplayer.so。這個庫包含了兩方面的內容:一方是Player的engine(引擎),一方面是為Android構件的Play

46、er,這實際上是一個適配器(adapter)。engine的路徑是engine/player;adapter的路徑是android。5.2 Player Engine部分OpenCore的Player Engine具有清晰明確的接口。在這個接口之上,不同的系統(tǒng)可一個根據自己的情況實現不同Player。目錄engines中的文件結構如下所示:engines/player/|- Android.mk|- build| |- linux_nj| |- make| - makefile.conf|- config| - linux_nj|- include| |- pv_player_datasink

47、.h| |- pv_player_datasinkfilename.h| |- pv_player_datasinkpvmfnode.h| |- pv_player_datasource.h| |- pv_player_datasourcepvmfnode.h| |- pv_player_datasourceurl.h| |- pv_player_events.h| |- pv_player_factory.h| |- pv_player_interface.h| |- pv_player_license_acquisition_interface.h| |- pv_player_regist

48、ry_interface.h| |- pv_player_track_selection_interface.h| - pv_player_types.h|- sample_app| |- Android.mk| |- build| |- sample_player_app_release.txt| - src|- src| |- pv_player_datapath.cpp| |- pv_player_datapath.h| |- pv_player_engine.cpp| |- pv_player_engine.h| |- pv_player_factory.cpp| |- pv_play

49、er_node_registry.h| - pv_player_sdkinfo.h- test|- Android.mk|- build|- config- src其中,engines/player/include目錄中是接口頭文件,engines/player/src目錄源文件和私有頭文件,主要頭文件的功能如下所示:pv_player_types.h:定義一些數據結構和枚舉值pv_player_events.h:定義UUID和一些錯誤值。pv_player_datasink.h:datasink是媒體數據的輸出,定義類PVPlayerDataSink,這是媒體數據輸出的基類,作為接口使用pv

50、_player_datasinkfilename.h:定義類PVPlayerDataSinkFilename繼承PVPlayerDataSink。pv_player_datasinkpvmfnode.h:定義類PVPlayerDataSinkPVMFNode繼承PVPlayerDataSink。pv_player_datasource.h:datasource是媒體數據的輸入,定義類PVPlayerDataSource,這是媒體數據輸入的基類,作為接口使用。pv_player_datasourcepvmfnode.h:定義類PVPlayerDataSourcePVMFNode繼承PVPlaye

51、rDataSource。pv_player_datasourceurl.h:定義類PVPlayerDataSourceURL繼承PVPlayerDataSource。pv_player_interface.h:定義Player的接口PVPlayerInterface,這是一個接口類。pv_player_factory.h:主要定義工廠類PVPlayerFactory,用于創(chuàng)建和銷毀PVPlayerInterface。事實上,在engines/player/src目錄中,主要實現類為pv_player_engine.cpp,其中定義了類PVPlayerEngine,PVPlayerEngine繼

52、承了PVPlayerInterface,這是一個實現類,在PVPlayerFactory創(chuàng)建PVPlayerInterface接口的時候,實際創(chuàng)建的是PVPlayerEngine。在Player Engine的實現中,包含了編解碼和流控制等功能,而輸出的介質需要從外部設置近來。PVPlayerInterface定義的接口基本是按照操作順序的,主要的接口如下所示:復制代碼1. PVCommandId AddDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL);PVCommandId Init

53、(const OsclAny* aContextData = NULL);2. PVCommandId AddDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL);3. PVCommandId Prepare(const OsclAny* aContextData = NULL);4. PVCommandId Start(const OsclAny* aContextData = NULL);5. PVCommandId Pause(const OsclAny* aContextData = NULL);6. PVCommandId Resume(const OsclAny* aContextData = NULL);7. PVCommandId Stop(const OsclAny* aContextData = NULL);8. PVCommandId RemoveDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL);9. PVCommandId

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論