2087 Commits

Author SHA1 Message Date
olly
e30f4f20f0 Bump version to 2.10.7
PiperOrigin-RevId: 278658259
2019-11-05 18:37:56 +00:00
kimvde
9ac13f91b6 Fix inverted arguments in FlacReader format creation
PiperOrigin-RevId: 278332587
2019-11-05 17:41:29 +00:00
kimvde
1ea878a0b0 Add parameter names to Format creation
PiperOrigin-RevId: 277963928
2019-11-05 17:41:04 +00:00
kimvde
cc94ae7bfb Fix typo in WavHeader class
PiperOrigin-RevId: 277910360
2019-11-05 17:38:24 +00:00
andrewlewis
f4b9042bf0 Recreate Opus decoder for stream change
The framework opus decoder discards some samples after a call to
flush(). Because we flush a decoder that is being retained across an
input format change, this means that the start of audio gets truncated
when transitioning to a new opus stream. See also
https://android.googlesource.com/platform/frameworks/av/+/refs/heads/android10-release/media/libstagefright/codecs/opus/dec/SoftOpus.cpp.

Avoid this by recreating opus decoders instead of flushing them. It
seems fine to do this for all opus decoders as reinitialization should
be cheap, OEM-provided implementations may also discard samples and
playback shouldn't be interrupted on reinitialization due to the
downstream AudioTrack buffer.

PiperOrigin-RevId: 277458759
2019-11-05 17:37:12 +00:00
ibaker
6788a830da Use -Float.MAX_VALUE for Cue#DIMEN_UNSET
Float.MIN_VALUE is very close to zero:

PiperOrigin-RevId: 276674142
2019-11-05 17:33:50 +00:00
aquilescanta
6aa792aad5 Document error handling in the Extractor interface
PiperOrigin-RevId: 276660235
2019-11-05 17:33:24 +00:00
ibaker
2c721130b1 Update parseStbl to handle edit lists & gapless info
Without this, a subtitle track empty edit list used to offset the start of
subtitles is ignored.

Also the current code seems to depend on the order in which
we parse the tracks (audio first means we have gapless info when we parse
video track, while video first we wouldn't).

It's not clear why we can't handle both edit lists & gapless info

PiperOrigin-RevId: 276029744
2019-11-05 17:32:13 +00:00
samrobinson
2671ff0c53 Added an ICY header workaround for unseekable MP3 streams.
Issue:#6537
PiperOrigin-RevId: 275477266
2019-10-18 18:15:07 +01:00
olly
b0d0914ce5 Round impossible H264 resolutions up to valid values for capabilities check
If an odd resolution is impossible in the specification itself, then we know
that the caller is passing invalid data. Round up on the assumption it's a
rounding error so that playback can proceed.

Issue: #6551
PiperOrigin-RevId: 275226813
2019-10-17 13:21:27 +01:00
tonihei
40dbe10b12 Align PlaybackSuppressionReason java doc with method doc.
Same change as done in c49388aca2.

PiperOrigin-RevId: 274894288
2019-10-15 23:10:47 +01:00
olly
657b47cd04 Fix broken Javadoc
PiperOrigin-RevId: 274564800
2019-10-14 14:19:52 +01:00
olly
32b0474d57 Clean up playback suppression
PiperOrigin-RevId: 274561876
2019-10-14 14:11:31 +01:00
olly
0cda57aa5a Bump version to 2.10.6
PiperOrigin-RevId: 274534626
2019-10-14 14:10:28 +01:00
olly
5a6fdaad72 Don't set a playback suppression reason for permanent audio focus loss
It's documented to be for temporary loss only (i.e. the case where
externally reported playWhenReady is still true)

PiperOrigin-RevId: 274129922
2019-10-13 12:42:52 +01:00
olly
6934c6fb33 Fix bogus reporting of audio focus loss
Playback cannot be suppressed if playWhenReady=false

PiperOrigin-RevId: 273726084
2019-10-13 12:33:56 +01:00
olly
0249058c1b Parse Label elements for adaptation sets
Issue: #6297
PiperOrigin-RevId: 273297284
2019-10-13 12:29:18 +01:00
sofijajvc
722722d8df Fix GL error logging
Log only if an error occured.

PiperOrigin-RevId: 272618322
2019-10-13 12:16:50 +01:00
olly
32afc33313 Make factories return specific types
PiperOrigin-RevId: 272614917
2019-10-13 12:16:38 +01:00
olly
e34685601c Minor upstream cleanup
PiperOrigin-RevId: 272614610
2019-10-13 12:16:08 +01:00
ibaker
e0c8cbe21e Pass the raw ICY metadata through IcyInfo
The ICY 'spec' isn't really clear/tight enough to do anything more
specific than this I think.

Issue:#6476
PiperOrigin-RevId: 272405322
2019-10-13 12:13:28 +01:00
tonihei
ad59304f77 Forward isPlaying/playbackSuppressionReason changes to analytics listeners.
PiperOrigin-RevId: 271347407
2019-10-13 12:03:39 +01:00
tonihei
7e46d34788 Add EventListener.onPlaybackSuppressionReasonChanged
Adding this callback makes sense for completeness (we have similar callbacks
for all other playback state properties), and also to detect audio focus loss
while buffering which would currently trigger no callback because isPlaying
is still false.

