公司项目最近和悟空自驾游有合作。遂下来看看对方app。打开app不觉得很惊艳,但是开屏页的vr小视频感觉蛮酷炫的。
加上最近google也密罗旗鼓的还是搞vr,个人对vr的视频播放也一直不是很了解。所以打算模仿一番。
技术底蕴先不说,我们先实现再说。查了查资料才发现简单的很。
利用开源库https://github.com/ashqal/MD360Player4Android加上mediaplayer分分钟实现。
MD360Player4Android这个库负责视频帧画面的渲染,用 MediaPlayer 或者 IjkMediaPlayer 对文件进行播放。悟空用了IjkMediaPlayer完全没必要啊,包蛮大的。简单看看代码。
布局文件:
<android.opengl.GLSurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
程序代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 先来个全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//加载一下资源
try {
mMp3Descriptor = getBaseContext().getAssets().openFd("vr_627.mp4");
} catch (IOException e) {
e.printStackTrace();
}
// 初始化一下VR播放器
MDVRLibrary.with(this)
.displayMode(MDVRLibrary.DISPLAY_MODE_NORMAL)
.interactiveMode(MDVRLibrary.INTERACTIVE_MODE_MOTION)
.asVideo(new MDVRLibrary.IOnSurfaceReadyCallback() {
@Override
public void onSurfaceReady(Surface surface) {
//设置一下播放路径
try {
mMediaPlayer.setSurface(surface);
mMediaPlayer.setDataSource(mMp3Descriptor.getFileDescriptor(),
mMp3Descriptor.getStartOffset(), mMp3Descriptor.getLength());
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
}).build(mGlSurfaceView);
最后控制好生命周期,播放结束后再来
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.start();
}
});
于是结果出来了,2分钟搞定。
效果图如下: