標籤:
筆者:Mark Liu
下載樣本代碼
簡單介紹
在 Android 中,建立一個可以播放視訊剪輯的應用很easy;建立一個採用 3D 圖形平面的遊戲應用也很easy。可是,建立一個可以在 3D 繪圖物件上播放視頻的應用卻不easy。
本文介紹了我為應對該挑戰建立的應用。
該應用可在 3D 平面上渲染視頻,並支援使用者以互動的方式在視頻平面上播放。
該應用須要解決三大實施問題:
- 怎樣構建代碼以支援使用者在播放視頻時變更 3D 平面?
- 儘管 Android 中預設的 MediaPlayer 配備了全面的播放操作,可是難以獲得視頻映像資料並以定製的方式對其進行渲染。
- 怎樣設計圖形組件以運行視頻資料渲染?
此外,該應用還面臨裝置功能的挑戰,由於它須要視頻和繪圖物件同一時候執行。本文將對該款應用的特性和使用進行介紹。然後對其設計進行簡要的介紹。
特性
該應用具備下面特性:
- 它支援使用者從其本地媒體庫中選擇視訊剪輯。
- 該應用支援橫向和縱向兩種方向;當方向轉換時,視頻可以持續播放。
- 它可提供三種播放模式:
- 預設模式:這是常規播放模式。視訊剪輯如同在常規媒體播放器中一樣播放。
- 隨機旋轉:視頻的平面可隨橫向和縱向隨機旋轉;其顏色也可在紅色色調和正常顏色之間切換。
- 觸摸旋轉:使用者能夠使用觸摸功能向左、右滑動並旋轉平面,詳細取決於速度。
- 當將應用移動至後台或關閉時,可將當前的視訊剪輯儲存並在應用又一次啟用時進行播放。
注:應用中沒有視頻會話控制;因此使用者無法停止、快進或回放視頻。假設將應用移動至後台或關閉,視頻僅僅能從頭開始播放。
使用模式開始播放視訊剪輯
該應用未包括不論什麼視頻。因此使用者能夠選擇 Android 平台支援的隨意視訊剪輯進行播放。可是。建議使用採用 H.264AVC 轉碼器以 MPEG-4 標準處理的視頻編輯。由於我們在開發時是採用這樣的格式。應用初次開機時。將會顯示檔案選取器介面(請見上一頁的)。
使用者選擇首選的檔案選取器後。系統將會提供螢幕指示。
選擇視訊剪輯後。將開始播放。
注:有時,視頻開始前須要等待一段時間 — 約 5 ~ 10 秒。
選擇不同的模式
應用開始播放時是使用常規模式。如要更改模式,使用者可點擊 UI 上的選項button,啟動選項菜單。
選項菜單有四個選項:前三個是播放模式選項。最後一個選項可支援使用者選擇不同的視訊剪輯。
隨機旋轉
該選擇可支援渲染視頻的平面隨著橫、縱軸呈 3D 效果隨機旋轉。
此外,它還可定期在螢幕上呈現紅色色調。
觸摸旋轉
在觸摸旋轉模式中,使用者能夠向左、右滑動。從而讓平面沿著縱軸左、右旋轉。
當滑動更快時。旋轉將會加快;當使用者停止滑動時,旋轉將會隨之減速。
設計
該應用中的三個主要組件包含:為使用者提供互動式應用示範的 UI 組件;進行視頻播放的視頻組件;渲染視訊框架緩衝區並在特殊模式下建立 3D 效果的OpenGL* 平面。
該視頻播放組件有兩個線程。視頻引擎線程使用MediaCodec 類。該類在 Android JellyBean 版本號碼(API 16)中推出。它能夠提供低層級的 Android 媒體架構 API,因此您能夠在幀層面控制播放。
在每一個視訊框架上。圖形組件能夠控製圖像資料,並更改渲染映像的方式。
此外。播放組件還可運行播放視訊剪輯音軌的音頻引擎線程。為使視頻和音頻線程同步,從而讓人物的口型與其說出的聲音相匹配,我們實施了 AV 同步演算法。
視頻播放可使其時間戳記與音頻時間戳記時刻保持一致。
它能夠對播放速度進行微調,以便將視訊框架控制在 30 毫秒的時間範圍內。
圖形組件可加入一個 GLSurfaceView。從而在該類中嵌入一個定製的渲染類。渲染類可實施渲染器介面來運行 OpenGL 渲染演算法。該演算法可在紋理平面上實施 3D 旋轉效果,還可依據使用者的輸入將模式更改為其它演算法。
在渲染器中。對視訊框架旋轉和著色是通過一個簡單的頂點和像素著色器來控制的。視頻平面的旋轉通過應用一系列的歐拉角旋轉來實現。
幀的著色通過將視訊框架內容與固定顏色(在本案例中為紅色)在像素著色器中進行線性混合來實現。
此外,圖形組件還可用作視頻引擎的視訊框架監聽器。並可在實施過程中傳送至 MediaCodec 對象,這樣每當有可用幀時便可調用渲染功能。圖形組件可在 UI 組件中提供一個選項,這樣使用者便可以更改播放模式。
MediaCodec 編解碼流程與視訊框架保持同步,圖形組件中的渲染器功能與圖形幀保持同步。
因此,當訪問框架緩衝區時,兩個組件中的功能必須保持同步。
相關連結與資源:
- 將 OpenGL* 遊戲移植到基於英特爾淩動處理器的 Android* 系統
- 英特爾架構上的 Android* MediaPlayer 樣本代碼走查
- 英特爾處理器顯卡上的 3D 遊戲
- 英特爾 Android* 開發人員專區
如要瞭解很多其它為 Android 開發人員提供的英特爾工具,請訪問:。
作者簡單介紹
Mark Liu 是英特爾超可攜式裝置事業部 (Intel Ultra-Mobile Group) 的軟體project師,負責開發基於 Android 裝置的驗證架構。此外。他還參與英特爾超可攜式裝置事業部的多個其它 Android 項目。包含智能手機和平板電腦裝置。
他所做的大部分工作都與媒體播放、視頻會議和軟體棧效能調優相關。
增加英特爾軟體和裝置事業部基於英特爾? 淩動? 處理器的裝置軟體支援小組後,他負責多項不同的任務,包含 Android 樣本媒體應用的開發、Windows* 8 媒體架構的系統最佳化以及用於編寫媒體應用的文檔。
Chris Kirkpatrick 是英特爾軟體與服務事業部的軟體project師,負責為視覺與互動式計算project設計團隊提供英特爾圖形解決方式開發支援。他擁有俄勒岡州立大學電腦科學理學士學位。
分類:
| video3d.zip (115.71 KB)Download Now |
著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。
基於 Android 的 3D 視頻範例程式碼