https://github.com/google/ExoPlayer

sort by:
Revision Author Date Message Commit Date
5bdcb5f DASH: Output Format before InitializationChunk load completes This optimization allows a ChunkSampleStream to output track formats as soon as they're parsed during an InitializationChunk load, rather than waiting until after the InitializationChunk load is completed. In DASH VOD, a single InitializationChunk typically loads the moov and sidx atoms in that order. Hence for long form content where the sidx is a non-trivial size, this may result in the track formats being output a non-negligible period of time sooner than was previously the case. This allows downstream renderers to start codec initialization sooner, potentially decreasing startup latency. For a single test stream on a fast & stable network, this pretty consistently reduced elapsed time until both audio and video codecs have been initialized from ~0.5s to ~0.3 seconds on a Galaxy S8. For 5 test runs without and with these patches, the eventTime logged by EventLogger for the second decoder init were: Without (secs): 0.47 0.47 0.45 0.48 0.46 With (secs) : 0.32 0.33 0.34 0.31 0.40 PiperOrigin-RevId: 289845089 17 January 2020, 13:59:37 UTC
1245102 Optimize chunks to init their outputs before opening the DataSource The current order of operations means that the Format is only passed to the chunk's output after the DataSource has been opened. This means that establishing the network connection and the downstream renderers initializing their codecs are effectively serialized to occur one after the other. In the new order, the Format is passed to the chunk's output before the DataSource has been opened. This allows the downstream renderers to initialize their codecs in parallel with the network connection being established, and hence latency at the start of playback is reduced. PiperOrigin-RevId: 289841854 17 January 2020, 13:59:33 UTC
771aa32 Use customCacheKey in DownloadHelper.createMediaSource Issue: #6870 PiperOrigin-RevId: 289658261 17 January 2020, 13:59:22 UTC
3202160 Rename ID3 tag to Afro-Punk PiperOrigin-RevId: 289490708 17 January 2020, 13:58:22 UTC
4e4a415 DownloadService: No-op cleanup Issue: #6798 PiperOrigin-RevId: 289424582 17 January 2020, 13:58:18 UTC
61130a5 Deprecate DownloadService state change methods As discovered whilst investigating #6798, there are cases where these methods are not correctly. They were added as convenience methods that could be overridden by concrete DownloadService implementations, but since they don't work properly it's preferable to require application code to listen to their DownloadManager directly instead. Notes: - The original proposal to fix #6798 stored the state change events in memory until they could be delivered. This approach is not ideal because the events still end up being delivered later than they should be. We also want to fix the root cause in a different way that does not require doing this. - This change does not fix #6798. It's a preparatory step. Issue: #6798 PiperOrigin-RevId: 289418555 17 January 2020, 13:58:11 UTC
865e014 PlayerTrackEmsgHandler: Release sample queue in release() This change makes it clear the SampleQueue doesn't outlive the wrapping PlayerTrackEmsgHandler, and releases it from PlayerTrackEmsgHandler.release(). This change is a no-op because calling release() is the same as reset() in this case (the behavior only differs if a non-dummy DrmSessionManager is being used). PiperOrigin-RevId: 289416622 17 January 2020, 13:58:07 UTC
cebad35 Split HlsSampleStreamWrapper.init into two methods As a result, onMediaChunkLoadStarted gets invoked on the loading thread, and init on the playback thread, matching the thread access comments. Issue:#6321 PiperOrigin-RevId: 289167981 17 January 2020, 13:58:03 UTC
2902452 Merge pull request #6797 from DolbyLaboratories:dev-v2-ac4-drm PiperOrigin-RevId: 289092332 17 January 2020, 13:57:58 UTC
ca11e56 Add tests to validate FLAC decoder output PiperOrigin-RevId: 289091494 17 January 2020, 13:57:41 UTC
f4271f5 Add favicon to javadocs. b/145393567 PiperOrigin-RevId: 289054937 17 January 2020, 13:56:55 UTC
91d9405 Avoid OMX.qti.audio.decoder.flac Unfortunately devices such as the MI 8 do not provide an alternative working decoder. Some Vivo devices do provide one though. PiperOrigin-RevId: 288911897 17 January 2020, 13:56:51 UTC
4e767fa Fix extension FLAC decoder to correctly handle non-16-bit depths PiperOrigin-RevId: 288860159 17 January 2020, 13:56:35 UTC
b35499f Resolve TrueHD spec TODO PiperOrigin-RevId: 288855515 17 January 2020, 13:56:31 UTC
91d2d8b Merge pull request #6836 from DolbyLaboratories:dev-v2-refineAC4 PiperOrigin-RevId: 288772277 17 January 2020, 13:56:09 UTC
42897b2 FlacExtractor: add condition for zero-length reads This improves readability by making clearer that reading no bytes from the input in readFrames() is an expected case if the buffer is full. PiperOrigin-RevId: 288711841 17 January 2020, 13:56:03 UTC
6395d44 Disable chronometer for playback speeds != 1.0 This doesn't work because the Chronometer text layout can only count in realtime. Issue:#6816 PiperOrigin-RevId: 288711702 17 January 2020, 13:55:58 UTC
e1a110e Fix TrueHD chunking in Matroska Issue: #6845 PiperOrigin-RevId: 288688716 17 January 2020, 13:55:49 UTC
7fe55cd Use FlacLibrary.isAvailable in FlacExtractor selection PiperOrigin-RevId: 288667790 17 January 2020, 13:55:40 UTC
bf9a61d Upgrade OkHttp library to fix HTTP2 issue Issue: #4078 PiperOrigin-RevId: 288651166 17 January 2020, 13:55:24 UTC
eb0acb4 Fix playback for Vivo codecs that output non-16-bit audio PiperOrigin-RevId: 288468497 17 January 2020, 13:55:02 UTC
d1839f1 Add comment explaining FlacBinarySearchSeeker output PiperOrigin-RevId: 288464154 17 January 2020, 13:54:58 UTC
20e7684 FlacExtractor: Fix possible skipping of frame boundaries PiperOrigin-RevId: 288304477 17 January 2020, 13:54:47 UTC
be3257e Simulate IO exceptions in all FlacExtractor tests - Simulate IO exceptions in the test using FlacBinarySearchSeeker for seeking in FlacExtractorTests. This makes the test slower but covers more test cases. PiperOrigin-RevId: 288285057 17 January 2020, 13:54:37 UTC
1f85cd9 Remove WavExtractor from the nullness blacklist PiperOrigin-RevId: 288292488 17 January 2020, 13:54:33 UTC
d609c3b Support 5G in network type detection PiperOrigin-RevId: 288280500 17 January 2020, 13:54:27 UTC
63eaf11 Fix MatroskaExtractor to use blockDurationUs not durationUs This typo was introduced in https://github.com/google/ExoPlayer/commit/ddb70d96ad99f07fe10f53a76ce3262fe625be70 when migrating a static method with parameter `durationUs` to an instance method where the correct field to use was `blockDurationUs` (but `durationUs` also exists). The test that catches this was only added in https://github.com/google/ExoPlayer/commit/45013ece1e3fe054ff8960355a89559241eeb288 (and therefore configured with the wrong expected output data). issue:#6833 PiperOrigin-RevId: 288274197 17 January 2020, 13:53:43 UTC
1b764c2 Add unit tests to FLAC extractor related classes PiperOrigin-RevId: 287973192 17 January 2020, 13:52:54 UTC
97be065 Use MIME types rather than PCM encodings for ALAW and MLAW PiperOrigin-RevId: 287999703 17 January 2020, 13:52:47 UTC
1f505fa Show ad markers after the window duration Issue: #6552 PiperOrigin-RevId: 287964221 17 January 2020, 13:52:39 UTC
90a67b5 Add support for IMA ADPCM in WAV PiperOrigin-RevId: 287854701 17 January 2020, 13:52:33 UTC
ef0066f Support twos codec in MP4 Issue: #5789 PiperOrigin-RevId: 287828559 17 January 2020, 13:52:29 UTC
0e1670b Document overriding of drawables for PlayerControlView Issue: #6779 PiperOrigin-RevId: 287828273 17 January 2020, 13:52:24 UTC
b36c5e9 Document overriding drawables for notifications Issue: #6266 PiperOrigin-RevId: 287821640 17 January 2020, 13:52:20 UTC
7fd0b1d Fix handling of E-AC-3 streams with AC-3 frames Issue: #6602 PiperOrigin-RevId: 287816831 17 January 2020, 13:52:16 UTC
1edcc6c Don't use WavHeader.averageBytesPerSecond It's unreliable for at least one IMA ADPCM file I've found. Calculating the blockIndex to seek to using exact properties also seems more robust. Note this doesn't change anything for the existing PCM test, since averageBytesPerSecond is set correctly. It does make a difference for an upcoming IMA ADPCM test though. PiperOrigin-RevId: 287814947 17 January 2020, 13:52:11 UTC
3cf88bb Fix typos PiperOrigin-RevId: 287810018 17 January 2020, 13:52:06 UTC
3bce213 Fix handling of network transitions in RequirementsWatcher Issue: #6733 PiperOrigin-RevId: 286621715 17 January 2020, 13:51:34 UTC
355b3af Read arrays directly from Parcel PiperOrigin-RevId: 286197990 17 January 2020, 13:50:52 UTC
54f6f48 Parse MP3 header to retrieve the nb of sample per frames Add support for MP3 as an encoding format for passthrough. This change does not change the observable behavior of Exoplayer. Also name the magics. #exo-offload PiperOrigin-RevId: 286146539 17 January 2020, 13:50:43 UTC
37e65ec Add FlacExtractorSeekTest PiperOrigin-RevId: 285823771 17 January 2020, 13:50:12 UTC
fcac5af Fix FlacExtractor construction Fix the FlacExtractor constructor for the case where seek(0,0) is not called before reading. PiperOrigin-RevId: 285811161 17 January 2020, 13:50:04 UTC
bf9f49a Implement seeking from seektable in FLAC extractor PiperOrigin-RevId: 285799995 17 January 2020, 13:50:01 UTC
7bd912f Clean up WavExtractor PCM output - Make extractor output samples that are uniformly distributed with respect to time, with a target of ~10 samples per second. The old approach could in theory put every frame into its own sample, which would be very inefficient downstream because we'd need to pass them individually to MediaCodec. It could also put data corresponding to a long duration of time into a single sample (e.g. if the sample rate of the content is low), which is bad downstream because we decide whether to set the decodeOnly flag on a per sample basis. More generally, the new approach is more predictable :). - Stop using the WavSeekMap to get sample timestamps, and instead calculate them directly from the number of frames output. It's more obviously correct, particularly for data formats like IMA ADPCM where we'll need to adjust the data prior to output. PiperOrigin-RevId: 285750010 17 January 2020, 13:49:57 UTC
27b06e9 Fix ParameterName warnings in core tests PiperOrigin-RevId: 285716982 17 January 2020, 13:49:29 UTC
80e3152 Make it easier to update extractor test dump files PiperOrigin-RevId: 285407744 17 January 2020, 13:49:18 UTC
052550e Rename getPhysicalDisplaySize to getCurrentDisplayModeSize PiperOrigin-RevId: 285405910 17 January 2020, 13:49:05 UTC
18cdd8e Add ISO-8859-1 awareness to IcyDecoder Also change IcyInfo.rawMetatadata from String to byte[] ICY doesn't specify the character encoding, and there are streams not using UTF-8 (issue:#6753). It seems the default of at least one server is ISO-8859-1 so let's support that as a fallback: https://github.com/savonet/liquidsoap/issues/411#issuecomment-288759200 Also update IcyDecoder to skip strings it doesn't recognise at all instead of decoding invalid characters. The feed from issue:#6753 now decodes accents correctly: EventLogger: ICY: title="D Pai - Le temps de la rentrée", url="null" PiperOrigin-RevId: 285388522 17 January 2020, 13:46:57 UTC
5737815 Remove API version dependency of Util.normalizeLanguageCode We previously used Locale.fromLanguageTag and then toLanguageTag to automatically filter out invalid tags and to replace deprecated tags. However, this only works for API 21+. This change does no longer rely on the platform methods and instead: 1. Keeps invalid tags as they are. This may help if developers rely on non-spec-complaint language tags (for example, #6681). 2. Adds a list of deprcated tags and their modern replacements to our code 3. Normalizes some short codes that have been superseded by macrolanguage codes by their macrolanguage equivalent. Issue:#6681 PiperOrigin-RevId: 285384841 17 January 2020, 13:43:30 UTC
c832896 Refactor sample number computation in FLAC seeking Retrieve the sample number in the extractor instead of passing a holder to FlacBinarySearchSeeker. This change makes the code easier to understand and is required to implement the seeking from the seek table. PiperOrigin-RevId: 285241862 17 January 2020, 13:43:16 UTC
4ea913f Create WavExtractor.OutputWriter to handle different data formats - Create PcmOutputWriter for PCM. - In a future change an ImaAdPcmOutputWriter will be introduced for IMA ADPCM support. PiperOrigin-RevId: 285238246 17 January 2020, 13:43:12 UTC
d62dc9d Remove assumption that WAV files only contain PCM encoded data - WavHeader is now immutable and contains only values parsed out of the WAVE FMT chunk. It no longer contains a C.PcmEncoding encoding, or mutable data bounds. - WavHeaderReader now parses the WAVE header chunks without any additional logic (e.g. validating the block alignment value, which is format type dependent). - The SeekMap part of WavHeader is split out into WavSeekMap. PiperOrigin-RevId: 285232498 17 January 2020, 13:43:07 UTC
1144926 Add WavHeader.samplesPerBlock (currently always == 1) PiperOrigin-RevId: 284961417 17 January 2020, 13:42:34 UTC
fe61cfe Remove duplicated logic in FlacReader PiperOrigin-RevId: 284952647 17 January 2020, 13:42:30 UTC
910bd8b Implement binary search seeking for FLAC extractor PiperOrigin-RevId: 284814594 17 January 2020, 13:42:07 UTC
4ed512d Fix javadoc warnings exposed by -Xdoclint PiperOrigin-RevId: 284776943 17 January 2020, 13:40:49 UTC
ff1efd4 Add peek() method to ExtractorInput PiperOrigin-RevId: 284537150 17 January 2020, 13:39:27 UTC
24afcdc Remove TODO for supporting streams in Java FLAC extractor Flac streams exist but are not commonly used. Also, they are not supported by the FLAC extension extractor. PiperOrigin-RevId: 284514327 17 January 2020, 13:39:18 UTC
54413c2 Make metadata field nullable in FlacStreamMetadata This makes the format metadata null (instead of an empty Metadata object) when it is not provided, and is therefore consistent with the other extractors behavior. PiperOrigin-RevId: 284171148 17 January 2020, 13:37:58 UTC
a5ee17e Fix casting to not need warning suppression Also remove getRendererCapabilities arg that's now always null. PiperOrigin-RevId: 283966795 17 January 2020, 13:36:55 UTC
023e141 Verify metadata in extractor tests PiperOrigin-RevId: 283960017 17 January 2020, 13:36:40 UTC
0a0a478 Add a test for SampleQueue capacity increases Also remove redundant line PiperOrigin-RevId: 283956203 17 January 2020, 13:36:33 UTC
14897fb Invert the ownership scheme between SampleQueue and SampleMetadataQueue Saves around 200 lines of code. High level overview: - Rename SampleQueue to SampleDataQueue. - Rename SampleMetadataQueue to SampleQueue. This CL should not introduce behavior changes. The only significant changes in synchronization should be: + Add synchronized keyword to isReady. - Seems to be necessary. + Add synchronized keyword to SampleQueue.sampleMetadata. - Before this change, SampleQueue.sampleMetadata could acquire the SampleMetadataQueue lock three times in a single method call. Other miscellaneous improvements: + Put all private methods at the bottom. + Move release() to the right category. PiperOrigin-RevId: 283795844 17 January 2020, 13:36:09 UTC
9974670 Make DownloadHelper pass DrmSessionManager to MediaSources PiperOrigin-RevId: 283795201 17 January 2020, 13:35:21 UTC
9c23888 Don't try to track buffersInCodec with tunneling PiperOrigin-RevId: 283551324 17 January 2020, 13:30:38 UTC
630992d Allow no output frame holder BinarySearchSeeker PiperOrigin-RevId: 283544187 17 January 2020, 13:29:44 UTC
9fec58a Add SSA test file to the demo app I wrote this myself PiperOrigin-RevId: 281942685 17 January 2020, 13:21:06 UTC
f09f62d Expose metadata in FLAC extractor PiperOrigin-RevId: 281538423 17 January 2020, 13:20:54 UTC
a558501 Remove TODO around optimizing sample data outputs in FlacExtractor Preliminary measurement showed that the results were similar to the non-optimized version. PiperOrigin-RevId: 281255476 17 January 2020, 13:19:59 UTC
dcebf93 Add Java FLAC extractor Seeking, live streams support and exposure of vorbis and ID3 data are not part of this commit. Issue: #6406 PiperOrigin-RevId: 281083332 17 January 2020, 13:17:53 UTC
ea342a6 Merge pull request #6856 from dturner/release-v2 Add favicon to javadocs 10 January 2020, 10:33:46 UTC
a0eb081 Add favicon to javadocs 10 January 2020, 10:24:22 UTC
6aa35aa Merge pull request #6790 from google/dev-v2-r2.11.1 r2.11.1 20 December 2019, 23:03:17 UTC
27e4855 Fix tests for 2.11.1 20 December 2019, 22:18:52 UTC
924045b Release notes tweak PiperOrigin-RevId: 286587978 20 December 2019, 20:52:19 UTC
f6dad5c Enable blacklisting for HTTP 416 Where media segments are specified using byte ranges, it makes sense that a server might return 416 (which we don't consider for blacklisting) if the segment is unavailable, rather than the 404 (which we do consider for blacklisting) that we expect when media segments are only specified using a URL. Issue: #6775 PiperOrigin-RevId: 286620698 20 December 2019, 20:51:58 UTC
472a4d2 Update release notes for #6776 PiperOrigin-RevId: 286586865 20 December 2019, 16:59:58 UTC
72ff450 Add troubleshooting instructions for decoding extensions PiperOrigin-RevId: 286585978 20 December 2019, 16:59:52 UTC
c299748 Fix build by saving periodIndex to separate variable 20 December 2019, 16:47:42 UTC
5d728ab Fix potentially wrong window index in onMediaPeriodCreated. Issue:#6776 20 December 2019, 16:38:34 UTC
c6036d5 Add test case for mdat atom extending beyond the file length Issue: #6774 PiperOrigin-RevId: 286576383 20 December 2019, 16:08:25 UTC
87865a5 DefaultDownloadIndex: Clear failure reason when removing download The Download constructor considers it invalid to have a failure reason if the download isn't in the failed state. Unfortunately, calling DefaultDownloadIndex.removeAllDownloads when there's a failed download will change the state without clearing the reason. If the downloads are then read back from the DefaultDownloadIndex we end up violating the Download constructor assertion. This change clears the failed reason for any existing rows in the invalid state, and also fixes the root cause that allows invalid rows to enter the table in the first place. Issue: #6785 PiperOrigin-RevId: 286576242 20 December 2019, 16:07:43 UTC
406acfc Relax MP4 sniffing to allow an atom to extend beyond the file length Issue: #6774 PiperOrigin-RevId: 286575797 20 December 2019, 16:07:35 UTC
e8cb7b2 Fix typo Merge of https://github.com/google/ExoPlayer/pull/6793 PiperOrigin-RevId: 286556008 20 December 2019, 16:07:26 UTC
b7bc1fe Add missing @Nullable to MediaCodecAudioRenderer.getMediaClock Without this @Nullable, potential subclasses can't override the method to return null if they don't want to use the renderer as a media clock. Issue:#6792 PiperOrigin-RevId: 286545736 20 December 2019, 16:07:11 UTC
63f7b99 Bump to 2.11.1 PiperOrigin-RevId: 286368964 19 December 2019, 14:47:43 UTC
5d2ca02 Unwrap all nested IntDef values This seems to work with R8 but interact badly with ProGuard. issue:#6771 PiperOrigin-RevId: 286215262 18 December 2019, 20:06:03 UTC
1106aba Add omitted release note for 2.11 PiperOrigin-RevId: 286201458 18 December 2019, 19:30:45 UTC
b4873e5 Fix keep rule for VideoDecoderOutputBuffer PiperOrigin-RevId: 286156361 18 December 2019, 19:30:22 UTC
c9109f4 Ensure raw resources are kept R8 does constant folding, so we need to keep buildRawResourceUri to ensure that resources passed to it are kept. PiperOrigin-RevId: 286153875 18 December 2019, 19:30:08 UTC
166e389 Suppress ProGuard warnings about javax.annotation These annotations are compile-only - so we don't mind they're not accessible at runtime. PiperOrigin-RevId: 285993063 18 December 2019, 19:29:35 UTC
0a701ab Retain AV1 constructor for DefaultRenderersFactory Issue: #6773 PiperOrigin-RevId: 285990377 18 December 2019, 19:29:18 UTC
739517b Fix FLAC seeking when the last seek point is a placeholder PiperOrigin-RevId: 285449865 18 December 2019, 19:28:31 UTC
5e822e1 FakeTrackOutput: Throw if sample size exceeds maxInputSize This indicates the extractor has output a Format with a specified maxInputSize that's too small. Failing in FakeTrackOutput ensures this doesn't happen during Extractor tests. PiperOrigin-RevId: 285776069 18 December 2019, 19:27:59 UTC
88be178 Manual rollback of https://github.com/google/ExoPlayer/commit/b3f485d7d9c08e39574b72a949166ee4834c3b24 It's technically possible to output a seekable SeekMap with unknown duration. This can occur if the media defines seek points but doesn't define either the overall duration or the duration of the media from the last seek point to the end. PiperOrigin-RevId: 285769121 18 December 2019, 19:27:45 UTC
250a5de Add more SeekMap assertions, and "fix" MatroskaExtractor In MatroskaExtractor, if the last cue time exceeds the duration specified in the header, then we end up generating a negative duration chunk as the last item in the SeekMap. We should probably not do this, so drop it instead. Note: Matroska does have a CueDuration element, but it's not used in the one problematic file I've found. PiperOrigin-RevId: 285738418 18 December 2019, 19:27:27 UTC
d8951a2 Add an additional sanity check to FakeExtractorOutput PiperOrigin-RevId: 285422885 18 December 2019, 19:27:24 UTC
4653592 Propagate HTTP request headers through CacheDataSource This has been broken since https://github.com/google/ExoPlayer/commit/c3d6be3afdd7c0ca68dba15e443bc64aa3f61073 and broken for ICY (where I noticed the problem) since https://github.com/google/ExoPlayer/commit/5695bae9d8fde5e156fd38fa552e266c5611c71f. ICY symptom is that we see no repeated metadata, because the Icy-MetaData:1 header doesn't make it to the server so we never get back icy-metaint. PiperOrigin-RevId: 285379234 18 December 2019, 19:25:57 UTC
53d30d8 Fix bug where C.TIME_UNSET was used for calcutations. The presentationTimeOffsetMs may be C.TIME_UNSET for VOD content and shouldn't be used in calculations for the windowStartTime. PiperOrigin-RevId: 285363095 18 December 2019, 19:25:30 UTC
5bead4a Make DefaultTimeBar exclude itself for gestures Issue: #6685 PiperOrigin-RevId: 284736041 18 December 2019, 19:23:03 UTC
back to top