欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[整理]Stagefright框架中視頻播放流程

[整理]Stagefright框架中視頻播放流程

分類(lèi): Android
Stagefright框架中視頻播放流程


1.創(chuàng )建playerengine
// 設置數據源,以及 audio sink
MediaPlayer::SetDataSource(PATH_TO_FILE)-> 
MediaPlayerService::create->
MediaPlayerService::Client::setDataSource->
GetPlayerType->
MediaPlayerService:: Client::CreatePlayer->
StagefrightPlayer:: setAudioSink->
StagefrightPlayer:: setDataSource->
Create MediaPlayerImpl(AwesomePlayer)->
MediaPlayerImpl:: MediaPlayerImpl 
PlayerType:
PV_PLAYER--------------------(OpenCore中的PVPlayer,2.2之前的默認多媒體框架,從2.3開(kāi)始android源碼中已經(jīng)不存在了,變更為Stagefright,但芯片廠(chǎng)商會(huì )添加進(jìn)來(lái)。位于external/opencore目錄。)
SONIVOX_PLAYER----------- MidiFile()(MIDI 格式)
STAGEFRIGHT_PLAYER----- StagefrightPlayer
NU_PLAYER---------------------NuPlayer(流媒體播放器)
TEST_PLAYER------------------- TestPlayerStub (only for ‘test’ and ‘eng’build)
//以下為與openMax插件的初始化連接。
AwesomePlayer:mClient.connect()->
OMXClient::connect->
MediaPlayerService::getOMX()->
OMXMaster::OMXMaster: addVendorPlugin ()->
addPlugin((*createOMXPlugin ())->
*createOMXPlugin (){
new TIOMXPlugin;
}


2.解析mUri指定的內容,根據header來(lái)確定對應的Extractor
AwesomePlayer:: prepare()
AwesomePlayer:: prepareAsync_l()->
在該函數中啟動(dòng)mQueue,作為EventHandler(stagefright使用event來(lái)進(jìn)行驅動(dòng))
AwesomePlayer::finishSetDataSource_l()->
MediaExtractor::create(datasource)->


3.使用extractor對文件做A/V分離(mVideoTrack/mAudioTrack)
AwesomePlayer::setDataSource_l(extractor)->
AwesomePlayer::setVideoSource()->
AwesomePlayer::setAudioSource()->
mVideoTrack=source
mAudioTrack=source


4.根據mVideoTrace中編碼類(lèi)型來(lái)選擇video_decoder(mVideoSource)
AwesomePlayer::initVideoDecoder()->
mVideoSource->start();(初始化解碼器)
OMXCodec::Create()->
根據編碼類(lèi)型去匹配codecs,將softwareCodec優(yōu)先放在matchCodecs前面,優(yōu)先匹配,即優(yōu)先建立softWareCodec
<MediaSource>softwareCodec=InstantiateSoftwareCodec(componentName, source)->
如果沒(méi)有匹配的softWareCodec則去調用hardware中實(shí)現的omx_codec
omx->allocateNode(componentName...)->
sp<OMXCodec> codec = new OMXCodec(~)->
observer->setCodec(codec)->
err = codec->configureCodec(meta, flags)->
return codec.


5.根據mAudioTrace中編碼類(lèi)型來(lái)選擇audio_decoder(mAudioSource)
AwesomePlayer::initAudioDecoder()->
mAudioSource->start();(初始化解碼器)
OMXCodec::Create()->
根據編碼類(lèi)型去匹配codecs,將softwareCodec優(yōu)先放在matchCodecs前面,優(yōu)先匹配,即優(yōu)先建立softWareCodec
<MediaSource>softwareCodec=InstantiateSoftwareCodec(componentName, source)->
如果沒(méi)有匹配的softWareCodec則去調用Hardware中實(shí)現的omx_codec
omx->allocateNode(componentName...)->
sp<OMXCodec> codec = new OMXCodec(~)->
observer->setCodec(codec)->
err = codec->configureCodec(meta, flags)->
return codec.


6.創(chuàng )建AudioPlayer,解碼并開(kāi)啟Audio output播放audio數據
AwesomePlayer::play_l->
mAudioPlayer = new AudioPlayer(mAudioSink, this);
mAudioPlayer->setSource(mAudioSource);
mAudioPlayer->start
mSource->read(&mFirstBuffer);(在audioplayer啟動(dòng)過(guò)程中,會(huì )先讀取第一段需解碼后的資料。)
mAudioSink->open(..., &AudioPlayer::AudioSinkCallback, ...);
AudioSinkCallback{
me->fillBuffer(buffer, size)
}
開(kāi)啟audio output,同時(shí)AudioPlayer將callback函數設給它,之后每次callback函數被調用,AudioPlayer便會(huì )去讀取Audio decoder解碼后的資料。)


7.根據Codec類(lèi)型選擇Renderer
AwesomePlayer::start->
postVideoEvent_l();
AwesomePlayer::onVideoEvent()->
mVideoSource->read()(&mVideoBuffer, &options)->
AwesomePlayer::initRenderer_l()->
判斷Codec類(lèi)型,
HardWare Codec:
mVideoRenderer =new AwesomeNativeWindowRenderer(mSurface, rotationDegrees);
AwesomeNativeWindowRenderer::render()(hook Called by EGL)->
HardWare Codec不需要進(jìn)行ColorConvert操作,直接push到NativeWindow
SoftWare Codec:
mVideoRenderer = new AwesomeLocalRenderer(mSurface, meta)->
mVideoRenderer = new SoftwareRenderer()->
SoftwareRenderer::render()->
AwesomePlayer::onVideoEvent()->
[Check Timestamp]
mVideoRenderer->render(mVideoBuffer);


8.Audio和Video同步
Stagefright中Audio由CallBack驅動(dòng)數據流,Video則在OnVideoEvent中獲取Audio的timeStamp,進(jìn)行同步。
Audio::fillBuffer()->     
mPositionTimeMediaUs為資料中的timestamp,
mPositionTimeRealUs為播放資料的實(shí)際時(shí)間。
 AwesomePlayer::onVideoEvent()->
mTimeSourceDeltaUs = realTimeUs- mediaTimeUs
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
stagefright框架
Android-StageFright之decode
StageFright框架流程解讀
stagefright簡(jiǎn)單流程
opencore and stagefright
Android播放器框架分析 1
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久