目前分類:Android (6)

瀏覽方式: 標題列表 簡短摘要

本文記錄 AOSP 原始碼下載编譯與安裝於 Nexus 9 (flounder/volantis). 步驟請参考 参考 AOSP 網頁 https://source.android.com/source/requirements.html. 分支 (Branch -b) 選取請参考 https://source.android.com/source/build-numbers.html#source-code-tags-and-builds.

原始碼下載

$ mkdir aosp
$ cd aosp/
~/aosp$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r12
~/aosp$ repo sync -j8

编譯

~/aosp$ source build/envsetup.sh 
~/aosp$ lunch

版大 發表在 痞客邦 留言(0) 人氣()

攝影機預覽錄影 - 使用 MediaCodec input surface 與 MediaMuxer 中, 錄製的影像來源為攝影機的輸出影像, 無法錄製 OpenGL ES Fragment shader 處理後的影像. 本文建立兩個 EGL Surafce, 一為預覽用, 一為錄製用.

<<修改步驟>>

實作 GLSurfaceView.EGLContextFactory 為了取得 EGL Context.

private class SampleContextFactory implements GLSurfaceView.EGLContextFactory {
private int EGL_CONTEXT_CLIENT_VERSION = 0x3098;

public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig config) {
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, mEGLContextClientVersion,
EGL10.EGL_NONE };

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

攝影機預覽實作 - android.hardware.camera2  加入錄影功能. 使用 MediaCodec 與 MediaMuxer 實作錄影功能.

MediaCodec 將輸入影像編碼, MediaMuxer 將編碼後資料寫入檔案.

<<建立 MediaCodec 與 MediaMuxer>>

將 MediaCodec 輸入影像格式設定為 COLOR_FormatSurface 並呼叫 MediaCodec.createInputSurface() 建立 Surface.

 
final int COLOR_FORMAT = CodecCapabilities.COLOR_FormatSurface;

public
Surface init() {
// Set up encode format
MediaFormat encodeFormat = MediaFormat.createVideoFormat(MINE_TYPE, WIDTH, HEIGHT);
encodeFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
encodeFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

以 影像播放器實作 - 使用 OpenGL, MediaCodec 與 SurfaceTexture 為基礎, 加入 android.hardware.camera2 實作攝影機預覽功能.

<<預覽建立流程>>

步驟 1: 建立 GLSurfaceView, 這是 camera2 所需的 EGL 環境

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Step 1: Create GLSurfaceView for camera2 required EGL environment
GLSurfaceView glSurfaceView;
glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setEGLContextClientVersion(2);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

使用 MediaPlayer 類别可以快速的開發影音播放器但是缺少了對於底層缓冲區操作的可能. 本文使用 MediaCodec 類别實作簡易的影像播放器, 並不包含聲音與影音同步與大部分的錯誤處理.

對於MediaPlayer 類别的實作請参考 影音播放器實作 - 使用 MediaPlayer 類别  一文.

<<原始碼>>

GitHub SampleMediaCodec  

<<類别介绍 - MediaExtractor>>

用來取得媒體檔案資訊 (MediaFormat) 與原始影像資料 (SampleData).

<<類别介绍 - MediaCodec>>

處理原始影像資料 (SampleData) 並輸出解碼後影像, 原始影像資料來源為可從 MediaExtractor.readSampleData() 取得.

輸入缓冲區由 getInputBuffer() 取得, 但是需要先呼叫 dequeueInputBuffer() 取得可用缓冲區索引值 (index). 將原始影像資料置入輸入缓冲區後, 呼叫 queueInputBuffer() 讓 MediaCodec 解碼.

解碼後的影像 (輸出缓冲區) 可由 getOutputBuffer() 取得並修改, 同樣的, 需要先呼叫 dequeueOutputBuffer() 取得可用缓冲區索引值, 與呼叫 releaseOutputBuffer() 通知 MediaCodec 輸出缓冲區的操作完成.

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文使用 MediaPlayer 類别實作影音播放器. 

<<Commit>>

commit 40967ef47d6df1d13b3dff69e4f4e886d8c7e2d3
Use MediaPlayer.prepareAsync() instead of prepare() to avoid UI no response in buffering

commit 4b757d8cda01b91a44ade5c7c9a615b244050180
Implement video playback
Playback video from internet
Create SurfaceView and SurfaceHolder and set MediaPlayer video surface on it

commit 656bc0b269f32bffe69c0543916d4aa1581c9e99
Implement playback timer

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()