Issue:#6203
PiperOrigin-RevId: 271347351
2019-10-13 12:03:18 +01:00
olly
a3667decf9 Try initializing ADAPTATION_WORKAROUND_BUFFER as a byte[]
PiperOrigin-RevId: 270999947
2019-10-13 12:01:34 +01:00
tonihei
fec8275331 Change default bandwidth fraction in AdaptiveTrackSelection.
A reduced fraction of 0.7 was shown to better balance the rebuffer/quality
trade-off.

PiperOrigin-RevId: 270670465
2019-10-13 11:58:39 +01:00
tonihei
f8d81d05a4 Add Player.isPlaying and Player.getPlaybackSuppressionReason
The player may suppress playback when waiting for audio focus even if the
state==Player.READY. There is currently no getter or callback to obtain this
piece of information for UI updates or analytics.

Also, it's a important derived state to know whether the playback position is
advancing. Add isPlaying and the corresponding callback to allow retrieving
this information more easily.

Issue:#6203
PiperOrigin-RevId: 268921721
2019-09-20 10:07:10 -07:00
aquilescanta
556a9954a8 Avoid retrying fatal errors
Also clear fatal errors on seek operations

PiperOrigin-RevId: 269780886
2019-09-18 15:28:19 -07:00
olly
73e35abf27 Bump version to 2.10.5
PiperOrigin-RevId: 269582832
2019-09-18 15:26:44 -07:00
olly
2fca01b925 Make flags contiguous: There's no reason for the gap :)
PiperOrigin-RevId: 269514872
2019-09-17 09:08:12 -07:00
aquilescanta
47e405ee11 Add a metadata argument to Format factory methods used in HLS
Required for propagation of HlsMetadataEntry's in chunkless preparation.

PiperOrigin-RevId: 263324345
2019-09-17 08:34:13 -07:00
christosts
1a4b1e1ea1 Revert "Add HTTP request parameters (headers) to DataSpec."
This reverts commit c3d6be3afdd7c0ca68dba15e443bc64aa3f61073.
2019-09-16 17:53:40 -07:00
Oliver Woodman
26e293070e Merge pull request #6158 from xirac:dev-v2
PiperOrigin-RevId: 268240722
2019-09-16 17:51:50 -07:00
tonihei
560c8c8760 Simplify and improve text selection logic.
This changes the logic in the following ways:
 - If no preferred language is matched, prefer better scores for the selected
   audio language.
 - If a preferred language is matched, always prefer the better match
   irrespective of default or forced flags.
 - If a preferred language score and the isForced flag is the same, prefer
   tracks with a better selected audio language match.

PiperOrigin-RevId: 259707430
2019-09-16 17:33:38 -07:00
Toni
9bc4497749 Merge pull request #6178 from xirac:feature/text-track-score
PiperOrigin-RevId: 259707359
2019-09-16 17:31:27 -07:00
olly
23ddfaa80a Add fLaC prefix to FLAC initialization data
The fLaC prefix is included in the initialization data output
from the MKV extractor, so this is highly likely ot be the
right thing to do.

Issue: #6397
PiperOrigin-RevId: 268244365
2019-09-16 17:08:39 -07:00
andrewlewis
b9ffea6831 Fix decoder selection for E-AC3 JOC streams
Issue: #6398
PiperOrigin-RevId: 267563795
2019-09-16 17:08:06 -07:00
tonihei
72aa150f02 Handle potential timeline updates that switch from content to ad.
We currently don't test if an ad needs to be played in case we are already
playing content.

This is to prevent recreating the current content period when
an ad is marked as skipped. We prefer playing until the designated ad group
position and appending another piece of content. This is less likely to cause
visible discontinuities in case the ad group position is at a key frame
boundary.

However, this means we currently miss updates that require us to play an ad
after a timeline update.

PiperOrigin-RevId: 267553459
2019-09-16 17:04:32 -07:00
andrewlewis
5a516baa78 Fix init data handling for FLAC in MP4
Issue: #6396
PiperOrigin-RevId: 267536336
2019-09-16 17:04:24 -07:00
aquilescanta
c3f3b1bfa4 Clarify LoadErrorHandlingPolicy's loadDurationMs javadocs
PiperOrigin-RevId: 266797383
2019-09-16 16:57:21 -07:00
Oliver Woodman
525d0320a7 Fix exception message
PiperOrigin-RevId: 266790267
2019-09-16 16:56:32 -07:00
kimvde
284a672bb3 Bypass sniffing for single extractor
Sniffing is performed in ProgressiveMediaPeriod even if a single
extractor is provided. Skip it in that case to improve performances.

Issue:#6325
PiperOrigin-RevId: 266766373
2019-09-16 16:51:07 -07:00
olly
f05d67b7c7 Simplify androidTest manifests & fix links to use https
PiperOrigin-RevId: 266396506
2019-09-02 14:39:02 +01:00
olly
407dbf075e Add HttpDataSource.getResponseCode to provide the status code associated with the most recent HTTP response.
PiperOrigin-RevId: 266218104
2019-09-02 14:38:24 +01:00
olly
ad699b8ff6 seenCacheError should be set for all errors
PiperOrigin-RevId: 265662686
2019-09-02 14:37:40 +01:00
christosts
c3d6be3afd 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-09-02 14:37:24 +01:00
tonihei
46bf710cb3 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-09-02 14:37:12 +01:00
olly
7cefb56eda 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-09-02 14:36:05 +01:00
andrewlewis
886fe910a8 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-09-02 14:35:52 +01:00
ibaker
c60b355f9c 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-09-02 14:35:00 +01:00
ibaker
47e0580d80 Unwrap SCTE-35 messages in emsg boxes
PiperOrigin-RevId: 263768428
2019-09-02 14:34:35 +01:00