Я планирую реализовать функцию воспроизведения нескольких видео на одном экране одновременно, а просмотры видео можно будет прокручивать во время воспроизведения видео.
Я собираюсь добавить просмотры видео в ListView, который действует как их родительский вид. Мы не должны использовать SurfaceView для рендеринга видеопотока, потому что SurfaceView не может быть перерисован иерархией представлений Android. Прокручивать SurfaceView — плохая идея.
К счастью, TextureView был добавлен с уровня API 14, он был заменой SurfaceView. Так что я могу использовать его для достижения моего плана.
Но TextureView доступен только выше уровня API 14. Фактически от меня потребовали реализовать эту функцию на платформе не ниже уровня API 11.
Я начинаю обращать внимание на SurfaceTexture, который был добавлен в Android с уровня API 11. Мы можем использовать SurfaceTexture, чтобы либо поместить поток изображения камеры, либо поток декодированного видео в текстуру OpenGL, я также знаю, что иерархия представлений Android рисуется opengl вместо скиа с 11 уровня API.
Поэтому мне интересно, могу ли я отобразить видеопоток на обычном представлении Android с помощью SurfaceTexture.
Другими словами, можем ли мы реализовать настраиваемый виджет для уровня API 11-13, чтобы заменить позицию TextureView, добавленную с уровня API 14?
Я просмотрел исходный код android.view.TextureView, это не очень сложно, классы зависимости следующие:
package android.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.Log;
И есть 4 нативных API:
private native void nCreateNativeWindow(SurfaceTexture surface);
private native void nDestroyNativeWindow();
private static native boolean nLockCanvas(int nativeWindow, Canvas canvas, Rect dirty);
private static native void nUnlockCanvasAndPost(int nativeWindow, Canvas canvas);
Можно ли пересадить класс TextureView на Android API уровня 11-13?
Кто может дать мне несколько советов?