【发布时间】:2014-05-06 08:28:00
【问题描述】:
是否可以使用 MemoryFile 类直接从内存中播放视频?我试过了:
AssetFileDescriptor afd = getResources().openRawResourceFd(videoResId);
InputStream is = getResources().openRawResource(videoResId);
// BufferedReader br = new BufferedReader(new InputStreamReader(is));
try {
memoryFile = new MemoryFile("myvideo", (int) afd.getDeclaredLength());
byte[] buffer = new byte[8192];
int bytesRead, totalBytesRead = 0;
while ((bytesRead = is.read(buffer)) != -1) {
memoryFile.writeBytes(buffer, 0, 0, bytesRead);
totalBytesRead += bytesRead;
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
FileDescriptor mfd = MemoryFileUtil.getFileDescriptor(memoryFile);
videoPlayer = new MediaPlayer();
try {
// videoPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
videoPlayer.setDataSource(mfd, 0, afd.getLength());
videoPlayer.prepare();
} catch (Throwable e) {
e.printStackTrace();
}
videoPlayer.setLooping(true);
_setPlayerSurface(videoPlayer, holder);
MemoryFileUtil 类来自https://code.google.com/p/sunnykwong/source/browse/trunk/One+More+Clock/src/com/sunnykwong/omc/MemoryFileUtil.java?spec=svn699&r=699
但是表面仍然是黑色的。但是,如果我用afd AssetFileDescriptor(上面的注释行)调用setDataSource(),它就可以完美地工作。
我对 MemoryFile 做错了吗?是否有一些我需要重置的指针?
【问题讨论】:
标签: android android-mediaplayer android-assets