效果图
导入sdk前先修改相应参数
引入
依赖
VRPlayActivity
public class VrActivity extends Activity{
@InjectView(R.id.video_view)
VrVideoView videoView;
@InjectView(R.id.seek_bar)
SeekBar seekBar;
private static final String STATE_PROGRESS_TIME = "progressTime";
private static final String STATE_IS_PAUSED = "isPaused";
private static final String STATE_VIDEO_DURATION = "videoDuration";
private int loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
public static final int LOAD_VIDEO_STATUS_UNKNOWN = 0;
public static final int LOAD_VIDEO_STATUS_SUCCESS = 1;
public static final int LOAD_VIDEO_STATUS_ERROR = 2;
private boolean isPaused = false;
private VideoLoaderTask backgroundVideoLoaderTask;
private VrVideoView.Options videoOptions = new VrVideoView.Options();
private Uri fileUri;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vr_activity);
ButterKnife.inject(this);
seekBar.setOnSeekBarChangeListener(new SeekBarListener());
videoView.setEventListener(new ActivityEventListener());
loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
handleIntent(getIntent());
}
private class ActivityEventListener extendsVrVideoEventListener {
@Override
public void onLoadSuccess() {
seekBar.setMax((int) videoView.getDuration());
}
@Override
public void onClick() {
togglePause();
}
@Override
public void onNewFrame() {
seekBar.setProgress((int) videoView.getCurrentPosition());
}
}
@Override
public void onRestoreInstanceState(BundlesavedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
long progressTime = savedInstanceState.getLong(STATE_PROGRESS_TIME);
videoView.seekTo(progressTime);
seekBar.setMax((int) savedInstanceState.getLong(STATE_VIDEO_DURATION));
seekBar.setProgress((int) progressTime);
isPaused = savedInstanceState.getBoolean(STATE_IS_PAUSED);
if (isPaused) {
videoView.pauseVideo();
}
}
private class SeekBarListener implementsSeekBar.OnSeekBarChangeListener {
@Override
public void onProgressChanged(SeekBarseekBar, int progress, boolean fromUser){
if (fromUser){
videoView.seekTo(progress);
} // elsethis was from the ActivityEventHandler.onNewFrame()'s seekBar.setProgressupdate.
}
@Override
public void onStartTrackingTouch(SeekBarseekBar) {
}
@Override
public void onStopTrackingTouch(SeekBarseekBar) {
}
}
private void handleIntent(Intent intent){
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
fileUri =intent.getData();
if (fileUri== null) {
Log.w("TAG", "Nodata uri specified. Use \"-d /path/filename\".");
} else{
Log.i("TAG", "Usingfile " + fileUri.toString());
}
videoOptions.inputFormat = intent.getIntExtra("inputFormat", VrVideoView.Options.FORMAT_DEFAULT);
videoOptions.inputType = intent.getIntExtra("inputType", VrVideoView.Options.TYPE_MONO);
} else{
Log.i("TAG", "Intentis not ACTION_VIEW. Using the default video.");
fileUri = null;
}
if (backgroundVideoLoaderTask != null) {
// Cancel any task from a previous intent sent to thisactivity.
backgroundVideoLoaderTask.cancel(true);
}
backgroundVideoLoaderTask = new VideoLoaderTask();
backgroundVideoLoaderTask.execute(Pair.create(fileUri, videoOptions));
}
@Override
protected void onPause() {
super.onPause();
videoView.pauseRendering();
isPaused = true;
}
@Override
protected void onResume() {
super.onResume();
videoView.resumeRendering();
}
@Override
protected void onDestroy() {
videoView.shutdown();
super.onDestroy();
}
private void togglePause() {
if (isPaused) {
videoView.playVideo();
} else{
videoView.pauseVideo();
}
isPaused = !isPaused;
}
class VideoLoaderTaskextends AsyncTask<Pair<Uri, VrVideoView.Options>, Void, Boolean> {
@Override
protected BooleandoInBackground(Pair<Uri, VrVideoView.Options>...fileInformation) {
// No intent was specified, so we default to playing thelocal stereo-over-under video.
final VrVideoView.Optionsoptions = new VrVideoView.Options();
/**设置视频的播放焦点*/
options.inputType =VrVideoView.Options.TYPE_MONO;
Intent intent = getIntent();
final String uri = intent.getStringExtra("uri");
Log.i("TAG", uri + "uri");
if (uri != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
videoView.loadVideo(Uri.parse(uri), options);
} catch (IOException e) {
e.printStackTrace();
}
}
});
// videoView.loadVideoFromAsset("congo.mp4", options);
}
return true;
}
}
xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.vr.sdk.widgets.video.VrVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="250dip"/>
<!-- Seeking UI & progress indicator.-->
<SeekBar
android:id="@+id/seek_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_height="32dp"
android:layout_width="match_parent"
/>
</LinearLayout>