MediaExtractor, MediaMetadataRetriever с необработанным файлом / файлом актива
Я пытаюсь прочитать видеофайл в папке raw/assets, я пробовал следующие подходы, но ни один из них не работает. Я тестирую API 16. Каждый подход я пробую с расширением mp4 и без него. Я действительно ценю, что кто-то может помочь мне с этим
Все подходы не потерпят крах, MediaMetadataRetriever
может установить источник данных, но не может получить ширину, высоту и снимок экрана. VideoExtractor
всегда возвращайся
06-04 16:44:10.519: E/FileSource(8695): Failed to open file FILE_PATH. (No such file or directory)
06-04 16:44:10.519: E/DecodeActivity(8695): Can't find video info!
Подход 1:android.resource
String filePath = "android.resource://" + this.activity.getPackageName() + "/raw/green_backhand_slice";
videoExtractor.setDataSource(activity.getApplicationContext(), Uri.parse(filePath), null);
metaRetriever.setDataSource(act.getApplication(), Uri.parse(filePath));
Подход 2: android_asset
this.filePath = "file:///android_asset/green_backhand_slice";
videoExtractor.setDataSource(activity.getApplicationContext(), Uri.parse(this.filePath), null);
metaRetriever.setDataSource(act.getApplication(), Uri.parse(filePath));
Подход 3: дескриптор файла актива
AssetFileDescriptor assetFD = null;
try {
assetFD = getAssets().openFd("green_backhand_slice.mp4");
} catch (IOException e) {
e.printStackTrace();
}
metaRetriever.setDataSource(assetFD.getFileDescriptor());
1 ответ
Решение
Вот несколько способов сделать это:
1.Raw:
final AssetFileDescriptor afd=getResources().openRawResourceFd(R.raw.t);
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
2.raw as uri:
final String uriPath="android.resource://"+getPackageName()+"/raw/t";
final Uri uri=Uri.parse(uriPath);
mediaMetadataRetriever.setDataSource(getApplication(),uri);
3.assets:
final AssetFileDescriptor afd=getAssets().openFd("t.mp4");
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());