changed media retriever failure handling
This commit is contained in:
parent
2fc15a126b
commit
fe12767b4a
4 changed files with 116 additions and 107 deletions
|
@ -199,6 +199,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler {
|
||||||
private Map<String, String> getVideoAllMetadataByMediaMetadataRetriever(String uri) {
|
private Map<String, String> getVideoAllMetadataByMediaMetadataRetriever(String uri) {
|
||||||
Map<String, String> dirMap = new HashMap<>();
|
Map<String, String> dirMap = new HashMap<>();
|
||||||
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, Uri.parse(uri));
|
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, Uri.parse(uri));
|
||||||
|
if (retriever != null) {
|
||||||
try {
|
try {
|
||||||
for (Map.Entry<Integer, String> kv : VIDEO_MEDIA_METADATA_KEYS.entrySet()) {
|
for (Map.Entry<Integer, String> kv : VIDEO_MEDIA_METADATA_KEYS.entrySet()) {
|
||||||
Integer key = kv.getKey();
|
Integer key = kv.getKey();
|
||||||
|
@ -221,6 +222,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler {
|
||||||
// cannot rely on `MediaMetadataRetriever` being `AutoCloseable` on older APIs
|
// cannot rely on `MediaMetadataRetriever` being `AutoCloseable` on older APIs
|
||||||
retriever.release();
|
retriever.release();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return dirMap;
|
return dirMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,6 +319,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler {
|
||||||
private Map<String, Object> getVideoCatalogMetadataByMediaMetadataRetriever(String uri) {
|
private Map<String, Object> getVideoCatalogMetadataByMediaMetadataRetriever(String uri) {
|
||||||
Map<String, Object> metadataMap = new HashMap<>();
|
Map<String, Object> metadataMap = new HashMap<>();
|
||||||
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, Uri.parse(uri));
|
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, Uri.parse(uri));
|
||||||
|
if (retriever != null) {
|
||||||
try {
|
try {
|
||||||
String dateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
|
String dateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
|
||||||
String rotationString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
|
String rotationString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
|
||||||
|
@ -357,6 +360,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler {
|
||||||
// cannot rely on `MediaMetadataRetriever` being `AutoCloseable` on older APIs
|
// cannot rely on `MediaMetadataRetriever` being `AutoCloseable` on older APIs
|
||||||
retriever.release();
|
retriever.release();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return metadataMap;
|
return metadataMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ class VideoThumbnailFetcher implements DataFetcher<InputStream> {
|
||||||
@Override
|
@Override
|
||||||
public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super InputStream> callback) {
|
public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super InputStream> callback) {
|
||||||
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(model.getContext(), model.getUri());
|
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(model.getContext(), model.getUri());
|
||||||
|
if (retriever != null) {
|
||||||
try {
|
try {
|
||||||
byte[] picture = retriever.getEmbeddedPicture();
|
byte[] picture = retriever.getEmbeddedPicture();
|
||||||
if (picture != null) {
|
if (picture != null) {
|
||||||
|
@ -46,6 +47,7 @@ class VideoThumbnailFetcher implements DataFetcher<InputStream> {
|
||||||
retriever.release();
|
retriever.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
|
|
|
@ -135,6 +135,7 @@ public class SourceImageEntry {
|
||||||
// finds: width, height, orientation/rotation, date, title, duration
|
// finds: width, height, orientation/rotation, date, title, duration
|
||||||
private void fillByMediaMetadataRetriever(@NonNull Context context) {
|
private void fillByMediaMetadataRetriever(@NonNull Context context) {
|
||||||
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, uri);
|
MediaMetadataRetriever retriever = StorageUtils.openMetadataRetriever(context, uri);
|
||||||
|
if (retriever != null) {
|
||||||
try {
|
try {
|
||||||
String width = null, height = null, rotation = null, durationMillis = null;
|
String width = null, height = null, rotation = null, durationMillis = null;
|
||||||
if (isImage()) {
|
if (isImage()) {
|
||||||
|
@ -180,6 +181,7 @@ public class SourceImageEntry {
|
||||||
retriever.release();
|
retriever.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// expects entry with: uri, mimeType
|
// expects entry with: uri, mimeType
|
||||||
// finds: width, height, orientation, date
|
// finds: width, height, orientation, date
|
||||||
|
|
|
@ -460,7 +460,8 @@ public class StorageUtils {
|
||||||
}
|
}
|
||||||
retriever.setDataSource(context, uri);
|
retriever.setDataSource(context, uri);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(LOG_TAG, "failed to open MediaMetadataRetriever for uri=" + uri, e);
|
// unsupported format
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return retriever;
|
return retriever;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue