全景播放器网上一搜也是一堆一堆的,还有google推出的vrsdk,所以也没啥好说的,就简单记录一下
实现全景主要用到的还是opengles,只要用的开源播放器有setSurface(Surface surface)这个函数,就可以不改播放器源码实现
原理很简单只要通过opengles生成个纹理,再通过纹理生成SurfaceTexture,再通过SurfaceTexture生成Surface,最后把Surface传给播放器,而我们只要实现surfaceTexture.setOnFrameAvailableListener()来监听回调进行渲染
首先要用opengles画个球体,参考[OpenGL]从零开始写一个Android平台下的全景视频播放器——3.2 使用OpenGL ES 2.0绘制一个球
画好把画面贴上去,接下来要用传感器来监听手机方向来调整显示的方向,这个功能我是参考个的这个weibo360panorama 这个项目里也有画球,只不过我是先参考那篇后来才找到这个项目
再加个手指拖动功能
好了
通过学习全景对opengles的矩阵更进一步的理解,比如Matrix.multiplyMM(),我一直以为这函数把第二个矩阵和第三个矩阵合成一个新的矩阵,和参数顺序没关系,可是用过来发现不是这样的,如果把第二个矩阵和第三个矩阵换一个位置,合成的新矩阵和刚才的是不一样的,总之对矩阵我还是比较头疼
项目里面有个RotationImageView,就是画面左上角的方向图片,原来我是通过旋转setRotation来进行旋转的,可是setRotation()设置超90度就不显示,我也很无奈,就重新写了个控件,通过canvas.rotate旋转
ExoplayerVR