三、VR視頻播放器開發 ---- Android VR視頻/Google VR for Android /VR Pano/VR Video

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

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
這裏寫圖片描述

4、VrVideoView的loadVideoFromAsset方法沒有文檔中的第二個參數
這裏寫圖片描述
這裏寫圖片描述

我是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章