1
我寫了一個簡單的Android應用程序,它使用MediaMetadataRetriver
類來獲取幀。它工作正常,除了我意識到它跳過幀。Android MediaMetadataRetriever.getFrameAtTime跳過幀
我試圖解碼的視頻片段是手機相機拍攝的。按照相關的代碼片段:
MediaMetadataRetriever mediaDataRet = new MediaMetadataRetriever();
mediaDataRet.setDataSource(path);
String lengthMsStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_DURATION);
final long lenMs = Long.parseLong(lengthMsStr);
String widthStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_WIDTH);
int width = Integer.parseInt(widthStr);
String heightStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_HEIGHT);
int height = Integer.parseInt(heightStr);
注意變量lenMs
,它持有毫秒CLID時間。然後對於每一幀我做的:
int pace = 30; // 30 fps ms spacing
for (long i = 0; i < lenMs; i += pace) {
if (is_abort())
return;
Bitmap bitmap = mediaDataRet.getFrameAtTime(i * 1000); // I tried the other version of this method with OPTION_CLOSEST, with no luck.
if (bc == null)
bc = bitmap.getConfig();
bitmap.getPixels(pixBuffer, 0, width, 0, 0, width, height);
[...]
}
檢查視覺後我注意到,某些幀被跳過(如短序列)。爲什麼?我能避免這種情況嗎?
其實我試過你的上面的代碼來獲取視頻文件中的所有幀,但我只獲得第一幀frames.my視頻持續時間是127040(2:07秒)將視頻分成32幀可以查看所有32個圖像但都是相同的圖像我想了很多與getFrameAtTime(藥劑)修復它,但完全沒有用,確切地說,我不知道它出錯的地方,所以你可以幫助我的完整的源代碼,我應該包括任何東西在AndroidManifest – Manoj
http://stackoverflow.com/a/24307619/3496570可能有幫助 – Nepster