我正在编写一个 Android 应用程序来使用 OpenGL ES 2.0 从二进制文件播放视频。有一个大视频文件,其中包含完全未格式化的二进制像素数据(价值 1000 帧)。我正在使用 RandomAccessFile 打开文件,导航到正确的点并提取所需帧的像素数据。
我最初通过打开文件并在每次调用 onDrawFrame 时再次关闭它来非常粗略地完成此操作。
//The following sits within the onDrawFrame activity:
long time = SystemClock.uptimeMillis() % 4000L
long frame = 0;
frame = time/10;
int w = 640; //width in pixels
int h = 512; //height in pixels
int nP = w * h; //number of pixels in frame and size of frame in bytes
byte[] byteArray = new byte[nP]; //array to hold one frame
try {
RandomAccessFile f = new RandomAccessFile("//sdcard/8bitvid.bin", "r"); //open the video file
f.seek(nP*frame); //navigate to the correct frame
f.read(byteArray); //read frame
f.close(); //close file
}
我意识到这在很多方面都是错误的,但我刚刚从 Labview 迁移到 Java,这真是一个飞跃!所以我的问题是:
- 我应该如何在 onDrawFrame 调用之间保持文件打开?
- 如何在 onDrawFrame 的交互之间传递变量(即帧号)?
快速解释或只是指向相关示例的指针会很棒。
谢谢
卢克