#java #android #video #streaming #android-tv
Вопрос:
У меня есть приложение для AndroidTV, которое воспроизводит такие медиа, как изображения и видео, пользователь выбирает нужную ориентацию, видео отлично работает, когда оно в альбомной ориентации, но при переходе на портретную только воспроизводит звук, но видео в видеообзоре отсутствует.
Мой XML-файл выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<VideoView
android:id="@ id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.constraint.Guideline
android:id="@ id/guidelinev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<ImageView
android:id="@ id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:background="@android:color/black"
android:scaleType="fitCenter" />
Метод onCreate, в котором инициализируется просмотр видео и распознается ориентация, выглядит следующим образом:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences PREFERENCES = getApplicationContext().getSharedPreferences(SHARED_PREFERENTS_FILE, Context.MODE_PRIVATE);
boolean isVertical = PREFERENCES.getBoolean(KEY_STATUS, false);
ShowMediaActivity.IS_RUNNING = true;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
int UI_OPTIONS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
getWindow().getDecorView().setSystemUiVisibility(UI_OPTIONS);
setContentView(R.layout.activity_show_media);
RelativeLayout mParentLayout = (RelativeLayout) findViewById(R.id.container);
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.VISIBLE) {
hideSystemUi();
}
}
});
videoView = findViewById(R.id.videoView);
videoView.setBackgroundColor(Color.TRANSPARENT);
imageView = findViewById(R.id.imageView);
if (isVertical) { // SCREEN ROTATE
// get screen size from DisplayMetrics if you need to rotate before the screen is shown
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
// if you are rotating after the view was shown
// acquire width and height from the layout's parent's LayoutParams
// calculate offset to move the view into correct position
int offset = (width - height) / 2;
// rotate the layout
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(height, width);
mParentLayout.setLayoutParams(lp);
// 90° clockwise
mParentLayout.setRotation(-90.0f);
mParentLayout.setTranslationX(offset);
mParentLayout.setTranslationY(-offset);
}
And finally the video starts with this method:
private void showVideo(Elementos elemento) {
imageView.setVisibility(View.GONE);
webView.setVisibility(View.GONE);
stopWeb.setVisibility(View.GONE);
videoView.setVisibility(View.VISIBLE);
try {
File getFile = new File(getExternalFilesDir(null).getAbsolutePath() "/NETCARTV_APP/" elemento.getNombreArchivo());
String filename = getFile.getAbsoluteFile().toString();
//String filename = Environment.getExternalStorageDirectory() "/" "NETCARTV_APP" "/" elemento.getNombreArchivo();
//videoView.setVideoPath(filename);
//videoViewCustom.setVideoPath(filename);
videoView.setVideoURI(Uri.fromFile(getFile));
//videoView.setVideoPath("android.resource://" getPackageName() "/" R.raw.comercial);
videoView.setMediaController(new MediaController(this));
videoView.requestFocus();
//------** Elimina la barra de reproducción de videos
MediaController ctrl = new MediaController(ShowMediaActivity.this);
ctrl.setVisibility(View.GONE);
videoView.setMediaController(ctrl);
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
//Cuando termina
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
System.gc();
goToNextMedia();
}
});
videoView.setZOrderMediaOverlay(true);
videoView.start();
videoView.setZOrderOnTop(true);
File imgFile = new File(filename);
if (imgFile.exists()) {
Log.w(TAG, "EEEE");
} else {
ErrorCase();
}
} catch (Exception e) {
ErrorCase();
e.printStackTrace();
}
}
I tried all the solutions that I find here but no one it’s working.
I tried with:
videoView.setBackgroundColor(Color.TRANSPARENT);
videoView.setZOrderMediaOverlay(true); videoView.setZOrderOnTop(true);
- Also tried with VideoViewCustom extends class but neither works.
Any suggestion to fix this problem (?)
Thank you.