mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-09 08:18:44 +01:00
added workaround for internal server error while getting webm videos - fixed #415
This commit is contained in:
parent
d7dc65c7a6
commit
bfe7a3dfb2
@ -871,6 +871,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
|
||||
private static final String EXTRA_LOOP = "loop";
|
||||
private static final String[] SUPPORTED_VIDEO_TYPES;
|
||||
private static final String[] FALLBACK_VIDEO_TYPES;
|
||||
|
||||
static {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||
@ -878,6 +879,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
} else {
|
||||
SUPPORTED_VIDEO_TYPES = new String[]{"video/webm", "video/mp4"};
|
||||
}
|
||||
FALLBACK_VIDEO_TYPES = new String[]{"video/mp4"};
|
||||
}
|
||||
|
||||
private TextureVideoView mVideoView;
|
||||
@ -895,6 +897,10 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
protected Object getDownloadExtra() {
|
||||
final MediaExtra extra = new MediaExtra();
|
||||
extra.setUseThumbor(false);
|
||||
final Pair<String, String> fallbackUrlAndType = getBestVideoUrlAndType(getMedia(), FALLBACK_VIDEO_TYPES);
|
||||
if (fallbackUrlAndType != null) {
|
||||
extra.setFallbackUrl(fallbackUrlAndType.first);
|
||||
}
|
||||
return extra;
|
||||
}
|
||||
|
||||
@ -910,7 +916,8 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
@Nullable
|
||||
@Override
|
||||
protected Uri getDownloadUri() {
|
||||
final Pair<String, String> bestVideoUrlAndType = getBestVideoUrlAndType(getMedia());
|
||||
final Pair<String, String> bestVideoUrlAndType = getBestVideoUrlAndType(getMedia(),
|
||||
SUPPORTED_VIDEO_TYPES);
|
||||
if (bestVideoUrlAndType == null || bestVideoUrlAndType.first == null) return null;
|
||||
return Uri.parse(bestVideoUrlAndType.first);
|
||||
}
|
||||
@ -1040,7 +1047,9 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
updateVolume();
|
||||
}
|
||||
|
||||
private Pair<String, String> getBestVideoUrlAndType(ParcelableMedia media) {
|
||||
@Nullable
|
||||
private Pair<String, String> getBestVideoUrlAndType(final ParcelableMedia media,
|
||||
@NonNull final String[] supportedTypes) {
|
||||
if (media == null) return null;
|
||||
switch (media.type) {
|
||||
case ParcelableMedia.Type.VIDEO:
|
||||
@ -1048,7 +1057,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
||||
if (media.video_info == null) {
|
||||
return Pair.create(media.media_url, null);
|
||||
}
|
||||
for (String supportedType : SUPPORTED_VIDEO_TYPES) {
|
||||
for (String supportedType : supportedTypes) {
|
||||
for (ParcelableMedia.VideoInfo.Variant variant : media.video_info.variants) {
|
||||
if (supportedType.equalsIgnoreCase(variant.content_type))
|
||||
return Pair.create(variant.url, variant.content_type);
|
||||
|
@ -6,6 +6,7 @@ package org.mariotaku.twidere.util.media;
|
||||
public class MediaExtra {
|
||||
long accountId;
|
||||
boolean useThumbor = true;
|
||||
String fallbackUrl;
|
||||
|
||||
public long getAccountId() {
|
||||
return accountId;
|
||||
@ -22,4 +23,12 @@ public class MediaExtra {
|
||||
public void setUseThumbor(boolean useThumbor) {
|
||||
this.useThumbor = useThumbor;
|
||||
}
|
||||
|
||||
public String getFallbackUrl() {
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
public void setFallbackUrl(String fallbackUrl) {
|
||||
this.fallbackUrl = fallbackUrl;
|
||||
}
|
||||
}
|
||||
|
@ -81,8 +81,28 @@ public class TwidereMediaDownloader implements MediaDownloader, Constants {
|
||||
@NonNull
|
||||
@Override
|
||||
public CacheDownloadLoader.DownloadResult get(@NonNull String url, Object extra) throws IOException {
|
||||
final ParcelableMedia media = PreviewMediaExtractor.fromLink(url, mClient, extra);
|
||||
return getInternal(media != null && media.media_url != null ? media.media_url : url, extra);
|
||||
try {
|
||||
final ParcelableMedia media = PreviewMediaExtractor.fromLink(url, mClient, extra);
|
||||
if (media != null && media.media_url != null) {
|
||||
return getInternal(media.media_url, extra);
|
||||
} else {
|
||||
return getInternal(url, extra);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (extra instanceof MediaExtra) {
|
||||
final String fallbackUrl = ((MediaExtra) extra).getFallbackUrl();
|
||||
if (fallbackUrl != null) {
|
||||
final ParcelableMedia media = PreviewMediaExtractor.fromLink(fallbackUrl,
|
||||
mClient, extra);
|
||||
if (media != null && media.media_url != null) {
|
||||
return getInternal(media.media_url, extra);
|
||||
} else {
|
||||
return getInternal(fallbackUrl, extra);
|
||||
}
|
||||
}
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
protected CacheDownloadLoader.DownloadResult getInternal(@NonNull String url,
|
||||
|
Loading…
x
Reference in New Issue
Block a user