Merge pull request #270 from androidx/release-1.0.0

1.0.0
This commit is contained in:
tonihei 2023-03-22 09:49:31 +00:00 committed by GitHub
commit 95f9e8f8ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 106 additions and 43 deletions

View File

@ -5,18 +5,22 @@ body:
- type: markdown
attributes:
value: |
We can only process bug reports that are actionable. Unclear bug reports or reports with insufficient information may not get attention.
We can only process bug reports that are actionable. Unclear bug reports or reports with
insufficient information may not get attention.
Before filing a bug:
-------------------------
- Search existing issues, including issues that are closed: https://github.com/androidx/media/issues?q=is%3Aissue
- For ExoPlayer-related bugs, please also check the ExoPlayer tracker: https://github.com/google/ExoPlayer/issues?q=is%3Aissue
- Search existing issues, including issues that are closed:
https://github.com/androidx/media/issues?q=is%3Aissue
- For ExoPlayer-related bugs, please also check for existing issues on the ExoPlayer
tracker: https://github.com/google/ExoPlayer/issues?q=is%3Aissue
- type: dropdown
attributes:
label: Media3 Version
description: What version of Media3 are you using?
options:
- 1.0.0
- 1.0.0-rc02
- 1.0.0-rc01
- 1.0.0-beta03

View File

@ -10,11 +10,12 @@ Before filing a feature request:
-----------------------
- Search existing open issues, specifically with the label enhancement:
https://github.com/androidx/media/labels/enhancement
- For ExoPlayer-related feature requests, please also check the ExoPlayer
tracker:
- For ExoPlayer-related feature requests, please also check for existing feature
requests on the ExoPlayer tracker:
https://github.com/google/ExoPlayer/labels/enhancement
- Search existing pull requests: https://github.com/androidx/media/pulls,
https://github.com/google/ExoPlayer/pulls
- Search existing pull requests:
- On this tracker: https://github.com/androidx/media/pulls,
- On the ExoPlayer tracker: https://github.com/google/ExoPlayer/pulls
When filing a feature request:
-----------------------

View File

@ -15,7 +15,8 @@ Before filing a question:
- Ask general Android development questions on Stack Overflow
- Search existing issues, including issues that are closed
https://github.com/androidx/media/issues?q=is%3Aissue
- For ExoPlayer-related questions, please also check the ExoPlayer tracker:
- For ExoPlayer-related questions, please also check for existing questions on
the ExoPlayer tracker:
https://github.com/google/ExoPlayer/issues?q=is%3Aissue
When filing a question:

View File

@ -5,12 +5,10 @@
We use the [AndroidX Media issue tracker][] to track bugs, feature requests and
questions.
We are still handling ExoPlayer issues on the [ExoPlayer GitHub issue tracker][]
while the ExoPlayer and AndroidX Media projects coexist.
Before filing a new issue, please search the trackers to check if it's already
covered by an existing report. Avoiding duplicates helps us maximize the time we
can spend fixing bugs and adding new features.
can spend fixing bugs and adding new features. You will also find older issues
on our [ExoPlayer GitHub issue tracker][].
When filing an issue, be sure to provide enough information for us to
efficiently diagnose and reproduce the problem. In particular, please include

View File

