mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-10 16:50:47 +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 EXTRA_LOOP = "loop";
|
||||||
private static final String[] SUPPORTED_VIDEO_TYPES;
|
private static final String[] SUPPORTED_VIDEO_TYPES;
|
||||||
|
private static final String[] FALLBACK_VIDEO_TYPES;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||||
@ -878,6 +879,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
|||||||
} else {
|
} else {
|
||||||
SUPPORTED_VIDEO_TYPES = new String[]{"video/webm", "video/mp4"};
|
SUPPORTED_VIDEO_TYPES = new String[]{"video/webm", "video/mp4"};
|
||||||
}
|
}
|
||||||
|
FALLBACK_VIDEO_TYPES = new String[]{"video/mp4"};
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextureVideoView mVideoView;
|
private TextureVideoView mVideoView;
|
||||||
@ -895,6 +897,10 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
|||||||
protected Object getDownloadExtra() {
|
protected Object getDownloadExtra() {
|
||||||
final MediaExtra extra = new MediaExtra();
|
final MediaExtra extra = new MediaExtra();
|
||||||
extra.setUseThumbor(false);
|
extra.setUseThumbor(false);
|
||||||
|
final Pair<String, String> fallbackUrlAndType = getBestVideoUrlAndType(getMedia(), FALLBACK_VIDEO_TYPES);
|
||||||
|
if (fallbackUrlAndType != null) {
|
||||||
|
extra.setFallbackUrl(fallbackUrlAndType.first);
|
||||||
|
}
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -910,7 +916,8 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected Uri getDownloadUri() {
|
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;
|
if (bestVideoUrlAndType == null || bestVideoUrlAndType.first == null) return null;
|
||||||
return Uri.parse(bestVideoUrlAndType.first);
|
return Uri.parse(bestVideoUrlAndType.first);
|
||||||
}
|
}
|
||||||
@ -1040,7 +1047,9 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
|||||||
updateVolume();
|
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;
|
if (media == null) return null;
|
||||||
switch (media.type) {
|
switch (media.type) {
|
||||||
case ParcelableMedia.Type.VIDEO:
|
case ParcelableMedia.Type.VIDEO:
|
||||||
@ -1048,7 +1057,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements
|
|||||||
if (media.video_info == null) {
|
if (media.video_info == null) {
|
||||||
return Pair.create(media.media_url, 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) {
|
for (ParcelableMedia.VideoInfo.Variant variant : media.video_info.variants) {
|
||||||
if (supportedType.equalsIgnoreCase(variant.content_type))
|
if (supportedType.equalsIgnoreCase(variant.content_type))
|
||||||
return Pair.create(variant.url, variant.content_type);
|
return Pair.create(variant.url, variant.content_type);
|
||||||
|
@ -6,6 +6,7 @@ package org.mariotaku.twidere.util.media;
|
|||||||
public class MediaExtra {
|
public class MediaExtra {
|
||||||
long accountId;
|
long accountId;
|
||||||
boolean useThumbor = true;
|
boolean useThumbor = true;
|
||||||
|
String fallbackUrl;
|
||||||
|
|
||||||
public long getAccountId() {
|
public long getAccountId() {
|
||||||
return accountId;
|
return accountId;
|
||||||
@ -22,4 +23,12 @@ public class MediaExtra {
|
|||||||
public void setUseThumbor(boolean useThumbor) {
|
public void setUseThumbor(boolean useThumbor) {
|
||||||
this.useThumbor = 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
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public CacheDownloadLoader.DownloadResult get(@NonNull String url, Object extra) throws IOException {
|
public CacheDownloadLoader.DownloadResult get(@NonNull String url, Object extra) throws IOException {
|
||||||
|
try {
|
||||||
final ParcelableMedia media = PreviewMediaExtractor.fromLink(url, mClient, extra);
|
final ParcelableMedia media = PreviewMediaExtractor.fromLink(url, mClient, extra);
|
||||||
return getInternal(media != null && media.media_url != null ? media.media_url : url, 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,
|
protected CacheDownloadLoader.DownloadResult getInternal(@NonNull String url,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user