mirror of
https://github.com/androidx/media.git
synced 2025-05-04 22:20:47 +08:00
Merge remote-tracking branch 'upstream/dev-v2' into dev-v2
This commit is contained in:
commit
1b2157360a
@ -7,25 +7,29 @@
|
||||
* Data sources:
|
||||
* Add support for `android.resource` URI scheme in `RawResourceDataSource`
|
||||
([#7866](https://github.com/google/ExoPlayer/issues/7866)).
|
||||
* Core library:
|
||||
* Suppress Guava-related ProGuard/R8 warnings
|
||||
([#7904](https://github.com/google/ExoPlayer/issues/7904)).
|
||||
* Text:
|
||||
* Add support for `\h` SSA/ASS style override code (non-breaking space).
|
||||
|
||||
### 2.12.0 (2020-09-11) ###
|
||||
|
||||
To learn more about what's new in 2.12, read the corresponding
|
||||
[blog post](https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7).
|
||||
|
||||
* Core library:
|
||||
* `Player`:
|
||||
* Add a top level playlist API based on a new `MediaItem` class
|
||||
([#6161](https://github.com/google/ExoPlayer/issues/6161)). The
|
||||
new methods for playlist manipulation are `setMediaItem(s)`,
|
||||
([#6161](https://github.com/google/ExoPlayer/issues/6161)). The new
|
||||
methods for playlist manipulation are `setMediaItem(s)`,
|
||||
`addMediaItem(s)`, `moveMediaItem(s)`, `removeMediaItem(s)` and
|
||||
`clearMediaItems`. The playlist can be queried using
|
||||
`getMediaItemCount` and `getMediaItemAt`. This API should be used
|
||||
instead of `ConcatenatingMediaSource` in most cases.
|
||||
* Add `getCurrentMediaItem` for getting the currently playing item
|
||||
in the playlist.
|
||||
* Add `EventListener.onMediaItemTransition` to report when
|
||||
playback transitions from one item to another in the playlist.
|
||||
instead of `ConcatenatingMediaSource` in most cases. Learn more by
|
||||
reading
|
||||
[this blog post](https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55).
|
||||
* Add `getCurrentMediaItem` for getting the currently playing item in
|
||||
the playlist.
|
||||
* Add `EventListener.onMediaItemTransition` to report when playback
|
||||
transitions from one item to another in the playlist.
|
||||
* Add `play` and `pause` convenience methods. They are equivalent to
|
||||
`setPlayWhenReady(true)` and `setPlayWhenReady(false)` respectively.
|
||||
* Add `getCurrentLiveOffset` for getting the offset of the current
|
||||
@ -34,6 +38,11 @@
|
||||
player.
|
||||
* Add `AudioComponent.setAudioSessionId` to set the audio session ID.
|
||||
This method is also available on `SimpleExoPlayer`.
|
||||
* Remove `PlaybackParameters.skipSilence`, and replace it with
|
||||
`AudioComponent.setSkipSilenceEnabled`. This method is also
|
||||
available on `SimpleExoPlayer`. An
|
||||
`AudioListener.onSkipSilenceEnabledChanged` callback is also
|
||||
added.
|
||||
* Add `TextComponent.getCurrentCues` to get the current cues. This
|
||||
method is also available on `SimpleExoPlayer`. The current cues are
|
||||
no longer automatically forwarded to a `TextOutput` when it's added
|
||||
@ -87,8 +96,8 @@
|
||||
([#7309](https://github.com/google/ExoPlayer/issues/7309)).
|
||||
`LoadErrorHandlingPolicy` implementations should migrate to implementing
|
||||
the non-deprecated methods of the interface.
|
||||
* Add an option to `MergingMediaSource` to adjust the time offsets
|
||||
between the merged sources
|
||||
* Add an option to `MergingMediaSource` to adjust the time offsets between
|
||||
the merged sources
|
||||
([#6103](https://github.com/google/ExoPlayer/issues/6103)).
|
||||
* Move `MediaSourceEventListener.LoadEventInfo` and
|
||||
`MediaSourceEventListener.MediaLoadData` to be top-level classes in
|
||||
@ -98,11 +107,10 @@
|
||||
generalize them to work with `Decoder` rather than `SimpleDecoder`.
|
||||
* Deprecate `C.MSG_*` constants, replacing them with constants in
|
||||
`Renderer`.
|
||||
* Split the `library-core` module into `library-core`,
|
||||
`library-common` and `library-extractor`. The `library-core` module
|
||||
has an API dependency on both of the new modules, so this change
|
||||
should be transparent to developers including ExoPlayer using Gradle
|
||||
dependencies.
|
||||
* Split the `library-core` module into `library-core`, `library-common`
|
||||
and `library-extractor`. The `library-core` module has an API dependency
|
||||
on both of the new modules, so this change should be transparent to
|
||||
developers including ExoPlayer using Gradle dependencies.
|
||||
* Add a dependency on Guava.
|
||||
* Video:
|
||||
* Pass frame rate hint to `Surface.setFrameRate` on Android 11.
|
||||
@ -142,6 +150,10 @@
|
||||
the `AudioCapabilities`
|
||||
([#7404](https://github.com/google/ExoPlayer/issues/7404)).
|
||||
* Text:
|
||||
* Many of the changes described below improve support for Japanese
|
||||
subtitles. Read
|
||||
[this blog post](https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4)
|
||||
to learn more.
|
||||
* Add a WebView-based output option to `SubtitleView`. This can display
|
||||
some features not supported by the existing Canvas-based output such as
|
||||
vertical text and rubies. It can be enabled by calling
|
||||
@ -304,8 +316,8 @@
|
||||
* Analytics:
|
||||
* Extend `EventTime` with more details about the current player state
|
||||
([#7332](https://github.com/google/ExoPlayer/issues/7332)).
|
||||
* Add `AnalyticsListener.onVideoFrameProcessingOffset` to report how
|
||||
early or late video frames are processed relative to them needing to be
|
||||
* Add `AnalyticsListener.onVideoFrameProcessingOffset` to report how early
|
||||
or late video frames are processed relative to them needing to be
|
||||
presented. Video frame processing offset fields are also added to
|
||||
`DecoderCounters`.
|
||||
* Fix incorrect `MediaPeriodId` for some renderer errors reported by
|
||||
@ -315,7 +327,9 @@
|
||||
* Test utils: Add `TestExoPlayer`, a utility class with APIs to create
|
||||
`SimpleExoPlayer` instances with fake components for testing.
|
||||
* Media2 extension: This is a new extension that makes it easy to use
|
||||
ExoPlayer together with AndroidX Media2.
|
||||
ExoPlayer together with AndroidX Media2. Read
|
||||
[this blog post](https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063)
|
||||
to learn more.
|
||||
* Cast extension: Implement playlist API and deprecate the old queue
|
||||
manipulation API.
|
||||
* IMA extension:
|
||||
@ -345,11 +359,11 @@
|
||||
* Add `clip_start_position_ms` and `clip_end_position_ms` to allow
|
||||
clipped samples.
|
||||
* Use `StyledPlayerControlView` rather than `PlayerView`.
|
||||
* Remove support for media tunneling, random ABR and playback of
|
||||
spherical video. Developers wishing to experiment with these features
|
||||
can enable them by modifying the demo app source code.
|
||||
* Add support for downloading DRM-protected content using offline
|
||||
Widevine licenses.
|
||||
* Remove support for media tunneling, random ABR and playback of spherical
|
||||
video. Developers wishing to experiment with these features can enable
|
||||
them by modifying the demo app source code.
|
||||
* Add support for downloading DRM-protected content using offline Widevine
|
||||
licenses.
|
||||
|
||||
### 2.11.8 (2020-08-25) ###
|
||||
|
||||
|
@ -28,6 +28,7 @@ import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Pair;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import com.google.android.exoplayer2.C;
|
||||
@ -1694,6 +1695,16 @@ public final class DefaultAudioSink implements AudioSink {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTearDown(@NonNull AudioTrack track) {
|
||||
if (listener != null && playing) {
|
||||
// A new Audio Track needs to be created and it's buffer filled, which will be done on the
|
||||
// next handleBuffer call.
|
||||
// Request this call explicitly in case ExoPlayer is sleeping waiting for a data request.
|
||||
listener.onOffloadBufferEmptying();
|
||||
}
|
||||
}
|
||||
|
||||
public void register(AudioTrack audioTrack) {
|
||||
audioTrack.registerStreamEventCallback(handler::post, this);
|
||||
}
|
||||
|
@ -263,8 +263,9 @@ public final class SsaDecoder extends SimpleSubtitleDecoder {
|
||||
SsaStyle.Overrides styleOverrides = SsaStyle.Overrides.parseFromDialogue(rawText);
|
||||
String text =
|
||||
SsaStyle.Overrides.stripStyleOverrides(rawText)
|
||||
.replaceAll("\\\\N", "\n")
|
||||
.replaceAll("\\\\n", "\n");
|
||||
.replace("\\N", "\n")
|
||||
.replace("\\n", "\n")
|
||||
.replace("\\h", "\u00A0");
|
||||
Cue cue = createCue(text, style, styleOverrides, screenWidth, screenHeight);
|
||||
|
||||
int startTimeIndex = addCuePlacerholderByTime(startTimeUs, cueTimesUs, cues);
|
||||
|
@ -31,11 +31,9 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
|
||||
/** Tests for {@link MetadataRetriever}. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LooperMode(LooperMode.Mode.PAUSED)
|
||||
public class MetadataRetrieverTest {
|
||||
|
||||
@Test
|
||||
@ -100,7 +98,9 @@ public class MetadataRetrieverTest {
|
||||
ListenableFuture<TrackGroupArray> trackGroupsFuture)
|
||||
throws InterruptedException, ExecutionException {
|
||||
while (!trackGroupsFuture.isDone()) {
|
||||
// Simulate advancing SystemClock so that delayed messages sent to handlers are received.
|
||||
// TODO: update once [Internal: b/168084145] is implemented.
|
||||
// Advance SystemClock so that messages that are sent with a delay to the MetadataRetriever
|
||||
// looper are received.
|
||||
SystemClock.setCurrentTimeMillis(SystemClock.uptimeMillis() + 100);
|
||||
Thread.sleep(/* millis= */ 100);
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ public class DumpFileAsserts {
|
||||
} else {
|
||||
File file =
|
||||
DUMP_FILE_ACTION == WRITE_TO_LOCAL
|
||||
? new File(StandardSystemProperty.USER_DIR.value(), "../../testdata/src/test")
|
||||
? new File(StandardSystemProperty.USER_DIR.value(), "../../testdata/src/test/assets")
|
||||
: context.getExternalFilesDir(null);
|
||||
file = new File(file, dumpFile);
|
||||
Assertions.checkStateNotNull(file.getParentFile()).mkdirs();
|
||||
|
Loading…
x
Reference in New Issue
Block a user