您的位置:首页 > 移动开发 > Android开发

Android 360全景视频播放。

2017-05-17 16:29 316 查看
网上相关资源挺多。VrVideoView不支持android7.0版本,无法正常播放。

在项目build.gradle中导入:

compile 'com.google.vr:sdk-videowidget:1.40.0'


布局代码:

<com.google.vr.sdk.widgets.video.VrVideoView
android:id="@+id/vr_video_view"
android:layout_width="match_parent"
android:layout_height="250dp"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/play_toggle"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center_vertical"
android:src="@mipmap/icon_pause_button"/>

<SeekBar
android:id="@+id/seek_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="32dp"
android:layout_weight="8"/>

<ImageView
android:id="@+id/volume_toggle"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center_vertical"
android:src="@mipmap/icon_mute_off"/>
</LinearLayout>


MainActivity:

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;

import com.google.vr.sdk.widgets.video.VrVideoEventListener;
import com.google.vr.sdk.widgets.video.VrVideoView;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
/**
* 播放360度全景视频的的控件
*/
private VrVideoView vr_video_view;
/**
* 拖动进度的进度条
*/
private SeekBar seek_bar;
/**
* 声音开关
*/
private ImageView volume_toggle;
/**
* 播放按钮
*/
private ImageView play_toggle;

/**
* 声音是否开启
*/
private boolean isMuted;
/**
* 播放暂停
*/
private boolean isPlay=true;
/**
* 打印调试的TAG
*/
private final String TAG = "VrVideoView";

@Override
protected void onCreate(Bundle savedInstanceSta
c946
te) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
load360Video();
}

/**
* 加载360度全景视频
*/
private void load360Video() {
vr_video_view = (VrVideoView) findViewById(R.id.vr_video_view);
//        vr_video_view.setStereoModeButtonEnabled(false);//设置立体眼镜模式按钮不可见
vr_video_view.setInfoButtonEnabled(false);//设置左侧信息原圈不可见
//        vr_video_view.setFullscreenButtonEnabled(false);//设置全屏按钮不可见
vr_video_view.setTransitionViewEnabled(false);//设置将手机放入盒子中的提示取消
vr_video_view.setTouchTrackingEnabled(true);//开启手触模式
seek_bar = (SeekBar) findViewById(R.id.seek_bar);
volume_toggle = (ImageView) findViewById(R.id.volume_toggle);
play_toggle = (ImageView) findViewById(R.id.play_toggle);

/**设置加载设置**/
VrVideoView.Options options = new VrVideoView.Options();
options.inputType = VrVideoView.Options.TYPE_MONO;
/**
* 设置加载监听
*/
vr_video_view.setEventListener(new VrVideoEventListener() {
/**
* 视频播放完成回调
*/
@Override
public void onCompletion() {
super.onCompletion();
/**播放完成后跳转到开始重新播放**/
vr_video_view.seekTo(0);
setIsPlay(false);
Log.d(TAG, "onCompletion()");
}

/**
* 加载每一帧视频的回调
*/
@Override
public void onNewFrame() {
super.onNewFrame();
seek_bar.setProgress((int) vr_video_view.getCurrentPosition());
Log.d(TAG, "onNewFrame()");
}

/**
* 点击VR视频回调
*/
@Override
public void onClick() {
super.onClick();
Log.d(TAG, "onClick()");
}
/**
* 加载VR视频失败回调
* @param errorMessage
*/
@Override
public void onLoadError(String errorMessage) {
super.onLoadError(errorMessage);
Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);
}

/**
* 加载VR视频成功回调
*/
@Override
public void onLoadSuccess() {
super.onLoadSuccess();
/**加载成功后设置回调**/
seek_bar.setMax((int) vr_video_view.getDuration());
Log.d(TAG, "onNewFrame()");
}

/**
* 显示模式改变回调
* 1.默认
* 2.全屏模式
* 3.VR观看模式,即横屏分屏模式
* @param newDisplayMode 模式
*/
@Override
public void onDisplayModeChanged(int newDisplayMode) {
super.onDisplayModeChanged(newDisplayMode);
Log.d(TAG, "onLoadError()->newDisplayMode=" + newDisplayMode);
}
});
try {
/**加载VR视频**/
vr_video_view.loadVideoFromAsset("mv2.mp4", options);
} catch (IOException e) {
e.printStackTrace();
}
/**设置声音按钮点击监听**/
volume_toggle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setIsMuted(!isMuted);
}
});
/**设置播放暂停按钮点击监听**/
play_toggle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setIsPlay(!isPlay);
}
});

/**设置进度条拖动监听**/
seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
/**
* 进度条拖动改变监听
* @param seekBar 拖动条
* @param progress 进度
* @param fromUser 是否是用户手动操作的
*/
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
/**调节视频进度**/
vr_video_view.seekTo(progress);
}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

}

/**
* 设置声音开关
*
* @param isMuted 开关
*/
private void setIsMuted(boolean isMuted) {
this.isMuted = isMuted;
volume_toggle.setImageResource(isMuted ? R.mipmap.icon_mute_off: R.mipmap.icon_mute_on);
vr_video_view.setVolume(isMuted ? 0.0f : 1.0f);
}

/**
* 设置播放暂停
*
* @param isPlay 播放暂停
*/
private void setIsPlay(boolean isPlay) {
this.isPlay = isPlay;
play_toggle.setImageResource(isPlay ?R.mipmap.icon_pause_button:  R.mipmap.icon_playbutton);
if(isPlay){
vr_video_view.playVideo();
}else{
vr_video_view.pauseVideo();
}
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

//    public boolean isMuted() {
//        return isMuted;
//    }

/**
* 在销毁时关闭视频,防止内存溢出
*/
@Override
protected void onDestroy() {
vr_video_view.shutdown();
super.onDestroy();
}
}


权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