6905 Commits

Author SHA1 Message Date
Oliver Woodman
51ed8ead6d Merge pull request #6303 from ittiam-systems:rtmp-3.1.0
PiperOrigin-RevId: 266407058
2019-09-01 22:02:38 +01:00
olly
d720d2c3f6 Simplify androidTest manifests & fix links to use https
PiperOrigin-RevId: 266396506
2019-09-01 22:02:17 +01:00
christosts
967abdf0f5 Use DataSpec request params in DefaultHttpDataSource
DefaultHttpDataSource.open() also includes the request parameters that
are inside the DataSpec.

PiperOrigin-RevId: 266350573
2019-08-30 14:42:22 +01:00
aquilescanta
9508146840 Introduce LoadErrorHandling policy in DefaultDrmSession
This is a no-op interim change to introduce key request error
handling customization. Following changes will allow users to
inject their own LoadErrorHandlingPolicy implementations.

Issue:#6334
PiperOrigin-RevId: 266344399
2019-08-30 14:42:22 +01:00
kimvde
48555550d7 Surface MediaCodecInfo methods added in Android Q
- Surface information provided by methods isHardwareAccelerated,
  isSoftwareOnly and isVendor added in Android Q in MediaCodecInfo
  class.
- Estimate this information based on the codec name for earlier API
  levels.

Issue:#5839
PiperOrigin-RevId: 266334850
2019-08-30 14:42:22 +01:00
olly
f5c1e8b5e3 Add HttpDataSource.getResponseCode to provide the status code associated with the most recent HTTP response.
PiperOrigin-RevId: 266218104
2019-08-30 14:42:21 +01:00
olly
2451211294 Tweak TrackSelectionDialog
PiperOrigin-RevId: 266216274
2019-08-30 14:41:52 +01:00
andrewlewis
1b3cb639b3 Signal when supplemental data is present for vp9
PiperOrigin-RevId: 266085854
2019-08-30 14:36:25 +01:00
olly
0a0ab8d5e7 Avoid infinite recursion if cache file modified underneath cache
This generalizes our "does file still exist" check to also check
that the file is the expected length. If it's not, we don't trust
it. This avoids infinite recursion in CacheDataSource if a cache
file is truncated underneath the cache.

Issue: #6165
PiperOrigin-RevId: 265707928
2019-08-30 14:36:06 +01:00
olly
aa6ead3d08 seenCacheError should be set for all errors
PiperOrigin-RevId: 265662686
2019-08-30 14:35:47 +01:00
tonihei
9ca5b0fc61 Add back deprecated getWindow to ForwardingTimeline.
Implementations of ForwardingTimeline may override any of the two variants of
this method. We need to ensure that the customized override is always called.

Add back the deprecated method and make it final to forward to the
non-deprecated method in all cases for ForwardingTimelines.

PiperOrigin-RevId: 265419830
2019-08-30 14:35:27 +01:00
christosts
ce37b7eea2 Add HTTP request parameters (headers) to DataSpec.
Adds HTTP request parameters in DataSpec. Keeps DataSpec behavior to be immutable as before.

PiperOrigin-RevId: 265087782
2019-08-30 14:35:07 +01:00
tonihei
d1084f2728 Do not compare bitrates of audio tracks with different languages.
The last selection criteria is the audio bitrate to prefer higher-quality
streams. We shouldn't apply this criterium though if the languages of the
tracks are different.

Issue:#6335
PiperOrigin-RevId: 265064756
2019-08-23 17:04:16 +01:00
andrewlewis
34cc5f4cb8 Defer adsManager.init until the timeline has loaded
If the app seeks after we get an ads manager but before the player exposes the
timeline with ads, we would end up expecting to play a preroll even after the
seek request arrived. This caused the player to get stuck.

Wait until a non-empty timeline has been exposed via onTimelineChanged before
initializing IMA (at which point it can start polling the player position). Seek
requests are not handled while an ad is playing.

PiperOrigin-RevId: 265058325
2019-08-23 17:04:01 +01:00
sofijajvc
75f744ae40 Fix VpxDecoder error codes to match the ones in vpx_jni.cc
PiperOrigin-RevId: 265018783
2019-08-23 17:03:45 +01:00
andrewlewis
aae64151e0 Add @CallSuper annotations in SimpleDecoder
The implementation can't work properly unless these methods are called by
subclasses, so annotate them to require calling the super implementation when
overriding.

PiperOrigin-RevId: 265017433
2019-08-23 17:03:28 +01:00
tonihei
29af6899fe Move playback error into PlaybackInfo.
The error is closely related to the playback state IDLE and should be updated
in sync with the state to prevent unexpected event ordering and/or keeping the
error after re-preparation.

