溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Wireshark工具介紹

發(fā)布時間:2020-06-29 14:55:48 來源:網(wǎng)絡(luò) 閱讀:4372 作者:wx5cef3cea13078 欄目:軟件技術(shù)

概述

智能手機(jī)的開機(jī)畫面一般是由一幀靜態(tài)圖片或者一組靜態(tài)圖片組成。一組動態(tài)圖片可以在代碼中實現(xiàn)開機(jī)動畫的效果。為了豐富開機(jī)界面的形式,百變開機(jī)畫面補(bǔ)充了這樣的需求。

可以實現(xiàn)開機(jī)播放自定義視頻,又可以兼容開機(jī)播放靜態(tài)圖片的功能。

該功能主要由兩個bin服務(wù)實現(xiàn)

Counter服務(wù)是屬于系統(tǒng)bin服務(wù),位置在/system/bin/counter,擁有系統(tǒng)權(quán)限,可以讀寫系統(tǒng)file,實現(xiàn)開機(jī)畫面的倒計時功能與開機(jī)靜態(tài)圖片的展示。

Play服務(wù)是屬于系統(tǒng)bin服務(wù),位置在/system/bin/counter,擁有系統(tǒng)權(quán)限,可以讀寫系統(tǒng)file,實現(xiàn)開機(jī)自定義視頻功能,可以支持mp4ts等常見視頻格式


Counte實現(xiàn)

counter.cpp是一個顯性的倒計時提示,在用戶自定義的開機(jī)視頻和開機(jī)畫面上顯示剩余秒數(shù)提示用戶,同時如果有靜態(tài)圖片,背景顯示圖片。

1.?????? Counter是系統(tǒng)bin服務(wù),通過createSurface創(chuàng)建實例作為圖層:

status_t Counter::readyToRun() {

?

??? //獲取內(nèi)建顯示設(shè)備

??? sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(

??????????? ISurfaceComposer::eDisplayIdMain));

DisplayInfo dinfo;

//獲取默認(rèn)的Display對象參數(shù)

??? status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &dinfo);

??? if (status)

??????? return -1;

??? // 創(chuàng)建native SurfaceView

??? sp<SurfaceControl> control = session()->createSurface(String8("Counter"),

??????????? dinfo.w, dinfo.h, PIXEL_FORMAT_RGBA_8888, 0);

?

??? //操作SurfaceComposeClient,并設(shè)置圖層優(yōu)先級

??? SurfaceComposerClient::openGlobalTransaction();

??? control->setLayer(0x40000002);

??? SurfaceComposerClient::closeGlobalTransaction();

??? sp<Surface> s = control->getSurface();

?

??? // 初始化 opengl 和 egl引擎參數(shù)

??? const EGLint attribs[] = {

??????????? EGL_RED_SIZE,?? 8,

??????????? EGL_GREEN_SIZE, 8,

??????????? EGL_BLUE_SIZE,? 8,

??????????? EGL_ALPHA_SIZE, 8,

??????????? EGL_DEPTH_SIZE, 0,

??????????? EGL_NONE

};

?

2.?????? 加載系統(tǒng)默認(rèn)UI資源,通過decodeImage來解碼圖片,并顯示在SurfaceLayer之上。

status_t Counter::initTexture(Texture* texture, AssetManager& assets,

??????? const char* name) {

//聲明bitmap對象

SkBitmap bitmap;

//通過sk庫函數(shù)對圖片進(jìn)行decode

SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),

??????????? &bitmap, kUnknown_SkColorType, SkImageDecoder::kDecodePixels_Mode);

?

//assert對象關(guān)閉,釋放資源

asset->close();

delete asset;

……

}

Wireshark工具介紹



Player.cpp 實現(xiàn)

??? Player.cpp是檢查data目錄下是否有視頻文件,通過在開機(jī)界面繪制surfaceview來播放視頻。

??? 在surfacelinger服務(wù)初始化完成后,啟動Player服務(wù),創(chuàng)建surface示例并設(shè)置初始化view參數(shù)。這部分與初始化Counter過程一樣,需要創(chuàng)建Native Surface。

檢測目錄下視頻文件后,開始調(diào)用MediaPlayer播放視頻,獲取視頻時長,格式,設(shè)置倒計時服務(wù),直到播放結(jié)束后進(jìn)入系統(tǒng)。

播放視頻相關(guān)代碼流程:

int main(int argc, char **argv) {

??? android::ProcessState::self()->startThreadPool();

?

??? //初始化SurfaceComposerClient

sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient;

//獲取內(nèi)建顯示設(shè)備

??? sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(

? ??????????ISurfaceComposer::eDisplayIdMain));

//創(chuàng)建Surface,初始化相關(guān)參數(shù)

??? sp<SurfaceControl> control =

??????? composerClient->createSurface(

??????????????? String8("A Surface"),

??????????????? displayWidth,

??????????????? displayHeight,

??????????????? PIXEL_FORMAT_RGB_565,

??????????????? 0);

??? SurfaceComposerClient::closeGlobalTransaction();

//創(chuàng)建MediaPlayer實例

??? sp<IMediaPlayer> player =

??????? service->create(client, AUDIO_SESSION_ALLOCATE);

?

??? //設(shè)置播放源目標(biāo)

??? if (player != NULL && player->setDataSource(source) == NO_ERROR) {

??????

//設(shè)置播放Video的SurfaceTexture,用于顯示播放視頻流

player->setVideoSurfaceTexture(surface->getIGraphicBufferProducer());

//開始播放文件

??????? player->start();

??????? client->waitForEOS();

?????? //播放停止

??????? player->stop();

??? } else {

?????? ?fprintf(stderr, "failed to instantiate player.\n");

}

//關(guān)閉composerClient

composerClient->dispose();

}

播放自定義視頻流程


Wireshark工具介紹



CounterPlayer加載分析:

init.rc中添加counteradvert服務(wù),user權(quán)限聲明為root,初次啟動設(shè)置為disabled,需要主動調(diào)起。

?

service connter /system/bin/counter

??? class core

? ??user root

??? group graphics audio

??? disabled

oneshot

?

service player /system/bin/player

??? class core

??? user root

??? group graphics audio

??? disabled

??? oneshot



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI