mirror of
https://github.com/androidx/media.git
synced 2025-05-10 09:12:16 +08:00
Update getFormatFromExtension to take a URI
This allows to handle the last segment retrieval and process the case where the filename is null in the method. PiperOrigin-RevId: 314512974
This commit is contained in:
parent
7df99381c1
commit
7c33e2570a
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.google.android.exoplayer2.util;
|
||||
|
||||
import android.net.Uri;
|
||||
import androidx.annotation.IntDef;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
@ -112,11 +113,15 @@ public final class FilenameUtil {
|
||||
private FilenameUtil() {}
|
||||
|
||||
/**
|
||||
* Returns the {@link FileFormat} corresponding to the extension of the provided {@code filename}.
|
||||
* Returns the {@link FileFormat} corresponding to the filename extension of the provided {@link
|
||||
* Uri}. The filename is considered to be the last segment of the {@link Uri} path.
|
||||
*/
|
||||
@FileFormat
|
||||
public static int getFormatFromExtension(String filename) {
|
||||
if (filename.endsWith(FILE_EXTENSION_AC3) || filename.endsWith(FILE_EXTENSION_EC3)) {
|
||||
public static int getFormatFromExtension(Uri uri) {
|
||||
String filename = uri.getLastPathSegment();
|
||||
if (filename == null) {
|
||||
return FILE_FORMAT_UNKNOWN;
|
||||
} else if (filename.endsWith(FILE_EXTENSION_AC3) || filename.endsWith(FILE_EXTENSION_EC3)) {
|
||||
return FILE_FORMAT_AC3;
|
||||
} else if (filename.endsWith(FILE_EXTENSION_AC4)) {
|
||||
return FILE_FORMAT_AC4;
|
||||
|
@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_UNKNOW
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.net.Uri;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@ -31,16 +32,30 @@ public class FilenameUtilTest {
|
||||
|
||||
@Test
|
||||
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
|
||||
assertThat(getFormatFromExtension("filename.mp3")).isEqualTo(FILE_FORMAT_MP3);
|
||||
assertThat(getFormatFromExtension(Uri.parse("filename.mp3"))).isEqualTo(FILE_FORMAT_MP3);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
|
||||
assertThat(getFormatFromExtension("filename.mka")).isEqualTo(FILE_FORMAT_MATROSKA);
|
||||
assertThat(getFormatFromExtension(Uri.parse("filename.mka"))).isEqualTo(FILE_FORMAT_MATROSKA);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getFormatFromExtension_unknownExtension_returnsUnknownFormat() {
|
||||
assertThat(getFormatFromExtension("filename.unknown")).isEqualTo(FILE_FORMAT_UNKNOWN);
|
||||
public void getFormatFromExtension_withUnknownExtension_returnsUnknownFormat() {
|
||||
assertThat(getFormatFromExtension(Uri.parse("filename.unknown")))
|
||||
.isEqualTo(FILE_FORMAT_UNKNOWN);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getFormatFromExtension_withUriNotEndingWithFilename_returnsExpectedFormat() {
|
||||
assertThat(
|
||||
getFormatFromExtension(
|
||||
Uri.parse("http://www.example.com/filename.mp3?query=myquery#fragment")))
|
||||
.isEqualTo(FILE_FORMAT_MP3);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getFormatFromExtension_withNullFilename_returnsUnknownFormat() {
|
||||
assertThat(getFormatFromExtension(Uri.EMPTY)).isEqualTo(FILE_FORMAT_UNKNOWN);
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP4;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_OGG;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_PS;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_TS;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_UNKNOWN;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_WAV;
|
||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
||||
|
||||
@ -286,9 +285,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
||||
public synchronized Extractor[] createExtractors(Uri uri) {
|
||||
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
|
||||
|
||||
String filename = uri.getLastPathSegment();
|
||||
@FilenameUtil.FileFormat
|
||||
int extensionFormat = filename == null ? FILE_FORMAT_UNKNOWN : getFormatFromExtension(filename);
|
||||
@FilenameUtil.FileFormat int extensionFormat = getFormatFromExtension(uri);
|
||||
addExtractorsForFormat(extensionFormat, extractors);
|
||||
|
||||
for (int format : DEFAULT_EXTRACTOR_ORDER) {
|
||||
|
@ -195,11 +195,7 @@ public final class DefaultHlsExtractorFactory implements HlsExtractorFactory {
|
||||
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
|
||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||
}
|
||||
String filename = uri.getLastPathSegment();
|
||||
if (filename == null) {
|
||||
return null;
|
||||
}
|
||||
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(filename);
|
||||
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(uri);
|
||||
switch (fileFormat) {
|
||||
case FILE_FORMAT_WEBVTT:
|
||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||
|
Loading…
x
Reference in New Issue
Block a user