Until now, the streams were released and re-enabled for each type of stream
(primary, event, embedded) in that order. That leads to problems when replacing
streams from one type to another (for example embedded to primary).
This change restructures the track selection to:
1. Release and reset all streams that need to be released or replaced.
1(a). Including embedded orphan streams.
2. Select new streams.
Issue:#4477
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203751233
Where a device has this issue, it most likely applies to all
SOC vendor provided decoders, which are normally the only
video decoders other than the OMX.google software decoders
on the device. The fact we currently only blacklist for AVC
decoders is likely just a side effect of AVC's popularity.
I checked two devices already on the blacklist, and both
failed with other SOC vendor decoders on the device as well
(but passed if forced to use OMX.google decoders instead)
Issue: #4468
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203728285
Viewport constraints apply to adaptive content even if the
actual playback isn't adaptive (i.e. because the selector
ends up making a fixed track selection).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203726831
- Support handling frame queries (i.e get frames at times, output to certain
sizes) from MetadataRetriever.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203489788
If there is only one track, we can assume that both boxes refer to the same track
even if the track indices don't match.
Issue:#4083
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203485872
MediaDrm.provideXResponse methods only accept the response
corresponding to the most recent MediaDrm.getXRequest call.
Previously, our code allowed the following incorrect call
sequence:
a = getKeyRequest
b = getKeyRequest
provideKeyResponse(responseFor(a));
This would occur in the edge case of a second key request
being triggered whilst the first was still in flight. The
provideKeyResponse call would then fail.
This change fixes the problem by treating responseFor(a)
as stale. Note that a slightly better fix would be to
defer calling getKeyRequest the second time until after
processing the response corresponding to the first one,
however this is significantly harder to implement, and is
probably not worth it for what should be an edge case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203481685
Both boxes should contain the same list of track indices. However, if only one
track index in each list does not match, we can just assume that these belong
together.
Issue:#4477
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203481258
Since this is an ongoing problem, it's reasonable that we allow
developers to toggle these workarounds without too much hassle.
Issue: #4468
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203364488
This allows to register a listener on an outer wrapping data source which
receives data transfer events from the wrapped source.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203358981
This wires up recent changes of passing a transfer listener to the MediaSource and
allowing DataSources to accept new listeners.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203280818
Add supports for reading duration for a TS stream by reading PCR values of the PCR PID packets at the start and at the end of the stream, calculating the difference, and converting that into stream duration.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203254626
Codec initialization may fail in creation, configuration or when start()ing the
codec. If codec initialization fails, there may be other codecs available that
could handle the same format, but currently ExoPlayer can only try to use the
first listed codec for the input format and gives up if it fails to initialize.
This change implements support for optionally falling back to alternative
decoders if initialization fails. MediaCodecSelector can now return a list of
decoders to try in priority order, and use the Format when choosing a codec.
With the default implementation, the codecs and order come from MediaCodecList,
and matches the order used internally by MediaCodec.createDecoderByType (which
implements the same kind of fallback though only to the creation step, without
configuring/starting the codec).
This feature is useful for apps that want to play several videos concurrently on
devices that have software decoders (like OMX.google.h264.decoder), as the new
behavior allows new codecs to be created when no hardware-accelerated decoders
are available.
The list of available codecs is queried when initializing the codec after a
format change that requires a new codec to be instantiated. When a decoder fails
to initialize it is removed from the list of available decoders and won't be
tried again until the next format change (or until the renderer is disabled).
Note: this change does not affect the renderer capabilities API, as when
checking format support we don't know which codec will be used.
Issue: #273
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203242285
This ensures compatiblity of other apps depending on our public GitHub code.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203129076
This allows to iterate through the available chunks of the stream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203105813
This allows implementations to notify when the transfer is about to be started.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203102117
This allows all leaf data sources (i.e. ones which do not forward the requests
to other data sources) to accept multiple listeners.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203097587
This allows to use this queue in the track selection in the future.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202954871
This will allow to provide available information about future chunks to the
track selection.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202940994
The Android Test Support Library is being renamed to AndroidX Test, with its root java namespace changing from android.support.test to androidx.test.
And code location changing from tp/android/android_test_support to tp/android/androidx_test.
More information: []
TAP global presubmit: []
BUG:
79205333
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202796842
The new method allows to add transfer listeners (e.g. the BandwidthMeter) after
the data source has been created. To simplify the implementation for
subclasses, this change also introduces a BaseDataSource which handles
the list of listeners and the listener registration.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202649563
In the future, this allows to register the BandwidthMeter (managed by the player)
as a listener to all media transfers related to this media source.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202643946
- Extract ConstantBitrateSeeker from Mp3 package into a more general
ConstantBitrateSeekMap.
- Use this seekmap to implement seeking for AMR format.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202638183
From the spec:
If the EXT-X-INDEPENDENT-SEGMENTS tag appears in a Master
Playlist, it applies to every Media Segment in every Media
Playlist in the Master Playlist.
----
This requires propagation of attributes from the master
playlist to the media playlists. This CL only includes
independent segments, but other inheritable attributes
will be supported in following changes. Other inheritable
attributes include variable substitution definitions and
session keys.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202628422
- Make it looks more natural to have MetadataRetrieverTestRunner in the same
package as ExoPlayerTestRunner.
- Change moe_config script to remove the file MetadataRetrieverTestRunner,
instead of the folder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202626238
It's quite hard to find the defaults currently. Placing them
on each variable makes them easier to find.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202495929
Currently, we are discarding all TS PES payload readers on seek. This is to fix
a bug that makes PES stream readers read packets inconsistently after seeking (first
time, the readers ignore all packets before PMT, second seek time after PMT is
read, the readers will read all packets before PMT).
This works fine if we don't support seeking to arbitrary position within the TS
stream. However, this may lead to a problem if we want to support seeking, because
some TS streams only have track format at the begining of the stream, and reseting
the payload readers after seeking can lead to track format not available anymore.
This change reverts the original fix (do not discard TS PES payload readers on seek
anymore). Instead, in non-HLS mode, after we have processed all PMTs packets in
the strea, we will re-seek to the beginning and perform readin again to make sure
the result will be consistent across multiple seeks. This is a prepare step to
support seeking in TS streams.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202466233
This url is readily available when creating media source events (from the
data source) but so far not published to external listeners. This change
adds a new field to LoadEventInfo which corresponds to DataSource.getUri().
Issue:#2054
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202459049
Currently we immediately stop searching after we found one video and one
audio track. This change adds some leeway to detect additional tracks.
Issue:#4406
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202455491
Add methods setCustomErrorMessage(@Nullable CharSequence message)
and setCustomErrorMessage(@Nullable CharSequence message, int code)
to MediaSessionConnector to report errors to the MediaSession
which are not player errors.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202352083
Original change by nickchavez@nickchavez:andcsvol:3257:citc on 2018/06/19 12:41:18.
Add VolumeProvider interface to VideoAdPlayer and VideoStreamPlayer.
- Send volume on videoDisplay.start so that it can be sent to OMID.
- Add unit tests for AdPlayerCalback and ExoPlayerVideoAdPlayerImpl.
- Add functional tests for client side and DAI volume updates.
Add onVolumeChanged() to VideoAdPlayerCallback and VideoStreamPlayerCallback.
- Implement volume updates for SDK owned video player.
- Remove mute/unmute events, which are handled in JS instead (like iOS).
- Collect volume changes from client side and DAI video players.
External: Publisher players will now have to implement getVolume() and onVolumeChanged() for custom video players.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202324636