三、制作VR视频播放器 (Google VR for An

作者: 庸碌无为 | 来源:发表于2016-08-08 15:47 被阅读5923次

    原文地址:
    http://blog.csdn.net/qq_24889075/article/details/52133170
    http://www.jianshu.com/p/82163453ed30

    相关阅读:
    一、初识GVR (Google VR for Android):http://www.jianshu.com/p/09c0822b9d1e
    二、制作VR全景图播放器 (Google VR for Android):http://www.jianshu.com/p/104251a3153d

    simplevideowidget

    如果没有看上一篇文章的请先看完再来看这一篇吧,有写重复的就不介绍了

    AndroidManifest

    上一篇文章有提到,其实这里也没有什么特别的

    build.gradle

    《初识GVR》 那篇文章有介绍到这些库

    dependencies {
        compile project(':libraries-common')
        compile project(':libraries-commonwidget')
        compile project(':libraries-videowidget')
    }
    
    

    布局文件

    里面就一个主要标签

     <com.google.vr.sdk.widgets.video.VrVideoView
                android:id="@+id/video_view"
                android:layout_width="match_parent"
                android:layout_height="250dip"
                android:scrollbars="@null" />
    

    SimpleVrVideoActivity

    更改过的代码:

    package com.google.vr.sdk.samples.simplevideowidget;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.google.vr.sdk.widgets.video.VrVideoEventListener;
    import com.google.vr.sdk.widgets.video.VrVideoView;
    
    import java.io.IOException;
    
    public class SimpleVrVideoActivity extends Activity {
        private static final String TAG = "SimpleVrVideoActivity";
     
        private String fileUri = "congo.mp4";//assets文件夹下的文件名
        private VideoLoaderTask backgroundVideoLoaderTask;//异步加载视频
    
        private VrVideoView videoWidgetView;//Google提供给我们现实播放VR视频的View
    
        private boolean isPaused = false;//标记是否暂停
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_layout);
    
            videoWidgetView = (VrVideoView) findViewById(R.id.video_view);//初始化VrVideoView
            videoWidgetView.setEventListener(new ActivityEventListener());//为VrVideoView添加监听
    
            //如果有任务在执行则停止它
            if (backgroundVideoLoaderTask != null) {
                backgroundVideoLoaderTask.cancel(true);
            }
            //创建一个任务
            backgroundVideoLoaderTask = new VideoLoaderTask();
            //执行任务。将视频文件名(根据项目实际情况传吧)传入
            backgroundVideoLoaderTask.execute(fileUri);
        }
    
    
        private void togglePause() {
            if (isPaused) {
                videoWidgetView.playVideo();//播放
            } else {
                videoWidgetView.pauseVideo();//暂停
            }
            isPaused = !isPaused;
        }
    
    
        private class ActivityEventListener extends VrVideoEventListener {
    
            @Override
            public void onLoadSuccess() {//加载成功
                Log.i(TAG, "Sucessfully loaded video " + videoWidgetView.getDuration());
            }
    
            @Override
            public void onLoadError(String errorMessage) {//加载失败
                Log.e(TAG, "Error loading video: " + errorMessage);
            }
    
            @Override
            public void onClick() {//当我们点击了VrVideoView时候触发
                togglePause();
            }
    
            @Override
            public void onNewFrame() {//一个新的帧被绘制到屏幕上。
            }
    
            @Override
            public void onCompletion() {//视频播放完毕。
                videoWidgetView.seekTo(0);//移动到视频开始
            }
        }
    
        class VideoLoaderTask extends AsyncTask<String, Void, Boolean> {
            @Override
            protected Boolean doInBackground(String... uri) {
                try {
                    videoWidgetView.loadVideoFromAsset(uri[0]);//加载视频文件
                } catch (IOException e) {//视频文件打开失败
                    Log.e(TAG, "Could not open video: " + e);
                }
    
                return true;
            }
        }
    
    
        @Override
        protected void onPause() {
            super.onPause();
            videoWidgetView.pauseRendering();//暂停3D渲染和跟踪
            isPaused = true;
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            videoWidgetView.resumeRendering();//恢复3D渲染和跟踪,但官方文档上面没有写
        }
    
        @Override
        protected void onDestroy() {
            videoWidgetView.shutdown();//关闭渲染并释放相关的内存
            super.onDestroy();
        }
    }
    
    

    上面用的方法全都是来源于VrVideoView这个类中,下面介绍一下 示例代码中没有出现的方法。

    1. getDuration()//获取视频的持续时间(毫秒为单位)

    2. getCurrentPosition() //获取的视频的当前位置(毫秒为单位)

    3. loadVideo(URI uri)//加载从给定的URI的全景视频

      URI可以是:
      相对文件到盘的根,例如“/sdcard/FILENAME.MP4”。如果视频是APK的资产的一部分,loadVideoFromAsset(String, VrVideoView.Options)应改为使用。
      远程URL以HTTP或HTTPS方案,如“http://foo.com/file.mp4”。HLS URL(如“http://foo.com/file.m3u8”)的支持,但需要正确的输入格式在要设置VrVideoView.Options的对象。

    疑问

    如果是我的操作有问题请指正,避免误导其他读者 _

    在官方文档中是有VrVideoView.Options这个类的

    官方文档显示有这个类

    然而我在VrVideoView中并没有发现Options这个类,因为我进行了以下操作 来证实这个说法。
    1、 无法导入包


    无法导入包

    2、无法创建类


    无法创建类

    3、在VrVideoView类中搜索不到Options


    搜索不到Options

    4、VrVideoView的loadVideoFromAsset方法没有文档中的第二个参数


    文档中有Options
    实际类中没有Options

    我是2016.8.3下载的,不知道以后会不会更新文档,或者进行别的操作。

    既然Options类无法找到就不在这里根据文档描述了。

    总结

    1. 导入google的库
    2. 在相应的布局文件中引入控件 com.google.vr.sdk.widgets.pano.VrPanoramaView
    3. 初始化控件
    4. 调用VrPanoramaView的loadImageFromBitmap方法或者loadVideo方法
    5. 在onPause、onResume、onDestroy中做出相应处理
    

    好了,这篇就到这吧。如果有机会的话会继续分享一些关于 源码分析自定义VR视频播放器自定义全景图片播放器 等一些进阶文章。

    朋友们如果急需要的话就留言,我看见了会加快速度


    原文地址:
    http://blog.csdn.net/qq_24889075/article/details/52133170
    http://www.jianshu.com/p/82163453ed30

    相关文章

      网友评论

      • TechMix:请问一下,我从google的连接到github之后下载了sdk,怎么工程结构不是as的,怎么弄啊,望指教
      • 骚年_金闪闪:初学,有点晕,异步里面还能自定义一个options
        class VideoLoaderTask extends AsyncTask<String, Void, Void> {

        @Override
        protected Void doInBackground(String... params) {
        //创建options对象,决定vr是普通的效果,还是立体效果
        VrVideoView.Options options = new VrVideoView.Options();
        //立体
        options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;
        //处理加载的视频格式
        //FORMAT_HLS:流媒体数据格式(直播)
        //默认
        options.inputFormat = VrVideoView.Options.FORMAT_DEFAULT;
        //读取到内存
        try {
        vrVideoView.loadVideo(Uri.parse(params[0]), options);
        } catch (IOException e) {
        e.printStackTrace();
        }
        return null;
        }
        }
      • 双鱼大猫:想学习自定义VR视频播放器!
      • 星游梦网天涯:现在有Options类哦
      • wori:加油↖(^ω^)↗,还想看
      • GodRemix:我想学习下自定义VR视频播放器,博主

      本文标题:三、制作VR视频播放器 (Google VR for An

      本文链接:https://www.haomeiwen.com/subject/rxjrsttx.html