OpenGL ES/SDL渲染,FFmpeg ;VR分屏之OpenGL-OpenGL ES來播放視頻.MediaPlayer+GLSurfaceView+openGL
(推薦 )MD360 VR- https://github.com/ashqal/MD360Player4Android
OpenGL ES用來繪制螢屏及分屏,FFmpeg用來音視頻編碼解碼等,
> OpenGL與Unity3D
OpenGL 是一個相對底層的框架,會提供一系列函式框架作為 API 提供給開發者使用,OpenGL制作VR 播放器,
Unity3D 是一個跨平臺的游戲引擎,解決的是游戲制作人通過什么東西來做游戲的問題,本身包含很多游戲相關的功能,比如繪圖,播影片,放音樂,聯網等等,
OpenGL是右手系,但是Unity和D3D卻是左手系(Unity在觀察坐標系又是右手系)
OpenGL ES是在圖形影像中,非常優秀的渲染庫,既然是渲染,就那會和視頻離不開,早期是FFmpeg解碼視頻,用于顯示視頻是通過surfaceView,今天通過OpenGL+SurfaceTexure進行顯示視頻,
OpenGL大量使用了向量和矩陣,矩陣的最重要的用途之一就是建立正交和透視投影,其原因之一是,從本質上來說,使用矩陣做投影只涉及對一組資料按順序執行大量的加法和乘法,這些運算在現代GPU上執行的非常快,
> Google VR
Android N VR代碼簡析- https://www.jianshu.com/p/027916e345bc
Google單獨分離出一個SDK,除了方便應用開發者之外,主要的目的是用來把VR的一些核心演算法隱藏起來,比如用來減少延遲的ATW異步時間扭曲演算法就是被封裝在這里.手機上面運行VR的時候一個最大的挑戰就是延遲,當一副畫面的延遲超過20MS,人就會感覺不舒服惡心,嚴重影響用戶體驗,一個好的VR產品都會盡量避免延遲,.
Google VR SDK應該是解決了ATW演算法和多解析度渲染等優化問題,然后新增了一個系統服務VrManagerService和 vr HAL層, 應用通過VrManagerService來設定系統進入VR模式,VrManagerService又是通過vr HAL層去實作具體模式的切換的,
VR全景圖+Opengl3D模型展示- https://github.com/DrownCoder/VRShow
Google VR研究,發現它閉源 可定制的東西比較少,可以舍棄它了
翻墻看google VR 官方檔案:https://developers.google.com/vr/android/ https://developers.google.com/vr/android/reference_overview
https://github.com/googlevr/gvr-android-sdk.git https://github.com/ejeinc/RajawaliCardboardExample cardboard的demo
谷歌google vr demo- http://download.csdn.net/detail/zph1596946/9543674
http://www.androidauthority.com/developing-with-the-google-vr-sdk-and-ndk-699472/
Google provides developers with two virtual reality (VR) platforms: Cardboard, the world's most popular and accessible mobile VR platform, and Daydream, a new platform for low-latency, immersive, and interactive mobile VR.
A physical Android device running Android 4.4 (KitKat) or higher for Cardboard apps or a Daydream Ready phone
Both of these samples are single activity applications that display an embedded panoramic image or video using VrPanoramaView and VrVideoView, respectively.
-- 利用 Google Cardboard 及 Rajawali 3D 開發的VR播放器- https://github.com/substarry/VRPlayer
EXOplayer,做個視頻的都知道,這個專案也是Google開源的,對流媒體很好的支持,
> VR技術
-- VR 核心技術體現在以下幾個方面:
1.全立體顯示(3D 顯示):包括反畸變演算法、多影像處理
2.運動追蹤:利用陀螺儀 GyroscopeSensor 加速度計 G-Sensor 等來感應我們身體移動和頭部轉動
3.輸入設備:觸摸板、手柄、無線體感設備、手勢識別
利用手柄的典型方案比如 HTC 的 Vive、Sony 的 PS VR;
無線體感設備比如 雷射的 Hydra、Sixense 的 STEM;
手勢識別感應設備比如 Leap Motion 和 Nimble VR;
具體哪種方式會成為未來 VR 的 “滑鼠” 暫時還不明朗,
4.開發工具:OpenGL 提供的 API、Unity3D 引擎 等;
-- VR技術主要從以下方面入手:
SDK層:主要目的是提高影像質量,降低影像延時,
Framework層:主要對聲音和圖形影像,功耗進行優化,
底層:提高GPU影像渲染速度和DSP資料運算速度,實作低延時,
-- VR視頻播放器最起碼有這些基本功能:
全景360度無死角,支持陀螺儀感應和手動拖動瀏覽視頻,支持螢屏型別切換,支持單屏、雙屏等,
FFmpeg在點播視頻和VR視頻中的運用,
> 得圖VR
得圖致力于降低VR影像制作成本,提供了從硬體,到軟體,再到完整的行業應用方案,包含了直播軟體,拼接軟體,云制作服務、SDK等免費服務,為VR影像生產提供了完備的生產工具,
得圖VR PanoPlayer Android版SDK使用指南- http://www.detu.com/develop/page/42
> VR xl_player - https://github.com/xl-player-developers/xl_player,
iOS VR HTY360Player- https://github.com/hanton/HTY360Player https://github.com/libobjc/SGPlayer
Linux下,CMakeLists.txt及Cpp檔案夾在每個module下都有軟鏈接,在Windows下不支持,各自拷貝一份到相應的Module下,(跨平臺問題)
Android捕捉影像后在SurfaceView上變形顯示問題的處理- http://www.cnblogs.com/chenjianxiang/p/4168203.html
SurfaceView是視圖(View)的繼承類,這個視圖里內嵌了一個專門用于繪制的Surface,你可以控制這個Surface的格式和尺寸,Surfaceview控制這個Surface的繪制位置,surface是縱深排序(Z-ordered)的,這表明它總在自己所在視窗的后面,surfaceview變得可見時,surface被創建;surfaceview隱藏前,surface被銷毀,這樣能節省資源,如果你要查看 surface被創建和銷毀的時機,可以多載surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder),
整個程序:繼承SurfaceView并實作SurfaceHolder.Callback介面 ----> SurfaceView.getHolder()獲得SurfaceHolder物件 ---->SurfaceHolder.addCallback(callback)添加回呼函式----
SurfaceHolder.lockCanvas()獲得Canvas物件并鎖定畫布----> Canvas繪畫 ----
SurfaceHolder.unlockCanvasAndPost(Canvas canvas)結束鎖定畫圖,并提交改變,將圖形顯示,
如何手動銷毀surfaceview 并重建- 很簡單 將其設為View.GONE 再將其設為View.visable,
Android有關surfaceView重新創建的問題- 解鎖屏之后,surfaceview就會自動重新創建,所以,只需在重新創建之后恢復到以前的狀態就可以了,
關于Activity與SurfaceView的生命周期 ,
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
if (mCurrentPreviewState == USB_PREVIEW) {
rect.set(IMG_WIDTH / 2, IMG_HEIGHT / 2, IMG_WIDTH, IMG_HEIGHT);
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
canvas.drawBitmap(mPreviewBitmap, null, rect, null);
} else {
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
canvas.drawBitmap(mPreviewBitmap, null, rect, null);
}
getHolder().unlockCanvasAndPost(canvas);
}
> 其他VR
Android-VR 支持流媒體- http://blog.csdn.net/honjane/article/details/51884424
VR-- https://github.com/wheat7/VRPlayer
VR Android播放器實作(二)- http://blog.csdn.net/hebeixmg/article/details/52598902
NitroAction360- https://github.com/Nitro888/NitroAction360 https://github.com/hanton/HTY360Player
vrVideo- https://github.com/pondurii/vrVideo
OpenGL ES_手把手教你打造VR全景播- http://www.jianshu.com/p/0f740901da59
android opengl播放全景視頻- https://www.jianshu.com/p/254837f663c4
android使用opengl es2.0播放VR視頻- https://www.jianshu.com/p/b80d70a2b9f4
GLSurfaceView VR視頻- https://github.com/Martin20150405/Pano360
openGL ES進階教程(五)制作一個簡單的VR播放器,播放全景視頻- https://blog.csdn.net/king1425/article/details/76558737
OpenGL從零開始寫一個Android平臺下的全景視頻播放器——目錄- https://blog.csdn.net/Martin20150405/article/details/53149578
從零開始打造一個VR視頻播放器-VRPlayer原始碼分析- http://www.jianshu.com/p/c7a3b1acb8b1
如何做個VR播放器- http://www.gad.qq.com/article/detail/25937#
從零開始寫一個Android平臺下的全景視頻播放器——3.2 使用OpenGL ES 2.0繪制一個球- http://blog.csdn.net/martin20150405/article/details/53888204
[OpenGL]從零開始寫一個Android平臺下的全景視頻播放器- http://blog.csdn.net/Martin20150405/article/category/6274984
Android全景視頻播放器 源代碼- http://download.csdn.net/detail/martin20150405/9681440
Pano360- https://github.com/Martin20150405/Pano360
UtoVR SDK
Facebook surround360 VR,Facebook有一個開源庫叫transform,
VRPlayer is a simple but powerful local VR video player- https://github.com/wheat7/VRPlayer
> Unity 3D VR
Unity3D官方VR的Demo:https://unity3d.com/cn/learn/tutorials/topics/virtual-reality
Unity3D全景視頻播放AVPro Video插件- http://download.csdn.net/download/java886o/9592531
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224387.html
標籤:其他
上一篇:FPGA按鍵去抖操作
下一篇:c++之選擇排序
