diff --git a/app/src/main/java/com/asha/md360player4android/DemoActivity.java b/app/src/main/java/com/asha/md360player4android/DemoActivity.java
index f86af0f0..81fce062 100644
--- a/app/src/main/java/com/asha/md360player4android/DemoActivity.java
+++ b/app/src/main/java/com/asha/md360player4android/DemoActivity.java
@@ -18,7 +18,7 @@
*/
public class DemoActivity extends AppCompatActivity {
- public static final String sPath = "file:///mnt/sdcard/vr/";
+ public static final String sPath = "file:///mnt/sdcard/";
//public static final String sPath = "file:////storage/sdcard1/vr/";
@@ -42,7 +42,7 @@ protected void onCreate(Bundle savedInstanceState) {
data.put(data.size(), "rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp");
data.put(data.size(), sPath + "ch0_160701145544.ts");
- data.put(data.size(), sPath + "videos_s_4.mp4");
+ data.put(data.size(), sPath + "video.mp4");
data.put(data.size(), sPath + "28.mp4");
data.put(data.size(), sPath + "haha.mp4");
data.put(data.size(), sPath + "halfdome.mp4");
diff --git a/app/src/main/java/com/asha/md360player4android/MD360PlayerActivity.java b/app/src/main/java/com/asha/md360player4android/MD360PlayerActivity.java
index 1c2549d6..26211670 100644
--- a/app/src/main/java/com/asha/md360player4android/MD360PlayerActivity.java
+++ b/app/src/main/java/com/asha/md360player4android/MD360PlayerActivity.java
@@ -12,7 +12,9 @@
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.util.SimpleArrayMap;
+import android.util.Log;
import android.util.SparseArray;
+import android.view.Surface;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
@@ -20,11 +22,13 @@
import android.widget.Toast;
import com.asha.vrlib.MDDirectorCamUpdate;
+import com.asha.vrlib.MDGLScreenWrapper;
import com.asha.vrlib.MDVRLibrary;
import com.asha.vrlib.model.MDHitEvent;
import com.asha.vrlib.model.MDHotspotBuilder;
import com.asha.vrlib.model.MDPosition;
import com.asha.vrlib.model.MDRay;
+import com.asha.vrlib.model.MDVideoHotspotBuilder;
import com.asha.vrlib.model.MDViewBuilder;
import com.asha.vrlib.model.position.MDMutablePosition;
import com.asha.vrlib.plugins.MDAbsPlugin;
@@ -33,6 +37,7 @@
import com.asha.vrlib.plugins.hotspot.MDAbsHotspot;
import com.asha.vrlib.plugins.hotspot.MDAbsView;
import com.asha.vrlib.plugins.hotspot.MDSimpleHotspot;
+import com.asha.vrlib.plugins.hotspot.MDVideoHotspot;
import com.asha.vrlib.plugins.hotspot.MDView;
import com.asha.vrlib.texture.MD360BitmapTexture;
import com.squareup.picasso.Picasso;
@@ -43,13 +48,15 @@
import java.util.List;
import java.util.Locale;
+import tv.danmaku.ijk.media.player.IMediaPlayer;
+
import static android.animation.PropertyValuesHolder.ofFloat;
import static com.squareup.picasso.MemoryPolicy.NO_CACHE;
import static com.squareup.picasso.MemoryPolicy.NO_STORE;
/**
* using MD360Renderer
- *
+ *
* Created by hzqiujiadi on 16/1/22.
* hzqiujiadi ashqalcn@gmail.com
*/
@@ -65,53 +72,55 @@ public abstract class MD360PlayerActivity extends Activity {
private static final SparseArray sFlingEnabled = new SparseArray<>();
static {
- sDisplayMode.put(MDVRLibrary.DISPLAY_MODE_NORMAL,"NORMAL");
- sDisplayMode.put(MDVRLibrary.DISPLAY_MODE_GLASS,"GLASS");
-
- sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_MOTION,"MOTION");
- sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_TOUCH,"TOUCH");
- sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_MOTION_WITH_TOUCH,"M & T");
- sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_CARDBORAD_MOTION,"CARDBOARD M");
- sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_CARDBORAD_MOTION_WITH_TOUCH,"CARDBOARD M&T");
-
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_SPHERE,"SPHERE");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME180,"DOME 180");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME230,"DOME 230");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME180_UPPER,"DOME 180 UPPER");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME230_UPPER,"DOME 230 UPPER");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_STEREO_SPHERE_HORIZONTAL,"STEREO H SPHERE");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_STEREO_SPHERE_VERTICAL,"STEREO V SPHERE");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_FIT,"PLANE FIT");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_CROP,"PLANE CROP");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_FULL,"PLANE FULL");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_MULTI_FISH_EYE_HORIZONTAL,"MULTI FISH EYE HORIZONTAL");
- sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_MULTI_FISH_EYE_VERTICAL,"MULTI FISH EYE VERTICAL");
- sProjectionMode.put(CustomProjectionFactory.CUSTOM_PROJECTION_FISH_EYE_RADIUS_VERTICAL,"CUSTOM MULTI FISH EYE");
-
- sAntiDistortion.put(1,"ANTI-ENABLE");
- sAntiDistortion.put(0,"ANTI-DISABLE");
-
- sPitchFilter.put(1,"FILTER PITCH");
- sPitchFilter.put(0,"FILTER NOP");
+ sDisplayMode.put(MDVRLibrary.DISPLAY_MODE_NORMAL, "NORMAL");
+ sDisplayMode.put(MDVRLibrary.DISPLAY_MODE_GLASS, "GLASS");
+
+ sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_MOTION, "MOTION");
+ sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_TOUCH, "TOUCH");
+ sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_MOTION_WITH_TOUCH, "M & T");
+ sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_CARDBORAD_MOTION, "CARDBOARD M");
+ sInteractiveMode.put(MDVRLibrary.INTERACTIVE_MODE_CARDBORAD_MOTION_WITH_TOUCH, "CARDBOARD M&T");
+
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_SPHERE, "SPHERE");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME180, "DOME 180");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME230, "DOME 230");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME180_UPPER, "DOME 180 UPPER");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_DOME230_UPPER, "DOME 230 UPPER");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_STEREO_SPHERE_HORIZONTAL, "STEREO H SPHERE");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_STEREO_SPHERE_VERTICAL, "STEREO V SPHERE");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_FIT, "PLANE FIT");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_CROP, "PLANE CROP");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_PLANE_FULL, "PLANE FULL");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_MULTI_FISH_EYE_HORIZONTAL, "MULTI FISH EYE HORIZONTAL");
+ sProjectionMode.put(MDVRLibrary.PROJECTION_MODE_MULTI_FISH_EYE_VERTICAL, "MULTI FISH EYE VERTICAL");
+ sProjectionMode.put(CustomProjectionFactory.CUSTOM_PROJECTION_FISH_EYE_RADIUS_VERTICAL, "CUSTOM MULTI FISH EYE");
+
+ sAntiDistortion.put(1, "ANTI-ENABLE");
+ sAntiDistortion.put(0, "ANTI-DISABLE");
+
+ sPitchFilter.put(1, "FILTER PITCH");
+ sPitchFilter.put(0, "FILTER NOP");
sFlingEnabled.put(1, "FLING ENABLED");
sFlingEnabled.put(0, "FLING DISABLED");
}
- public static void startVideo(Context context, Uri uri){
+ private MediaPlayerWrapper mMediaPlayerWrapper = new MediaPlayerWrapper();
+
+ public static void startVideo(Context context, Uri uri) {
start(context, uri, VideoPlayerActivity.class);
}
- public static void startBitmap(Context context, Uri uri){
+ public static void startBitmap(Context context, Uri uri) {
start(context, uri, BitmapPlayerActivity.class);
}
- public static void startCubemap(Context context, Uri uri){
+ public static void startCubemap(Context context, Uri uri) {
start(context, uri, CubemapPlayerActivity.class);
}
- private static void start(Context context, Uri uri, Class extends Activity> clz){
- Intent i = new Intent(context,clz);
+ private static void start(Context context, Uri uri, Class extends Activity> clz) {
+ Intent i = new Intent(context, clz);
i.setData(uri);
context.startActivity(i);
}
@@ -127,6 +136,7 @@ private static void start(Context context, Uri uri, Class extends Activity> cl
private List plugins = new LinkedList<>();
private MDPosition logoPosition = MDMutablePosition.newInstance().setY(-8.0f).setYaw(-90.0f);
+ private MDPosition videoPosition = MDMutablePosition.newInstance().setZ(-8.0f).setYaw(0.0f).setRoll(-90f);
private MDPosition[] positions = new MDPosition[]{
MDPosition.newInstance().setZ(-8.0f).setYaw(-45.0f),
@@ -163,6 +173,35 @@ public void onCreate(Bundle savedInstanceState) {
hotspotPoints.add(findViewById(R.id.hotspot_point1));
hotspotPoints.add(findViewById(R.id.hotspot_point2));
+
+
+ mMediaPlayerWrapper.init();
+// mMediaPlayerWrapper.setPreparedListener(new IMediaPlayer.OnPreparedListener() {
+// @Override
+// public void onPrepared(IMediaPlayer mp) {
+// cancelBusy();
+// if (getVRLibrary() != null){
+// getVRLibrary().notifyPlayerChanged();
+// }
+//
+// Log.e(TAG,"onPrepared: ");
+// }
+// });
+
+ mMediaPlayerWrapper.getPlayer().setOnErrorListener(new IMediaPlayer.OnErrorListener() {
+ @Override
+ public boolean onError(IMediaPlayer mp, int what, int extra) {
+ String error = String.format("Play Error what=%d extra=%d",what,extra);
+ Toast.makeText(MD360PlayerActivity.this, error, Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+
+
+ mMediaPlayerWrapper.openRemoteFile("file:///mnt/sdcard/video.mp4");
+ mMediaPlayerWrapper.prepare();
+
+
SpinnerHelper.with(this)
.setData(sDisplayMode)
.setDefault(mVRLibrary.getDisplayMode())
@@ -172,7 +211,7 @@ public void onSpinnerClicked(int index, int key, String value) {
mVRLibrary.switchDisplayMode(MD360PlayerActivity.this, key);
int i = 0;
int size = key == MDVRLibrary.DISPLAY_MODE_GLASS ? 2 : 1;
- for (View point : hotspotPoints){
+ for (View point : hotspotPoints) {
point.setVisibility(i < size ? View.VISIBLE : View.GONE);
i++;
}
@@ -213,6 +252,31 @@ public void onSpinnerClicked(int index, int key, String value) {
})
.init(R.id.spinner_distortion);
+ findViewById(R.id.button_add_video_hotspot).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ mMediaPlayerWrapper.getPlayer().setLooping(true);
+ float ratio = mMediaPlayerWrapper.getPlayer().getVideoWidth()/(float)mMediaPlayerWrapper.getPlayer().getVideoHeight();
+
+ MDVideoHotspotBuilder builder = MDVideoHotspotBuilder.create(new MDVRLibrary.IOnSurfaceReadyCallback() {
+ @Override
+ public void onSurfaceReady(Surface surface) {
+ mMediaPlayerWrapper.setSurface(surface);
+ }
+ })
+ .size(4f, 4f*ratio)
+ .tag("video-hotspot")
+ .position(videoPosition);
+
+ MDVideoHotspot plugin = new MDVideoHotspot(builder);
+
+ plugins.add(plugin);
+ getVRLibrary().addPlugin(plugin);
+ Toast.makeText(MD360PlayerActivity.this, "add video, position:" + videoPosition, Toast.LENGTH_SHORT).show();
+ }
+ });
+
findViewById(R.id.button_add_plugin).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -250,7 +314,7 @@ public void onHotspotHit(IMDHotspot hitHotspot, MDRay ray) {
@Override
public void onClick(View v) {
MDHotspotBuilder builder = MDHotspotBuilder.create(mImageLoadProvider)
- .size(4f,4f)
+ .size(4f, 4f)
.provider(activity, R.drawable.moredoo_logo)
.title("logo")
.position(logoPosition)
@@ -263,14 +327,14 @@ public void onHotspotHit(IMDHotspot hitHotspot, MDRay ray) {
MDAbsHotspot hotspot = new MDSimpleHotspot(builder);
plugins.add(hotspot);
getVRLibrary().addPlugin(hotspot);
- Toast.makeText(MD360PlayerActivity.this, "add plugin logo" , Toast.LENGTH_SHORT).show();
+ Toast.makeText(MD360PlayerActivity.this, "add plugin logo", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.button_remove_plugin).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if (plugins.size() > 0){
+ if (plugins.size() > 0) {
MDAbsPlugin plugin = plugins.remove(plugins.size() - 1);
getVRLibrary().removePlugin(plugin);
}
@@ -289,7 +353,7 @@ public void onClick(View v) {
@Override
public void onClick(View v) {
MDHotspotBuilder builder = MDHotspotBuilder.create(mImageLoadProvider)
- .size(4f,4f)
+ .size(4f, 4f)
.provider(activity, R.drawable.moredoo_logo)
.title("front logo")
.tag("tag-front")
@@ -305,12 +369,26 @@ public void onClick(View v) {
@Override
public void onClick(View v) {
IMDHotspot hotspot = getVRLibrary().findHotspotByTag("tag-front");
- if (hotspot != null){
+ if (hotspot != null) {
hotspot.rotateToCamera();
}
}
});
+ findViewById(R.id.button_rotate_camera_45_right).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getVRLibrary().setView(getVRLibrary().getViewAth() + 45, 0);
+ }
+ });
+
+ findViewById(R.id.button_rotate_camera_45_left).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getVRLibrary().setView(getVRLibrary().getViewAth() - 45, 0);
+ }
+ });
+
findViewById(R.id.button_add_md_view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -323,8 +401,7 @@ public void onClick(View v) {
.size(4, 1)
.position(MDPosition.newInstance().setZ(-12.0f))
.title("md view")
- .tag("tag-md-text-view")
- ;
+ .tag("tag-md-text-view");
MDAbsView mdView = new MDView(builder);
plugins.add(mdView);
@@ -336,7 +413,7 @@ public void onClick(View v) {
@Override
public void onClick(View v) {
MDAbsView mdView = getVRLibrary().findViewByTag("tag-md-text-view");
- if (mdView != null){
+ if (mdView != null) {
TextView textView = mdView.castAttachedView(TextView.class);
textView.setText("Cheer up!");
textView.setBackgroundColor(0x8800FF00);
@@ -356,8 +433,7 @@ public void onClick(View v) {
.size(3, 2)
.position(MDPosition.newInstance().setZ(-8.0f))
.title("md view")
- .tag("tag-md-text-view")
- ;
+ .tag("tag-md-text-view");
MDAbsView mdView = new MDView(builder);
mdView.rotateToCamera();
@@ -373,13 +449,13 @@ public void onClick(View v) {
public void onHotspotHit(MDHitEvent hitEvent) {
IMDHotspot hotspot = hitEvent.getHotspot();
long hitTimestamp = hitEvent.getTimestamp();
- String text = hotspot == null ? "nop" : String.format(Locale.CHINESE, "%s %fs", hotspot.getTitle(), (System.currentTimeMillis() - hitTimestamp) / 1000.0f );
+ String text = hotspot == null ? "nop" : String.format(Locale.CHINESE, "%s %fs", hotspot.getTitle(), (System.currentTimeMillis() - hitTimestamp) / 1000.0f);
hotspotText.setText(text);
String brief = getVRLibrary().getDirectorBrief().toString();
directorBriefText.setText(brief);
- if (System.currentTimeMillis() - hitTimestamp > 5000){
+ if (System.currentTimeMillis() - hitTimestamp > 5000) {
getVRLibrary().resetEyePick();
}
}
@@ -420,11 +496,11 @@ public void onSpinnerClicked(int index, int key, String value) {
MDVRLibrary.IDirectorFilter filter = key == 0 ? null : new MDVRLibrary.DirectorFilterAdatper() {
@Override
public float onFilterPitch(float input) {
- if (input > 70){
+ if (input > 70) {
return 70;
}
- if (input < -70){
+ if (input < -70) {
return -70;
}
@@ -452,8 +528,8 @@ public void onSpinnerClicked(int index, int key, String value) {
private ValueAnimator animator;
- private void startCameraAnimation(final MDDirectorCamUpdate cameraUpdate, PropertyValuesHolder... values){
- if (animator != null){
+ private void startCameraAnimation(final MDDirectorCamUpdate cameraUpdate, PropertyValuesHolder... values) {
+ if (animator != null) {
animator.cancel();
}
@@ -481,18 +557,21 @@ public MDVRLibrary getVRLibrary() {
@Override
protected void onResume() {
super.onResume();
+ mMediaPlayerWrapper.resume();
mVRLibrary.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
+ mMediaPlayerWrapper.pause();
mVRLibrary.onPause(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
+ mMediaPlayerWrapper.destroy();
mVRLibrary.onDestroy();
}
@@ -504,17 +583,17 @@ public void onConfigurationChanged(Configuration newConfig) {
protected Uri getUri() {
Intent i = getIntent();
- if (i == null || i.getData() == null){
+ if (i == null || i.getData() == null) {
return null;
}
return i.getData();
}
- public void cancelBusy(){
+ public void cancelBusy() {
findViewById(R.id.progress).setVisibility(View.GONE);
}
- public void busy(){
+ public void busy() {
findViewById(R.id.progress).setVisibility(View.VISIBLE);
}
@@ -540,9 +619,9 @@ public void onProvideBitmap(Uri uri, MD360BitmapTexture.Callback callback) {
}
// picasso impl
- private class ImageLoadProvider implements MDVRLibrary.IImageLoadProvider{
+ private class ImageLoadProvider implements MDVRLibrary.IImageLoadProvider {
- private SimpleArrayMap targetMap = new SimpleArrayMap<>();
+ private SimpleArrayMap targetMap = new SimpleArrayMap<>();
@Override
public void onProvideBitmap(final Uri uri, final MD360BitmapTexture.Callback callback) {
@@ -567,7 +646,7 @@ public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
targetMap.put(uri, target);
- Picasso.with(getApplicationContext()).load(uri).resize(callback.getMaxTextureSize(),callback.getMaxTextureSize()).onlyScaleDown().centerInside().memoryPolicy(NO_CACHE, NO_STORE).into(target);
+ Picasso.with(getApplicationContext()).load(uri).resize(callback.getMaxTextureSize(), callback.getMaxTextureSize()).onlyScaleDown().centerInside().memoryPolicy(NO_CACHE, NO_STORE).into(target);
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_md_using_surface_view.xml b/app/src/main/res/layout/activity_md_using_surface_view.xml
index 8cd26aae..94637d10 100644
--- a/app/src/main/res/layout/activity_md_using_surface_view.xml
+++ b/app/src/main/res/layout/activity_md_using_surface_view.xml
@@ -91,6 +91,19 @@
android:background="@drawable/selector_button_background"
android:layout_width="wrap_content"
android:layout_height="42dp" />
+
+
+
+
+
+