原文地址:
http://blog.csdn.net/qq_24889075/article/details/52133170
http://www.reibang.com/p/82163453ed30
相關(guān)閱讀:
一、初識GVR (Google VR for Android):http://www.reibang.com/p/09c0822b9d1e
二糟需、制作VR全景圖播放器 (Google VR for Android):http://www.reibang.com/p/104251a3153d
simplevideowidget
如果沒有看上一篇文章的請先看完再來看這一篇吧止潮,有寫重復(fù)的就不介紹了
AndroidManifest
上一篇文章有提到,其實(shí)這里也沒有什么特別的
build.gradle
dependencies {
compile project(':libraries-common')
compile project(':libraries-commonwidget')
compile project(':libraries-videowidget')
}
布局文件
里面就一個(gè)主要標(biāo)簽
<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提供給我們現(xiàn)實(shí)播放VR視頻的View
private boolean isPaused = false;//標(biāo)記是否暫停
@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添加監(jiān)聽
//如果有任務(wù)在執(zhí)行則停止它
if (backgroundVideoLoaderTask != null) {
backgroundVideoLoaderTask.cancel(true);
}
//創(chuàng)建一個(gè)任務(wù)
backgroundVideoLoaderTask = new VideoLoaderTask();
//執(zhí)行任務(wù)燥爷。將視頻文件名(根據(jù)項(xiàng)目實(shí)際情況傳吧)傳入
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() {//當(dāng)我們點(diǎn)擊了VrVideoView時(shí)候觸發(fā)
togglePause();
}
@Override
public void onNewFrame() {//一個(gè)新的幀被繪制到屏幕上。
}
@Override
public void onCompletion() {//視頻播放完畢懦窘。
videoWidgetView.seekTo(0);//移動(dòng)到視頻開始
}
}
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();//恢復(fù)3D渲染和跟蹤前翎,但官方文檔上面沒有寫
}
@Override
protected void onDestroy() {
videoWidgetView.shutdown();//關(guān)閉渲染并釋放相關(guān)的內(nèi)存
super.onDestroy();
}
}
上面用的方法全都是來源于VrVideoView這個(gè)類中,下面介紹一下 示例代碼中沒有出現(xiàn)的方法畅涂。
getDuration()//獲取視頻的持續(xù)時(shí)間(毫秒為單位)
getCurrentPosition() //獲取的視頻的當(dāng)前位置(毫秒為單位)
-
loadVideo(URI uri)//加載從給定的URI的全景視頻
URI可以是:
相對文件到盤的根港华,例如“/sdcard/FILENAME.MP4”。如果視頻是APK的資產(chǎn)的一部分午衰,loadVideoFromAsset(String, VrVideoView.Options)應(yīng)改為使用立宜。
遠(yuǎn)程URL以HTTP或HTTPS方案,如“http://foo.com/file.mp4”臊岸。HLS URL(如“http://foo.com/file.m3u8”)的支持橙数,但需要正確的輸入格式在要設(shè)置VrVideoView.Options的對象。
疑問
如果是我的操作有問題請指正帅戒,避免誤導(dǎo)其他讀者 _
在官方文檔中是有VrVideoView.Options這個(gè)類的
然而我在VrVideoView中并沒有發(fā)現(xiàn)Options這個(gè)類灯帮,因?yàn)槲疫M(jìn)行了以下操作 來證實(shí)這個(gè)說法。
1蜘澜、 無法導(dǎo)入包
2施流、無法創(chuàng)建類
3响疚、在VrVideoView類中搜索不到Options
4鄙信、VrVideoView的loadVideoFromAsset方法沒有文檔中的第二個(gè)參數(shù)
我是2016.8.3下載的,不知道以后會(huì)不會(huì)更新文檔忿晕,或者進(jìn)行別的操作装诡。
既然Options類無法找到就不在這里根據(jù)文檔描述了。
總結(jié)
1. 導(dǎo)入google的庫
2. 在相應(yīng)的布局文件中引入控件 com.google.vr.sdk.widgets.pano.VrPanoramaView
3. 初始化控件
4. 調(diào)用VrPanoramaView的loadImageFromBitmap方法或者loadVideo方法
5. 在onPause践盼、onResume鸦采、onDestroy中做出相應(yīng)處理
好了,這篇就到這吧咕幻。如果有機(jī)會(huì)的話會(huì)繼續(xù)分享一些關(guān)于 源碼分析渔伯、自定義VR視頻播放器、自定義全景圖片播放器 等一些進(jìn)階文章肄程。
朋友們?nèi)绻毙枰脑捑土粞月嗪穑铱匆娏藭?huì)加快速度
原文地址:
http://blog.csdn.net/qq_24889075/article/details/52133170
http://www.reibang.com/p/82163453ed30