原文地址:
http://blog.csdn.net/qq_24889075/article/details/52133170
http://www.jianshu.com/p/82163453ed30
simplevideowidget
如果沒有看上一篇文章的請先看完再來看這一篇吧,有寫重複的就不介紹了
AndroidManifest
上一篇文章有提到,其實這裏也沒有什麼特別的
build.gradle
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這個類中,下面介紹一下 示例代碼中沒有出現的方法。
- getDuration()//獲取視頻的持續時間(毫秒爲單位)
- getCurrentPosition() //獲取的視頻的當前位置(毫秒爲單位)
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