@ -3,18 +3,27 @@
AndroidX Media is a collection of libraries for implementing media use cases on
Android, including local playback (via ExoPlayer) and media sessions.
## Current status
## Documentation
AndroidX Media is currently in release candidate and we welcome your feedback
via the [issue tracker][]. Please consult the [release notes][] for more details
about the current release.
* The [developer guide][] provides a wealth of information.
* The [class reference][] documents the classes and methods.
* The [release notes][] document the major changes in each release.
* Follow our [developer blog][] to keep up to date with the latest
developments!
ExoPlayer's new home will be in AndroidX Media, but for now we are publishing it
both in AndroidX Media and via the existing [ExoPlayer project][] and we are
still handling ExoPlayer issues on the [ExoPlayer issue tracker][].
[developer guide]: https://developer.android.com/guide/topics/media/media3
[class reference]: https://developer.android.com/reference/androidx/media3/common/package-summary
[release notes]: RELEASENOTES.md
[developer blog]: https://medium.com/google-exoplayer
You'll find some [Media3 documentation on developer.android.com][], including a
[migration guide for existing ExoPlayer and MediaSession users][].
## Migration for existing ExoPlayer and MediaSession projects
You'll find a [migration guide for existing ExoPlayer and MediaSession users][]
on developer.android.com.
[migration guide for existing ExoPlayer and MediaSession users]: https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide
## API stability
AndroidX Media releases provide API stability guarantees, ensuring that the API
surface remains backwards compatible for the most commonly used APIs. APIs
@ -22,17 +31,7 @@ intended for more advanced use cases are marked as unstable. To use an unstable
method or class without lint warnings, youll need to add the OptIn annotation
before using it. For more information see the [UnstableApi][] documentation.
For a high level overview of the initial version of AndroidX Media please see
the Android Dev Summit talk [What's next for AndroidX Media and ExoPlayer][].
[release notes]: RELEASENOTES.md
[issue tracker]: https://github.com/androidx/media/issues/new
[ExoPlayer project]: https://github.com/google/ExoPlayer
[ExoPlayer issue tracker]: https://github.com/google/ExoPlayer/issues
[UnstableApi]: https://github.com/androidx/media/blob/main/libraries/common/src/main/java/androidx/media3/common/util/UnstableApi.java
[What's next for AndroidX Media and ExoPlayer]: https://youtu.be/sTIBDcyCmCg
[Media3 documentation on developer.android.com]: https://developer.android.com/guide/topics/media/media3
[migration guide for existing ExoPlayer and MediaSession users]: https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide
## Using the libraries

View File

@ -1,5 +1,12 @@
# Release notes
### 1.0.0 (2023-03-22)
This release corresponds to the
[ExoPlayer 2.18.5 release](https://github.com/google/ExoPlayer/releases/tag/r2.18.5).
There are no changes since 1.0.0-rc02.
### 1.0.0-rc02 (2023-03-02)
This release corresponds to the

View File

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
project.ext {
releaseVersion = '1.0.0-rc02'
releaseVersionCode = 1_000_000_2_02
releaseVersion = '1.0.0'
releaseVersionCode = 1_000_000_3_00
minSdkVersion = 16
appTargetSdkVersion = 33
// API version before restricting local file access.

View File

@ -29,11 +29,11 @@ public final class MediaLibraryInfo {
/** The version of the library expressed as a string, for example "1.2.3" or "1.2.3-beta01". */
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION_INT) or vice versa.
public static final String VERSION = "1.0.0-rc02";
public static final String VERSION = "1.0.0";
/** The version of the library expressed as {@code TAG + "/" + VERSION}. */
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa.
public static final String VERSION_SLASHY = "AndroidXMedia3/1.0.0-rc02";
public static final String VERSION_SLASHY = "AndroidXMedia3/1.0.0";
/**
* The version of the library expressed as an integer, for example 1002003300.
@ -47,7 +47,7 @@ public final class MediaLibraryInfo {
* (123-045-006-3-00).
*/
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa.
public static final int VERSION_INT = 1_000_000_2_02;
public static final int VERSION_INT = 1_000_000_3_00;
/** Whether the library was compiled with {@link Assertions} checks enabled. */
public static final boolean ASSERTIONS_ENABLED = true;

View File

@ -813,6 +813,7 @@ public abstract class Timeline implements Bundleable {
* adGroupIndex}, or {@link AdPlaybackState#AD_STATE_UNAVAILABLE} if not yet known.
*
* @param adGroupIndex The ad group index.
* @param adIndexInAdGroup The index of the ad in the ad group.
* @return The state of the ad, or {@link AdPlaybackState#AD_STATE_UNAVAILABLE} if not yet
* known.
*/

View File

@ -297,6 +297,7 @@ public final class Tracks implements Bundleable {
* Returns true if at least one track of type {@code trackType} is {@link
* Group#isTrackSupported(int, boolean) supported}.
*
* @param trackType The track type to query support for.
* @param allowExceedsCapabilities Whether to consider the track as supported if it has a
* supported {@link Format#sampleMimeType MIME type}, but otherwise exceeds the advertised
* capabilities of the device. For example, a video track for which there's a corresponding

View File

@ -1555,6 +1555,7 @@ public final class Util {
* Returns the playout duration of {@code mediaDuration} of media.
*
* @param mediaDuration The duration to scale.
* @param speed The factor by which playback is sped up.
* @return The scaled duration, in the same units as {@code mediaDuration}.
*/
@UnstableApi

View File

@ -56,6 +56,7 @@ public final class DataSourceUtil {
* array containing the read data.
*
* @param dataSource The source from which to read.
* @param length The number of bytes to read.
* @return The read data.
* @throws IOException If an error occurs reading from the source.
* @throws IllegalStateException If the end of the source was reached before {@code length} bytes

View File

@ -148,6 +148,7 @@ public final class DefaultDataSource implements DataSource {
* Constructs a new instance, optionally configured to follow cross-protocol redirects.
*
* @param context A context.
* @param allowCrossProtocolRedirects Whether to allow cross-protocol redirects.
*/
@UnstableApi
public DefaultDataSource(Context context, boolean allowCrossProtocolRedirects) {

View File

@ -106,6 +106,8 @@ public class BitmapTestUtil {
/**
* Returns a solid {@link Bitmap} with every pixel having the same color.
*
* @param width The width of image to create, in pixels.
* @param height The height of image to create, in pixels.
* @param color An RGBA color created by {@link Color}.
*/
public static Bitmap createArgb8888BitmapWithSolidColor(int width, int height, int color) {

View File

@ -131,6 +131,8 @@ public final class ExoPlaybackException extends PlaybackException {
* Creates an instance of type {@link #TYPE_RENDERER}.
*
* @param cause The cause of the failure.
* @param rendererName The {@linkplain Renderer#getName() name} of the renderer in which the
* failure occurred.
* @param rendererIndex The index of the renderer in which the failure occurred.
* @param rendererFormat The {@link Format} the renderer was using at the time of the exception,
* or null if the renderer wasn't using a {@link Format}.

View File

@ -100,6 +100,7 @@ public final class OfflineLicenseHelper {
* their own license URL.
* @param forceDefaultLicenseUrl Whether to use {@code defaultLicenseUrl} for key requests that
* include their own license URL.
* @param dataSourceFactory A factory from which to obtain {@link DataSource} instances.
* @param optionalKeyRequestParameters An optional map of parameters to pass as the last argument
* to {@link MediaDrm#getKeyRequest}. May be null.
* @param eventDispatcher A {@link DrmSessionEventListener.EventDispatcher} used to distribute

View File

@ -362,6 +362,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
/**
* @param trackType The {@link C.TrackType track type} that the renderer handles.
* @param codecAdapterFactory A factory for {@link MediaCodecAdapter} instances.
* @param mediaCodecSelector A decoder selector.
* @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder
* initialization fails. This may result in using a decoder that is less efficient or slower

View File

@ -326,6 +326,7 @@ public abstract class SegmentDownloader<M extends FilterableManifest<M>> impleme
/**
* Loads and parses a manifest.
*
* @param dataSource The source to use when loading the manifest.
* @param dataSpec The manifest {@link DataSpec}.
* @param removing Whether the manifest is being loaded as part of the download being removed.
* @return The loaded manifest.

View File

@ -2446,6 +2446,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
* renderer, track group and track (in that order).
* @param rendererMixedMimeTypeAdaptationSupports The {@link AdaptiveSupport} for mixed MIME type
* adaptation for the renderer.
* @param params The parameters to use for the track selection.
* @return The {@link ExoTrackSelection.Definition}s for the renderers. A null entry indicates no
* selection was made.
* @throws ExoPlaybackException If an error occurs while selecting the tracks.

View File

@ -289,6 +289,7 @@ public abstract class MappingTrackSelector extends TrackSelector {
*
* @param rendererIndex The renderer index.
* @param groupIndex The index of the track group.
* @param trackIndices The indices of the tracks in the track group for which to query support.
* @return The {@link AdaptiveSupport}.
*/
public @AdaptiveSupport int getAdaptiveSupport(

View File

@ -68,12 +68,15 @@ public final class RandomTrackSelection extends BaseTrackSelection {
private int selectedIndex;
/**
* Creates a new instance.
*
* @param group The {@link TrackGroup}. Must not be null.
* @param tracks The indices of the selected tracks within the {@link TrackGroup}. Must not be
* null or empty. May be in any order.
* @param type The {@link Type} of this track selection.
* @param random A source of random numbers.
*/
public RandomTrackSelection(TrackGroup group, int[] tracks, int type, Random random) {
public RandomTrackSelection(TrackGroup group, int[] tracks, @Type int type, Random random) {
super(group, tracks, type);
this.random = random;
selectedIndex = random.nextInt(length);

View File

@ -651,6 +651,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
*
* <p>The default implementation does not allow decoder reuse.
*
* @param decoderName The name of the decoder.
* @param oldFormat The previous format.
* @param newFormat The new format.
* @return The result of the evaluation.

View File

@ -50,6 +50,8 @@ public interface DashChunkSource extends ChunkSource {
* if unknown.
* @param enableEventMessageTrack Whether to output an event message track.
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
* @param playerEmsgHandler The track output to write emsg messages to, or null if emsgs
* shouldn't be written.
* @param transferListener The transfer listener which should be informed of any data transfers.
* May be null if no listener is available.
* @param playerId The {@link PlayerId} of the player using this chunk source.
@ -75,8 +77,9 @@ public interface DashChunkSource extends ChunkSource {
* Updates the manifest.
*
* @param newManifest The new manifest.
* @param newPeriodIndex The index of the period covered by {@code newManifest}.
*/
void updateManifest(DashManifest newManifest, int periodIndex);
void updateManifest(DashManifest newManifest, int newPeriodIndex);
/**
* Updates the track selection.

View File

@ -104,13 +104,17 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsPlaylistTracker.Pla
* be null if no listener is available.
* @param drmSessionManager The {@link DrmSessionManager} to acquire {@link DrmSession
* DrmSessions} with.
* @param drmEventDispatcher A {@link DrmSessionEventListener.EventDispatcher} used to distribute
* DRM-related events.
* @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}.
* @param eventDispatcher A dispatcher to notify of events.
* @param allocator An {@link Allocator} from which to obtain media buffer allocations.
* @param compositeSequenceableLoaderFactory A factory to create composite {@link
* SequenceableLoader}s for when this media source loads data from multiple streams.
* @param allowChunklessPreparation Whether chunkless preparation is allowed.
* @param metadataType The type of metadata to extract from the period.
* @param useSessionKeys Whether to use #EXT-X-SESSION-KEY tags.
* @param playerId The ID of the current player.
*/
public HlsMediaPeriod(
HlsExtractorFactory extractorFactory,

View File

@ -462,16 +462,20 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
public final ServerControl serverControl;
/**
* Constructs an instance.
*
* @param playlistType See {@link #playlistType}.
* @param baseUri See {@link #baseUri}.
* @param tags See {@link #tags}.
* @param startOffsetUs See {@link #startOffsetUs}.
* @param preciseStart See {@link #preciseStart}.
* @param startTimeUs See {@link #startTimeUs}.
* @param hasDiscontinuitySequence See {@link #hasDiscontinuitySequence}.
* @param discontinuitySequence See {@link #discontinuitySequence}.
* @param mediaSequence See {@link #mediaSequence}.
* @param version See {@link #version}.
* @param targetDurationUs See {@link #targetDurationUs}.
* @param partTargetDurationUs See {@link #partTargetDurationUs}.
* @param hasIndependentSegments See {@link #hasIndependentSegments}.
* @param hasEndTag See {@link #hasEndTag}.
* @param hasProgramDateTime See {@link #hasProgramDateTime}.

View File

@ -132,6 +132,7 @@ public final class FlacFrameReader {
* there is no guarantee on the peek position.
*
* @param input Input stream to get the sample number from (starting from the read position).
* @param flacStreamMetadata The FLAC metadata of the stream.
* @return The frame first sample number.
* @throws ParserException If an error occurs parsing the sample number.
* @throws IOException If peeking from the input fails.

View File

@ -152,12 +152,13 @@ public final class WebvttCssStyle {
* <li>Universal selector matching scores 1.
* </ul>
*
* <p>See also <a href="https://www.w3.org/TR/CSS2/cascade.html">CSS Cascading</a>.
*
* @param id The id of the cue if present, {@code null} otherwise.
* @param tag Name of the tag, {@code null} if it refers to the entire cue.
* @param classes An array containing the classes the tag belongs to. Must not be null.
* @param voice Annotated voice if present, {@code null} otherwise.
* @return The score of the match, zero if there is no match.
* @see <a href="https://www.w3.org/TR/CSS2/cascade.html">CSS Cascading</a>
*/
public int getSpecificityScore(
@Nullable String id, @Nullable String tag, Set<String> classes, @Nullable String voice) {

View File

@ -905,13 +905,14 @@ public class MediaController implements Player {
/**
* Sends a custom command to the session.
*
* <p>A command is not accepted if it is not a custom command or the command is not in the list of
* {@linkplain #getAvailableSessionCommands() available session commands}.
*
* <p>Interoperability: When connected to {@link
* android.support.v4.media.session.MediaSessionCompat}, {@link SessionResult#resultCode} will
* return the custom result code from the {@code android.os.ResultReceiver#onReceiveResult(int,
* Bundle)} instead of the standard result codes defined in the {@link SessionResult}.
*
* <p>A command is not accepted if it is not a custom command.
*
* @param command The custom command.
* @param args The additional arguments. May be empty.
* @return A {@link ListenableFuture} of {@link SessionResult} representing the pending

View File

@ -816,6 +816,7 @@ public class MediaSession {
*
* <p>A command is not accepted if it is not a custom command.
*
* @param controller The controller to send the custom command to.
* @param command A custom command.
* @param args A {@link Bundle} for additional arguments. May be empty.
* @return A {@link ListenableFuture} of {@link SessionResult} from the controller.
@ -1041,6 +1042,10 @@ public class MediaSession {
* Called when a controller sent a custom command through {@link
* MediaController#sendCustomCommand(SessionCommand, Bundle)}.
*
* <p>{@link MediaController} instances are only allowed to send a command if the command has
* been added to the {@link MediaSession.ConnectionResult#availableSessionCommands list of
* available session commands} in {@link #onConnect} or set via {@link #setAvailableCommands}.
*
* <p>Interoperability: This will be also called by {@link
* android.support.v4.media.MediaBrowserCompat#sendCustomAction}. If so, {@code extras} from
* {@link android.support.v4.media.MediaBrowserCompat#sendCustomAction} will be considered as

View File

@ -1098,7 +1098,10 @@ public abstract class Action {
private final Runnable runnable;
/**
* Constructs an instance.
*
* @param tag A tag to use for logging.
* @param runnable The runnable to run.
*/
public ExecuteRunnable(@Size(max = 23) String tag, Runnable runnable) {
super(tag, "ExecuteRunnable");

View File

@ -349,7 +349,7 @@ public final class ActionSchedule {
}
/**
* Schedules a set media items action to be executed.
* Schedules a set media source actions to be executed.
*
* @param mediaItemIndex The media item index to start playback from or {@link C#INDEX_UNSET} if
* the playback position should not be reset.
@ -357,6 +357,7 @@ public final class ActionSchedule {
* C#TIME_UNSET} is passed the default position is used. In any case, if {@code
* mediaItemIndex} is set to {@link C#INDEX_UNSET} the position is not reset at all and this
* parameter is ignored.
* @param sources The media sources to be set on the player.
* @return The builder, for convenience.
*/
@CanIgnoreReturnValue
@ -365,9 +366,10 @@ public final class ActionSchedule {
}
/**
* Schedules a set media items action to be executed.
* Schedules a set media sources action to be executed.
*
* @param resetPosition Whether the playback position should be reset.
* @param sources The media sources to be set on the player.
* @return The builder, for convenience.
*/
@CanIgnoreReturnValue
@ -490,6 +492,7 @@ public final class ActionSchedule {
/**
* Schedules sending a {@link PlayerMessage}.
*
* @param target A message target.
* @param positionMs The position in the current media item at which the message should be sent,
* in milliseconds.
* @return The builder, for convenience.

View File

@ -360,6 +360,9 @@ public final class ExtractorAsserts {
*
* <p>The output of the extractor is compared against prerecorded dump files.
*
* @param factory An {@link ExtractorFactory} which creates instances of the {@link Extractor}
* class which is to be tested.
* @param file The input file to pass to the extractor.
* @param assertionConfig Details of how to read and process the source and dump files.
* @param simulationConfig Details on the environment to simulate and behaviours to assert.
* @throws IOException If reading from the input fails.

View File

@ -375,6 +375,7 @@ public class FakeMediaPeriod implements MediaPeriod {
/**
* Creates a new {@link FakeSampleStream}.
*
* @param allocator An {@link Allocator} from which to obtain media buffer allocations.
* @param mediaSourceEventDispatcher A {@link MediaSourceEventListener.EventDispatcher} to notify
* of media events.
* @param drmSessionManager A {@link DrmSessionManager} for DRM interactions.

View File

@ -339,6 +339,7 @@ public class FakeMediaSource extends BaseMediaSource {
* @param allocator An {@link Allocator} from which to obtain media buffer allocations.
* @param mediaSourceEventDispatcher An {@link MediaSourceEventListener.EventDispatcher} to
* dispatch media source events.
* @param drmSessionManager A {@link DrmSessionManager} to allow DRM interactions.
* @param drmEventDispatcher An {@link MediaSourceEventListener.EventDispatcher} to dispatch DRM
* events.
* @param transferListener The transfer listener which should be informed of any data transfers.

View File

@ -393,6 +393,7 @@ public final class FakeTimeline extends Timeline {
/**
* Creates a fake timeline with the given window definitions.
*
* @param manifests The manifests of the windows.
* @param windowDefinitions A list of {@link TimelineWindowDefinition}s.
*/
public FakeTimeline(Object[] manifests, TimelineWindowDefinition... windowDefinitions) {
@ -403,6 +404,8 @@ public final class FakeTimeline extends Timeline {
* Creates a fake timeline with the given window definitions and {@link
* androidx.media3.exoplayer.source.ShuffleOrder}.
*
* @param manifests The manifests of the windows.
* @param shuffleOrder A shuffle ordering for the windows.
* @param windowDefinitions A list of {@link TimelineWindowDefinition}s.
*/
public FakeTimeline(

View File

@ -152,6 +152,7 @@ public class MediaSourceTestRunner {
* playback thread, asserting that a non-null {@link MediaPeriod} is returned.
*
* @param periodId The id of the period to create.
* @param startPositionUs The expected start position, in microseconds.
* @return The created {@link MediaPeriod}.
*/
public MediaPeriod createPeriod(final MediaPeriodId periodId, long startPositionUs) {

View File

@ -50,6 +50,7 @@ public final class TimelineAsserts {
/**
* Asserts that window tags are set correctly.
*
* @param timeline The timeline to read actual window tags from.
* @param expectedWindowTags A list of expected window tags. If a tag is unknown or not important
* {@code null} can be passed to skip this window.
*/