Issue:#5407
PiperOrigin-RevId: 265014630
2019-08-23 17:03:12 +01:00
olly
7883eabb38 Update comment to indicate correct int value of "FLAG_ALLOW_CACHE_FRAGMENTATION" in ExoPlayer2 upstream DataSpec
Currently the value of FLAG_ALLOW_CACHE_FRAGMENTATION is defined as "1 << 4" but commented as "8". Either the value of FLAG_ALLOW_CACHE_FRAGMENTATION should be "1 << 3", or the comment should be 16. Here I am modifying the comment since it does not affect any current behavior.

PiperOrigin-RevId: 265011839
2019-08-23 17:02:57 +01:00
andrewlewis
6748eeca6a Avoid potential ArrayStoreException with audio processors
The app is able to pass a more specialized array type, so the Arrays.copyOf call
produces an array into which it's not valid to store arbitrary AudioProcessors.

Create a new array and copy into it to avoid this problem.

PiperOrigin-RevId: 264779164
2019-08-23 17:02:41 +01:00
tonihei
51476fa2c8 Prevent NPE in ImaAdsLoader onPositionDiscontinuity.
Any seek before the first timeline becomes available will result in a NPE.
Change it to handle that case gracefully.

Issue:#5831
PiperOrigin-RevId: 264603061
2019-08-23 17:02:26 +01:00
tonihei
6a1331f125 Gracefully handle chunkful preparation without chunks.
This situation happens if the first chunk to load is already behind the end
of the stream. In this case, the preparation never completes because
HlsSampleStreamWrapper gets stuck in a prepared=false and loadingFinished=true
state.

Gracefully handle this situation by attempting to load the last chunk if still
unprepared to ensure that track information is obtained as far as possible.
Otherwise, it wouldn't be possible to play anything even when seeking back.

Issue:#6314
PiperOrigin-RevId: 264599465
2019-08-23 17:02:10 +01:00
andrewlewis
f0aae7aee5 Support out-of-band HDR10+ metadata for VP9
Extract supplemental data from block additions in WebM/Matroska.

Allow storing supplemental data alongside samples in the SampleQueue and write
it as a separate field in DecoderInputBuffers.

Handle supplemental data in the VP9 extension by propagating it to the output
buffer.

Handle supplemental data for HDR10+ in MediaCodecVideoRenderer by passing it to
MediaCodec.setParameters, if supported by the component.

PiperOrigin-RevId: 264582805
2019-08-23 17:01:55 +01:00
andrewlewis
c361e3abc3 Fix handling of delayed AdsLoader.start
AdsMediaSource posts AdsLoader.start to the main thread during preparation, but
the app may call AdsLoader.setPlayer(null) before it actually runs (e.g., if
initializing then quickly backgrounding the player).

This is valid usage of the API so handle this case instead of asserting. Because
not calling setPlayer at all is a pitfall of the API, track whether setPlayer
has been called and still assert that in AdsLoader.start.

PiperOrigin-RevId: 264329632
2019-08-23 17:01:39 +01:00
tonihei
ebf8dc9973 Extend ExoPlayer builders with useLazyPreparations and AnalyticsCollector.
Both values are needed to set-up the ExoPlayer instances for playlists.

PiperOrigin-RevId: 264146052
2019-08-23 17:01:24 +01:00
ibaker
17d8e3728f Add support for the AOM scheme_id for ID3-in-EMSG
https://developer.apple.com/documentation/http_live_streaming/about_the_common_media_application_format_with_http_live_streaming

PiperOrigin-RevId: 264126140
2019-08-23 17:01:08 +01:00
tonihei
20fd4e16d2 Deprecate setTag parameter in Timeline.getWindow.
There is no point in having this parameter as the tag should always be a single
immutable object instantiated at the time the Timeline is created or earlier.

So there is no preformance benefit and it's error-prone in case people
forget to set setTag=true.

PiperOrigin-RevId: 264117041
2019-08-23 17:00:53 +01:00
tonihei
652c2f9c18 Advance playing period even if the next one isn't prepared yet.
This solves various issues around event association for buffering and
error throwing around period discontinuities.

The main changes are:
 - Logic around being "ready" at the end of a period no longer checks if the
   next period is prepared.
 - Advancing the playing period no longer checks if the next one is prepared.
 - Prepare errors are always thrown for the playing period.

This changes the semantics and assumptions about the "playing" period:
 1. The playing period can no longer assumed to be prepared.
 2. We no longer have a case where the queue is non-empty and the playing or
    reading periods are unassigned (=null).
Most other code changes ensure that these changed assumptions are handled.

Issue:#5407
PiperOrigin-RevId: 263776304
2019-08-23 17:00:37 +01:00
ibaker
14f77cb8b1 Unwrap SCTE-35 messages in emsg boxes
PiperOrigin-RevId: 263768428
2019-08-23 17:00:21 +01:00
ibaker
424f991079 Extend EventMessage.toString to include durationMs
This field is used in .equals(), so it makes sense to include it in toString() too.

