mirror of
https://github.com/androidx/media.git
synced 2025-05-09 00:20:45 +08:00
Miscellaneous renamings in FilenameUtils
PiperOrigin-RevId: 314723830
This commit is contained in:
parent
3474c39c10
commit
12a9351781
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.exoplayer2.util;
|
||||||
|
|
||||||
|
import android.net.Uri;
|
||||||
|
import androidx.annotation.IntDef;
|
||||||
|
import java.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
/** Defines common file type constants and helper methods. */
|
||||||
|
public final class FileTypes {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File types. One of {@link #UNKNOWN}, {@link #AC3}, {@link #AC4}, {@link #ADTS}, {@link #AMR},
|
||||||
|
* {@link #FLAC}, {@link #FLV}, {@link #MATROSKA}, {@link #MP3}, {@link #MP4}, {@link #OGG},
|
||||||
|
* {@link #PS}, {@link #TS}, {@link #WAV} and {@link #WEBVTT}.
|
||||||
|
*/
|
||||||
|
@Documented
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef({UNKNOWN, AC3, AC4, ADTS, AMR, FLAC, FLV, MATROSKA, MP3, MP4, OGG, PS, TS, WAV, WEBVTT})
|
||||||
|
public @interface Type {}
|
||||||
|
/** Unknown file type. */
|
||||||
|
public static final int UNKNOWN = -1;
|
||||||
|
/** File type for the AC-3 and E-AC-3 formats. */
|
||||||
|
public static final int AC3 = 0;
|
||||||
|
/** File type for the AC-4 format. */
|
||||||
|
public static final int AC4 = 1;
|
||||||
|
/** File type for the ADTS format. */
|
||||||
|
public static final int ADTS = 2;
|
||||||
|
/** File type for the AMR format. */
|
||||||
|
public static final int AMR = 3;
|
||||||
|
/** File type for the FLAC format. */
|
||||||
|
public static final int FLAC = 4;
|
||||||
|
/** File type for the FLV format. */
|
||||||
|
public static final int FLV = 5;
|
||||||
|
/** File type for the Matroska and WebM formats. */
|
||||||
|
public static final int MATROSKA = 6;
|
||||||
|
/** File type for the MP3 format. */
|
||||||
|
public static final int MP3 = 7;
|
||||||
|
/** File type for the MP4 format. */
|
||||||
|
public static final int MP4 = 8;
|
||||||
|
/** File type for the Ogg format. */
|
||||||
|
public static final int OGG = 9;
|
||||||
|
/** File type for the MPEG-PS format. */
|
||||||
|
public static final int PS = 10;
|
||||||
|
/** File type for the MPEG-TS format. */
|
||||||
|
public static final int TS = 11;
|
||||||
|
/** File type for the WAV format. */
|
||||||
|
public static final int WAV = 12;
|
||||||
|
/** File type for the WebVTT format. */
|
||||||
|
public static final int WEBVTT = 13;
|
||||||
|
|
||||||
|
private static final String EXTENSION_AC3 = ".ac3";
|
||||||
|
private static final String EXTENSION_EC3 = ".ec3";
|
||||||
|
private static final String EXTENSION_AC4 = ".ac4";
|
||||||
|
private static final String EXTENSION_ADTS = ".adts";
|
||||||
|
private static final String EXTENSION_AAC = ".aac";
|
||||||
|
private static final String EXTENSION_AMR = ".amr";
|
||||||
|
private static final String EXTENSION_FLAC = ".flac";
|
||||||
|
private static final String EXTENSION_FLV = ".flv";
|
||||||
|
private static final String EXTENSION_PREFIX_MK = ".mk";
|
||||||
|
private static final String EXTENSION_WEBM = ".webm";
|
||||||
|
private static final String EXTENSION_PREFIX_OG = ".og";
|
||||||
|
private static final String EXTENSION_OPUS = ".opus";
|
||||||
|
private static final String EXTENSION_MP3 = ".mp3";
|
||||||
|
private static final String EXTENSION_MP4 = ".mp4";
|
||||||
|
private static final String EXTENSION_PREFIX_M4 = ".m4";
|
||||||
|
private static final String EXTENSION_PREFIX_MP4 = ".mp4";
|
||||||
|
private static final String EXTENSION_PREFIX_CMF = ".cmf";
|
||||||
|
private static final String EXTENSION_PS = ".ps";
|
||||||
|
private static final String EXTENSION_MPEG = ".mpeg";
|
||||||
|
private static final String EXTENSION_MPG = ".mpg";
|
||||||
|
private static final String EXTENSION_M2P = ".m2p";
|
||||||
|
private static final String EXTENSION_TS = ".ts";
|
||||||
|
private static final String EXTENSION_PREFIX_TS = ".ts";
|
||||||
|
private static final String EXTENSION_WAV = ".wav";
|
||||||
|
private static final String EXTENSION_WAVE = ".wave";
|
||||||
|
private static final String EXTENSION_VTT = ".vtt";
|
||||||
|
private static final String EXTENSION_WEBVTT = ".webvtt";
|
||||||
|
|
||||||
|
private FileTypes() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link Type} corresponding to the filename extension of the provided {@link Uri}.
|
||||||
|
* The filename is considered to be the last segment of the {@link Uri} path.
|
||||||
|
*/
|
||||||
|
@FileTypes.Type
|
||||||
|
public static int getFormatFromExtension(Uri uri) {
|
||||||
|
String filename = uri.getLastPathSegment();
|
||||||
|
if (filename == null) {
|
||||||
|
return FileTypes.UNKNOWN;
|
||||||
|
} else if (filename.endsWith(EXTENSION_AC3) || filename.endsWith(EXTENSION_EC3)) {
|
||||||
|
return FileTypes.AC3;
|
||||||
|
} else if (filename.endsWith(EXTENSION_AC4)) {
|
||||||
|
return FileTypes.AC4;
|
||||||
|
} else if (filename.endsWith(EXTENSION_ADTS) || filename.endsWith(EXTENSION_AAC)) {
|
||||||
|
return FileTypes.ADTS;
|
||||||
|
} else if (filename.endsWith(EXTENSION_AMR)) {
|
||||||
|
return FileTypes.AMR;
|
||||||
|
} else if (filename.endsWith(EXTENSION_FLAC)) {
|
||||||
|
return FileTypes.FLAC;
|
||||||
|
} else if (filename.endsWith(EXTENSION_FLV)) {
|
||||||
|
return FileTypes.FLV;
|
||||||
|
} else if (filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_MK,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_MK.length() + 1))
|
||||||
|
|| filename.endsWith(EXTENSION_WEBM)) {
|
||||||
|
return FileTypes.MATROSKA;
|
||||||
|
} else if (filename.endsWith(EXTENSION_MP3)) {
|
||||||
|
return FileTypes.MP3;
|
||||||
|
} else if (filename.endsWith(EXTENSION_MP4)
|
||||||
|
|| filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_M4,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_M4.length() + 1))
|
||||||
|
|| filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_MP4,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_MP4.length() + 1))
|
||||||
|
|| filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_CMF,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_CMF.length() + 1))) {
|
||||||
|
return FileTypes.MP4;
|
||||||
|
} else if (filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_OG,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_OG.length() + 1))
|
||||||
|
|| filename.endsWith(EXTENSION_OPUS)) {
|
||||||
|
return FileTypes.OGG;
|
||||||
|
} else if (filename.endsWith(EXTENSION_PS)
|
||||||
|
|| filename.endsWith(EXTENSION_MPEG)
|
||||||
|
|| filename.endsWith(EXTENSION_MPG)
|
||||||
|
|| filename.endsWith(EXTENSION_M2P)) {
|
||||||
|
return FileTypes.PS;
|
||||||
|
} else if (filename.endsWith(EXTENSION_TS)
|
||||||
|
|| filename.startsWith(
|
||||||
|
EXTENSION_PREFIX_TS,
|
||||||
|
/* toffset= */ filename.length() - (EXTENSION_PREFIX_TS.length() + 1))) {
|
||||||
|
return FileTypes.TS;
|
||||||
|
} else if (filename.endsWith(EXTENSION_WAV) || filename.endsWith(EXTENSION_WAVE)) {
|
||||||
|
return FileTypes.WAV;
|
||||||
|
} else if (filename.endsWith(EXTENSION_VTT) || filename.endsWith(EXTENSION_WEBVTT)) {
|
||||||
|
return FileTypes.WEBVTT;
|
||||||
|
} else {
|
||||||
|
return FileTypes.UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,177 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.google.android.exoplayer2.util;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
|
||||||
import androidx.annotation.IntDef;
|
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
|
|
||||||
/** Filename related utility methods. */
|
|
||||||
public final class FilenameUtil {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File formats. One of {@link #FILE_FORMAT_UNKNOWN}, {@link #FILE_FORMAT_AC3}, {@link
|
|
||||||
* #FILE_FORMAT_AC4}, {@link #FILE_FORMAT_ADTS}, {@link #FILE_FORMAT_AMR}, {@link
|
|
||||||
* #FILE_FORMAT_FLAC}, {@link #FILE_FORMAT_FLV}, {@link #FILE_FORMAT_MATROSKA}, {@link
|
|
||||||
* #FILE_FORMAT_MP3}, {@link #FILE_FORMAT_MP4}, {@link #FILE_FORMAT_OGG}, {@link #FILE_FORMAT_PS},
|
|
||||||
* {@link #FILE_FORMAT_TS}, {@link #FILE_FORMAT_WAV} and {@link #FILE_FORMAT_WEBVTT}.
|
|
||||||
*/
|
|
||||||
@Documented
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
@IntDef({
|
|
||||||
FILE_FORMAT_UNKNOWN,
|
|
||||||
FILE_FORMAT_AC3,
|
|
||||||
FILE_FORMAT_AC4,
|
|
||||||
FILE_FORMAT_ADTS,
|
|
||||||
FILE_FORMAT_AMR,
|
|
||||||
FILE_FORMAT_FLAC,
|
|
||||||
FILE_FORMAT_FLV,
|
|
||||||
FILE_FORMAT_MATROSKA,
|
|
||||||
FILE_FORMAT_MP3,
|
|
||||||
FILE_FORMAT_MP4,
|
|
||||||
FILE_FORMAT_OGG,
|
|
||||||
FILE_FORMAT_PS,
|
|
||||||
FILE_FORMAT_TS,
|
|
||||||
FILE_FORMAT_WAV,
|
|
||||||
FILE_FORMAT_WEBVTT
|
|
||||||
})
|
|
||||||
public @interface FileFormat {}
|
|
||||||
/** Unknown file format. */
|
|
||||||
public static final int FILE_FORMAT_UNKNOWN = -1;
|
|
||||||
/** File format for AC-3 and E-AC-3. */
|
|
||||||
public static final int FILE_FORMAT_AC3 = 0;
|
|
||||||
/** File format for AC-4. */
|
|
||||||
public static final int FILE_FORMAT_AC4 = 1;
|
|
||||||
/** File format for ADTS. */
|
|
||||||
public static final int FILE_FORMAT_ADTS = 2;
|
|
||||||
/** File format for AMR. */
|
|
||||||
public static final int FILE_FORMAT_AMR = 3;
|
|
||||||
/** File format for FLAC. */
|
|
||||||
public static final int FILE_FORMAT_FLAC = 4;
|
|
||||||
/** File format for FLV. */
|
|
||||||
public static final int FILE_FORMAT_FLV = 5;
|
|
||||||
/** File format for Matroska and WebM. */
|
|
||||||
public static final int FILE_FORMAT_MATROSKA = 6;
|
|
||||||
/** File format for MP3. */
|
|
||||||
public static final int FILE_FORMAT_MP3 = 7;
|
|
||||||
/** File format for MP4. */
|
|
||||||
public static final int FILE_FORMAT_MP4 = 8;
|
|
||||||
/** File format for Ogg. */
|
|
||||||
public static final int FILE_FORMAT_OGG = 9;
|
|
||||||
/** File format for MPEG-PS. */
|
|
||||||
public static final int FILE_FORMAT_PS = 10;
|
|
||||||
/** File format for MPEG-TS. */
|
|
||||||
public static final int FILE_FORMAT_TS = 11;
|
|
||||||
/** File format for WAV. */
|
|
||||||
public static final int FILE_FORMAT_WAV = 12;
|
|
||||||
/** File format for WebVTT. */
|
|
||||||
public static final int FILE_FORMAT_WEBVTT = 13;
|
|
||||||
|
|
||||||
private static final String FILE_EXTENSION_AC3 = ".ac3";
|
|
||||||
private static final String FILE_EXTENSION_EC3 = ".ec3";
|
|
||||||
private static final String FILE_EXTENSION_AC4 = ".ac4";
|
|
||||||
private static final String FILE_EXTENSION_ADTS = ".adts";
|
|
||||||
private static final String FILE_EXTENSION_AAC = ".aac";
|
|
||||||
private static final String FILE_EXTENSION_AMR = ".amr";
|
|
||||||
private static final String FILE_EXTENSION_FLAC = ".flac";
|
|
||||||
private static final String FILE_EXTENSION_FLV = ".flv";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_MK = ".mk";
|
|
||||||
private static final String FILE_EXTENSION_WEBM = ".webm";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_OG = ".og";
|
|
||||||
private static final String FILE_EXTENSION_OPUS = ".opus";
|
|
||||||
private static final String FILE_EXTENSION_MP3 = ".mp3";
|
|
||||||
private static final String FILE_EXTENSION_MP4 = ".mp4";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_M4 = ".m4";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_MP4 = ".mp4";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_CMF = ".cmf";
|
|
||||||
private static final String FILE_EXTENSION_PS = ".ps";
|
|
||||||
private static final String FILE_EXTENSION_MPEG = ".mpeg";
|
|
||||||
private static final String FILE_EXTENSION_MPG = ".mpg";
|
|
||||||
private static final String FILE_EXTENSION_M2P = ".m2p";
|
|
||||||
private static final String FILE_EXTENSION_TS = ".ts";
|
|
||||||
private static final String FILE_EXTENSION_PREFIX_TS = ".ts";
|
|
||||||
private static final String FILE_EXTENSION_WAV = ".wav";
|
|
||||||
private static final String FILE_EXTENSION_WAVE = ".wave";
|
|
||||||
private static final String FILE_EXTENSION_VTT = ".vtt";
|
|
||||||
private static final String FILE_EXTENSION_WEBVTT = ".webvtt";
|
|
||||||
|
|
||||||
private FilenameUtil() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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(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;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_ADTS) || filename.endsWith(FILE_EXTENSION_AAC)) {
|
|
||||||
return FILE_FORMAT_ADTS;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_AMR)) {
|
|
||||||
return FILE_FORMAT_AMR;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_FLAC)) {
|
|
||||||
return FILE_FORMAT_FLAC;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_FLV)) {
|
|
||||||
return FILE_FORMAT_FLV;
|
|
||||||
} else if (filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_MK,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_MK.length() + 1))
|
|
||||||
|| filename.endsWith(FILE_EXTENSION_WEBM)) {
|
|
||||||
return FILE_FORMAT_MATROSKA;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_MP3)) {
|
|
||||||
return FILE_FORMAT_MP3;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_MP4)
|
|
||||||
|| filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_M4,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_M4.length() + 1))
|
|
||||||
|| filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_MP4,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_MP4.length() + 1))
|
|
||||||
|| filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_CMF,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_CMF.length() + 1))) {
|
|
||||||
return FILE_FORMAT_MP4;
|
|
||||||
} else if (filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_OG,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_OG.length() + 1))
|
|
||||||
|| filename.endsWith(FILE_EXTENSION_OPUS)) {
|
|
||||||
return FILE_FORMAT_OGG;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_PS)
|
|
||||||
|| filename.endsWith(FILE_EXTENSION_MPEG)
|
|
||||||
|| filename.endsWith(FILE_EXTENSION_MPG)
|
|
||||||
|| filename.endsWith(FILE_EXTENSION_M2P)) {
|
|
||||||
return FILE_FORMAT_PS;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_TS)
|
|
||||||
|| filename.startsWith(
|
|
||||||
FILE_EXTENSION_PREFIX_TS,
|
|
||||||
/* toffset= */ filename.length() - (FILE_EXTENSION_PREFIX_TS.length() + 1))) {
|
|
||||||
return FILE_FORMAT_TS;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_WAV) || filename.endsWith(FILE_EXTENSION_WAVE)) {
|
|
||||||
return FILE_FORMAT_WAV;
|
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_VTT) || filename.endsWith(FILE_EXTENSION_WEBVTT)) {
|
|
||||||
return FILE_FORMAT_WEBVTT;
|
|
||||||
} else {
|
|
||||||
return FILE_FORMAT_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,10 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.util;
|
package com.google.android.exoplayer2.util;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MATROSKA;
|
import static com.google.android.exoplayer2.util.FileTypes.getFormatFromExtension;
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP3;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_UNKNOWN;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@ -26,24 +23,23 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
/** Tests for {@link FilenameUtilTest}. */
|
/** Tests for {@link FileTypesTest}. */
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class FilenameUtilTest {
|
public class FileTypesTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
|
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
|
||||||
assertThat(getFormatFromExtension(Uri.parse("filename.mp3"))).isEqualTo(FILE_FORMAT_MP3);
|
assertThat(getFormatFromExtension(Uri.parse("filename.mp3"))).isEqualTo(FileTypes.MP3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
|
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
|
||||||
assertThat(getFormatFromExtension(Uri.parse("filename.mka"))).isEqualTo(FILE_FORMAT_MATROSKA);
|
assertThat(getFormatFromExtension(Uri.parse("filename.mka"))).isEqualTo(FileTypes.MATROSKA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withUnknownExtension_returnsUnknownFormat() {
|
public void getFormatFromExtension_withUnknownExtension_returnsUnknownFormat() {
|
||||||
assertThat(getFormatFromExtension(Uri.parse("filename.unknown")))
|
assertThat(getFormatFromExtension(Uri.parse("filename.unknown"))).isEqualTo(FileTypes.UNKNOWN);
|
||||||
.isEqualTo(FILE_FORMAT_UNKNOWN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -51,11 +47,11 @@ public class FilenameUtilTest {
|
|||||||
assertThat(
|
assertThat(
|
||||||
getFormatFromExtension(
|
getFormatFromExtension(
|
||||||
Uri.parse("http://www.example.com/filename.mp3?query=myquery#fragment")))
|
Uri.parse("http://www.example.com/filename.mp3?query=myquery#fragment")))
|
||||||
.isEqualTo(FILE_FORMAT_MP3);
|
.isEqualTo(FileTypes.MP3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withNullFilename_returnsUnknownFormat() {
|
public void getFormatFromExtension_withNullFilename_returnsUnknownFormat() {
|
||||||
assertThat(getFormatFromExtension(Uri.EMPTY)).isEqualTo(FILE_FORMAT_UNKNOWN);
|
assertThat(getFormatFromExtension(Uri.EMPTY)).isEqualTo(FileTypes.UNKNOWN);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,20 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.extractor;
|
package com.google.android.exoplayer2.extractor;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_AC3;
|
import static com.google.android.exoplayer2.util.FileTypes.getFormatFromExtension;
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_AC4;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_ADTS;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_AMR;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_FLAC;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_FLV;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MATROSKA;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP3;
|
|
||||||
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_WAV;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -48,7 +35,7 @@ import com.google.android.exoplayer2.extractor.ts.PsExtractor;
|
|||||||
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
|
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
|
||||||
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader;
|
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader;
|
||||||
import com.google.android.exoplayer2.extractor.wav.WavExtractor;
|
import com.google.android.exoplayer2.extractor.wav.WavExtractor;
|
||||||
import com.google.android.exoplayer2.util.FilenameUtil;
|
import com.google.android.exoplayer2.util.FileTypes;
|
||||||
import com.google.android.exoplayer2.util.TimestampAdjuster;
|
import com.google.android.exoplayer2.util.TimestampAdjuster;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -86,19 +73,19 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
// https://docs.google.com/document/d/1w2mKaWMxfz2Ei8-LdxqbPs1VLe_oudB-eryXXw9OvQQ.
|
// https://docs.google.com/document/d/1w2mKaWMxfz2Ei8-LdxqbPs1VLe_oudB-eryXXw9OvQQ.
|
||||||
private static final int[] DEFAULT_EXTRACTOR_ORDER =
|
private static final int[] DEFAULT_EXTRACTOR_ORDER =
|
||||||
new int[] {
|
new int[] {
|
||||||
FILE_FORMAT_FLV,
|
FileTypes.FLV,
|
||||||
FILE_FORMAT_FLAC,
|
FileTypes.FLAC,
|
||||||
FILE_FORMAT_WAV,
|
FileTypes.WAV,
|
||||||
FILE_FORMAT_MP4,
|
FileTypes.MP4,
|
||||||
FILE_FORMAT_AMR,
|
FileTypes.AMR,
|
||||||
FILE_FORMAT_PS,
|
FileTypes.PS,
|
||||||
FILE_FORMAT_OGG,
|
FileTypes.OGG,
|
||||||
FILE_FORMAT_TS,
|
FileTypes.TS,
|
||||||
FILE_FORMAT_MATROSKA,
|
FileTypes.MATROSKA,
|
||||||
FILE_FORMAT_ADTS,
|
FileTypes.ADTS,
|
||||||
FILE_FORMAT_AC3,
|
FileTypes.AC3,
|
||||||
FILE_FORMAT_AC4,
|
FileTypes.AC4,
|
||||||
FILE_FORMAT_MP3,
|
FileTypes.MP3,
|
||||||
};
|
};
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -285,7 +272,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
public synchronized Extractor[] createExtractors(Uri uri) {
|
public synchronized Extractor[] createExtractors(Uri uri) {
|
||||||
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
|
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
|
||||||
|
|
||||||
@FilenameUtil.FileFormat int extensionFormat = getFormatFromExtension(uri);
|
@FileTypes.Type int extensionFormat = getFormatFromExtension(uri);
|
||||||
addExtractorsForFormat(extensionFormat, extractors);
|
addExtractorsForFormat(extensionFormat, extractors);
|
||||||
|
|
||||||
for (int format : DEFAULT_EXTRACTOR_ORDER) {
|
for (int format : DEFAULT_EXTRACTOR_ORDER) {
|
||||||
@ -297,16 +284,15 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
return extractors.toArray(new Extractor[extractors.size()]);
|
return extractors.toArray(new Extractor[extractors.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addExtractorsForFormat(
|
private void addExtractorsForFormat(@FileTypes.Type int fileFormat, List<Extractor> extractors) {
|
||||||
@FilenameUtil.FileFormat int fileFormat, List<Extractor> extractors) {
|
|
||||||
switch (fileFormat) {
|
switch (fileFormat) {
|
||||||
case FILE_FORMAT_AC3:
|
case FileTypes.AC3:
|
||||||
extractors.add(new Ac3Extractor());
|
extractors.add(new Ac3Extractor());
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_AC4:
|
case FileTypes.AC4:
|
||||||
extractors.add(new Ac4Extractor());
|
extractors.add(new Ac4Extractor());
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_ADTS:
|
case FileTypes.ADTS:
|
||||||
extractors.add(
|
extractors.add(
|
||||||
new AdtsExtractor(
|
new AdtsExtractor(
|
||||||
adtsFlags
|
adtsFlags
|
||||||
@ -314,7 +300,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
? AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
? AdtsExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
||||||
: 0)));
|
: 0)));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_AMR:
|
case FileTypes.AMR:
|
||||||
extractors.add(
|
extractors.add(
|
||||||
new AmrExtractor(
|
new AmrExtractor(
|
||||||
amrFlags
|
amrFlags
|
||||||
@ -322,7 +308,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
||||||
: 0)));
|
: 0)));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_FLAC:
|
case FileTypes.FLAC:
|
||||||
if (FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR != null) {
|
if (FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR != null) {
|
||||||
try {
|
try {
|
||||||
extractors.add(FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR.newInstance());
|
extractors.add(FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR.newInstance());
|
||||||
@ -334,13 +320,13 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
extractors.add(new FlacExtractor(coreFlacFlags));
|
extractors.add(new FlacExtractor(coreFlacFlags));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_FLV:
|
case FileTypes.FLV:
|
||||||
extractors.add(new FlvExtractor());
|
extractors.add(new FlvExtractor());
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_MATROSKA:
|
case FileTypes.MATROSKA:
|
||||||
extractors.add(new MatroskaExtractor(matroskaFlags));
|
extractors.add(new MatroskaExtractor(matroskaFlags));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_MP3:
|
case FileTypes.MP3:
|
||||||
extractors.add(
|
extractors.add(
|
||||||
new Mp3Extractor(
|
new Mp3Extractor(
|
||||||
mp3Flags
|
mp3Flags
|
||||||
@ -348,20 +334,20 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
||||||
: 0)));
|
: 0)));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_MP4:
|
case FileTypes.MP4:
|
||||||
extractors.add(new FragmentedMp4Extractor(fragmentedMp4Flags));
|
extractors.add(new FragmentedMp4Extractor(fragmentedMp4Flags));
|
||||||
extractors.add(new Mp4Extractor(mp4Flags));
|
extractors.add(new Mp4Extractor(mp4Flags));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_OGG:
|
case FileTypes.OGG:
|
||||||
extractors.add(new OggExtractor());
|
extractors.add(new OggExtractor());
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_PS:
|
case FileTypes.PS:
|
||||||
extractors.add(new PsExtractor());
|
extractors.add(new PsExtractor());
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_TS:
|
case FileTypes.TS:
|
||||||
extractors.add(new TsExtractor(tsMode, tsFlags));
|
extractors.add(new TsExtractor(tsMode, tsFlags));
|
||||||
break;
|
break;
|
||||||
case FILE_FORMAT_WAV:
|
case FileTypes.WAV:
|
||||||
extractors.add(new WavExtractor());
|
extractors.add(new WavExtractor());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -15,14 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.source.hls;
|
package com.google.android.exoplayer2.source.hls;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_AC3;
|
import static com.google.android.exoplayer2.util.FileTypes.getFormatFromExtension;
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_AC4;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_ADTS;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP3;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP4;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_TS;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_WEBVTT;
|
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@ -39,7 +32,7 @@ import com.google.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory;
|
|||||||
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
|
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
|
||||||
import com.google.android.exoplayer2.metadata.Metadata;
|
import com.google.android.exoplayer2.metadata.Metadata;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import com.google.android.exoplayer2.util.FilenameUtil;
|
import com.google.android.exoplayer2.util.FileTypes;
|
||||||
import com.google.android.exoplayer2.util.MimeTypes;
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import com.google.android.exoplayer2.util.TimestampAdjuster;
|
import com.google.android.exoplayer2.util.TimestampAdjuster;
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
@ -195,21 +188,21 @@ public final class DefaultHlsExtractorFactory implements HlsExtractorFactory {
|
|||||||
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
|
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
|
||||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||||
}
|
}
|
||||||
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(uri);
|
@FileTypes.Type int fileFormat = getFormatFromExtension(uri);
|
||||||
switch (fileFormat) {
|
switch (fileFormat) {
|
||||||
case FILE_FORMAT_WEBVTT:
|
case FileTypes.WEBVTT:
|
||||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||||
case FILE_FORMAT_ADTS:
|
case FileTypes.ADTS:
|
||||||
return new AdtsExtractor();
|
return new AdtsExtractor();
|
||||||
case FILE_FORMAT_AC3:
|
case FileTypes.AC3:
|
||||||
return new Ac3Extractor();
|
return new Ac3Extractor();
|
||||||
case FILE_FORMAT_AC4:
|
case FileTypes.AC4:
|
||||||
return new Ac4Extractor();
|
return new Ac4Extractor();
|
||||||
case FILE_FORMAT_MP3:
|
case FileTypes.MP3:
|
||||||
return new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
|
return new Mp3Extractor(/* flags= */ 0, /* forcedFirstSampleTimestampUs= */ 0);
|
||||||
case FILE_FORMAT_MP4:
|
case FileTypes.MP4:
|
||||||
return createFragmentedMp4Extractor(timestampAdjuster, format, muxedCaptionFormats);
|
return createFragmentedMp4Extractor(timestampAdjuster, format, muxedCaptionFormats);
|
||||||
case FILE_FORMAT_TS:
|
case FileTypes.TS:
|
||||||
return createTsExtractor(
|
return createTsExtractor(
|
||||||
payloadReaderFactoryFlags,
|
payloadReaderFactoryFlags,
|
||||||
exposeCea608WhenMissingDeclarations,
|
exposeCea608WhenMissingDeclarations,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user