一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android全格式多媒體播放器(二:opencore媒體系統(tǒng)解析)

 jiayongmao 2010-12-13
android全格式多媒體播放器(二:opencore媒體系統(tǒng)解析)
本文的目的是為了分析android中的多媒體播放體系,在了解了它的播放體系上,拋棄它原先的基于opencore的架構(gòu),重新涉及一套基于ffmpeg的架構(gòu)。沒(méi)有時(shí)間做詳細(xì)論述,本文目前先列一個(gè)提綱,用來(lái)分析android2.1中媒體播放架構(gòu),以后得空再進(jìn)行補(bǔ)充。

1,java部分供java應(yīng)用程序調(diào)用的接口為android.media.MediaPlayer。關(guān)于此類的詳細(xì)描述可以參考android的文檔MediaPlayer.html。我將接口列在了下面,
            mMediaPlayer.stop();
            mMediaPlayer.release();
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setOnPreparedListener(mPreparedListener);
            mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
            mMediaPlayer.setOnCompletionListener(mCompletionListener);
            mMediaPlayer.setOnErrorListener(mErrorListener);
            mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
            mMediaPlayer.setDataSource(mContext, mUri);
            mMediaPlayer.setDisplay(mSurfaceHolder);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setScreenOnWhilePlaying(true);
            mMediaPlayer.prepareAsync();
            mMediaPlayer.isPlaying()
            mMediaPlayer.start();
                mMediaPlayer.pause();
            mDuration = mMediaPlayer.getDuration();
            mMediaPlayer.getCurrentPosition();
            mMediaPlayer.seekTo(msec);

2,android.media.MediaPlayer中有2部分,一部分供java上層如VideoView調(diào)用,一部分為native方法,調(diào)用jni。所有用到的jni的接口可以在frameworks/base/media/jni/android_media_MediaPlayer.cpp中找到。

3,android_media_MediaPlayer.cpp會(huì)調(diào)用c++層次的mediaplayer,在這里根據(jù)不同的擴(kuò)展名去調(diào)用不同的播放器,mp4可能會(huì)調(diào)用到PVPlayer。mediaplayer由下列文件實(shí)現(xiàn),
frameworks/base/media/libmedia/IMediaPlayer.cpp
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp

4,PVPlayer由opencore實(shí)現(xiàn),從以下文件去探尋
     frameworks/base/include/media/PVPlayer.h
     external/opencore/android/playerdriver.cpp

5,視頻顯示的實(shí)現(xiàn),使用android-surface進(jìn)行render,由opencore對(duì)surfaceflinger做了封裝,在下列文件中,
external/opencore/android/android_surface_output.h
external/opencore/android/android_surface_output.cpp
如果我們使用基于ffmpeg的多媒體播放器,這一塊可以參考,并移植過(guò)去。

6,音頻的實(shí)現(xiàn),使用了AudioOutput,請(qǐng)參考如下文件
frameworks/base/media/libmediaplayerservice/MediaPlayerService.h
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
調(diào)用MediaPlayerService::AudioOutput::open,創(chuàng)建AudioTrack mTrack??梢圆檎乙幌抡{(diào)用了mTrack的哪些方法。
調(diào)用ssize_t ret = mTrack->write(buffer, size);將數(shù)據(jù)寫(xiě)入AudioTrack。
frameworks/base/include/media/AudioTrack.h
frameworks/base/media/libmedia/AudioTrack.cpp

7,音頻這一塊太過(guò)混雜,libmedia調(diào)用了opencore,libaudioflinger調(diào)用了libmedia,對(duì)于我們封裝造成了很大困難。鑒于此,考慮直接調(diào)用linux音頻設(shè)備,不使用android中l(wèi)ibmedia,libaudioflinger。

8,歡迎聯(lián)系 agooou@gmail.com 探討

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    99久久精品午夜一区二区| 日本午夜福利视频免费观看| 冬爱琴音一区二区中文字幕| 日韩精品中文字幕在线视频| 精品人妻一区二区三区四区久久 | 中文字幕91在线观看| 国产高清在线不卡一区| 加勒比系列一区二区在线观看 | 亚洲欧美日韩精品永久| 国产熟女一区二区精品视频| 欧美三级精品在线观看| 免费在线成人激情视频| 最近日韩在线免费黄片| 日韩1区二区三区麻豆| 大伊香蕉一区二区三区| 国产午夜精品福利免费不| 激情中文字幕在线观看| 91精品国产综合久久不卡| 欧美日韩人妻中文一区二区| 久久精品伊人一区二区| 一区二区日本一区二区欧美| 国产激情国产精品久久源| 成人你懂的在线免费视频| 久久精品亚洲精品一区| 国产一区二区三区四区免费| 日本少妇aa特黄大片| 欧美成人免费视频午夜色| 99秋霞在线观看视频| 麻豆果冻传媒一二三区| 在线亚洲成人中文字幕高清| 中文字幕五月婷婷免费 | 91播色在线免费播放| 国产精品流白浆无遮挡| 亚洲一区二区三区国产| 日本午夜一本久久久综合| 亚洲中文字幕熟女丝袜久久| 欧美做爰猛烈叫床大尺度| 日韩色婷婷综合在线观看| 日本欧美一区二区三区在线播| 好吊色免费在线观看视频| 成人三级视频在线观看不卡|