PiperOrigin-RevId: 263768329
2019-08-23 17:00:06 +01:00
ibaker
01f484cbe9 Modify EventMessageDecoder to return null if decoding fails (currently throws exceptions)
This matches the documentation on MetadataDecoder.decode:
"@return The decoded metadata object, or null if the metadata could not be decoded."

PiperOrigin-RevId: 263767144
2019-08-23 16:59:50 +01:00
tonihei
89dd105034 Update window/period doc in Timeline.
Most users are likely to be only interested in the playlist items. So put the
Window definition first and explicitly mention that this is a playlist
item.

PiperOrigin-RevId: 263764515
2019-08-23 16:59:34 +01:00
tonihei
9dd04baef6 Rollback of 9f55045eeb
*** Original commit ***

Rollback of bbe681a904

*** Original commit ***

PiperOrigin-RevId: 263736897
2019-08-23 16:59:18 +01:00
andrewlewis
bc655839dd Remove superfluous logging
PiperOrigin-RevId: 263718527
2019-08-23 16:59:02 +01:00
aquilescanta
efb0549416 Remove 2 deprecated SimpleExoPlayer constructors
PiperOrigin-RevId: 263552552
2019-08-23 16:58:46 +01:00
sr1990
3198b9efac Support negative value of the @r attrbute of S in SegmentTimeline element 2019-08-19 18:07:56 -07:00
Venkatarama NG. Avadhani
6747714479 Upgrade librtmp-client to 3.1.0 2019-08-16 10:37:48 +05:30
andrewlewis
e267550d95 Throw for unsupported libvpx output formats
Currently we fail silently for high bit depth output when using ANativeWindow
output mode.

PiperOrigin-RevId: 263549384
2019-08-15 14:41:52 +01:00
ibaker
ebb72e358f Support unwrapping nested Metadata messages in MetadataRenderer
Initially this supports ID3-in-EMSG, but can also be used to support SCTE35-in-EMSG too.

PiperOrigin-RevId: 263535925
2019-08-15 14:41:52 +01:00
sofijajvc
567d078e9e Fix createDecoder method declaration
PiperOrigin-RevId: 263534628
2019-08-15 14:41:52 +01:00
aquilescanta
6a122f4740 Document injection of DrmSessionManagers into MediaSources instead of Renderers
PiperOrigin-RevId: 263532499
2019-08-15 14:41:52 +01:00
ibaker
4b75d3338e Expand FakeSampleStream to allow specifying a single sample
I removed the buffer.flip() call because it seems incompatible with the way MetadataRenderer deals with the Stream - it calls flip() itself on line 126. Tests fail with flip() here, and pass without it...

PiperOrigin-RevId: 263381799
2019-08-15 14:41:52 +01:00
tonihei
bdc8790896 Remove experimental track bitrate estimator features.
We are not planning to use them in the near future, so remove the experimental
flags and related features.

PiperOrigin-RevId: 263356590
2019-08-15 14:41:52 +01:00
aquilescanta
f3a1b099e6 Fix propagation of HlsMetadataEntry's in HLS chunkless preparation
PiperOrigin-RevId: 263356275
2019-08-15 14:41:52 +01:00
andrewlewis
76a6f5b0d0 Remove RenderersFactory from javadoc
The builder takes renderers instead of using a factory.

PiperOrigin-RevId: 263354003
2019-08-15 14:41:52 +01:00
tonihei
cd4571161a Add builders for SimpleExoPlayer and ExoPlayer.
The current ExoPlayerFactory is growing too big and usage becomes increasingly
complicated because it's not possible to set individual components without
specifying many other defaults.

Adding new builder classes makes building easier and more future-proof.

PiperOrigin-RevId: 263339078
2019-08-15 14:41:51 +01:00
ibaker
69965ddf26 Add Metadata.toString that prints the contents of entries
entries are used in .equals(), so it's good to have them printed in toString() too (for test failures) and it makes logging easier too.

PiperOrigin-RevId: 263335503
2019-08-15 14:41:51 +01:00
ibaker
5482bd05e4 Add description to TextInformationFrame.toString() output
This field is used in .equals(), we should print it in toString() too

PiperOrigin-RevId: 263335432
2019-08-15 14:41:51 +01:00
tonihei
6dd3d49093 Change default video buffer size to 32MB.
The current max video buffer is 13MB which is too small for high quality
streams and doesn't allow the DefaultLoadControl to buffer up to its default
max buffer time of 50 seconds.

Also move util method and constants only used by DefaultLoadControl into this
class.

PiperOrigin-RevId: 263328088
2019-08-15 14:41:51 +01:00
aquilescanta
a572fb3f22 Add a metadata argument to Format factory methods used in HLS
Required for propagation of HlsMetadataEntry's in chunkless preparation.

PiperOrigin-RevId: 263324345
2019-08-15 14:41:51 +01:00
sofijajvc
213912b328 Update default input buffer size documentation
PiperOrigin-RevId: 263317893
2019-08-15 14:41:51 +01:00