Commit graph

517 commits

Author SHA1 Message Date
Oliver Woodman
64cc380fe1 Avoid loading first chunk when preparing HLS for non-zero position.
This also fixes a technical mistake where HlsChunkSource is fed
seekPositionUs=-1 when obtaining the first chunk. This is wrong,
but the usage of this variable within HlsChunkSource enforces that
the seek must stay within bounds, so we get away with it.

Issue: #385
2015-05-11 21:10:20 +01:00
Oliver Woodman
116a18848f Alter default exo buffertime value to 2500ms. 2015-05-11 21:05:37 +01:00
Oliver Woodman
b0abda43ec Ensure we configure a new extractor when we need one.
Issue: #400
2015-05-11 21:03:30 +01:00
Oliver Woodman
770ad7f06f Fix edge case in HlsSampleSource.
1. prepare() needs to load a TsChunk to actually prepare the source.
2. Source is prepared, but no tracks are enabled (this is why it's
   an edge case - no-one is likely to be doing this!).
3. The TsChunk load completes.

We should not load additional chunks in this case.
2015-05-11 21:02:38 +01:00
Oliver Woodman
dd5eabdf4a Signal EoS when seeking ExtractorSampleSource to the end of a track. 2015-05-11 21:01:35 +01:00
Oliver Woodman
861d6749ef Remove ability to extend the default FormatEvaluator implementations. 2015-05-08 17:09:39 +01:00
Oliver Woodman
9f77c4009e Clip seek position to the inputLength - 1. 2015-05-08 17:08:59 +01:00
Oliver Woodman
d9071710cf Read AC-3 tracks in MPEG TSs only if AC-3 playback is supported.
Partly fixes #434 as the AC-3 stream will now be ignored if the
audio capabilities don't allow it to be played back.
2015-05-08 17:08:13 +01:00
Oliver Woodman
d8af120b98 Fix treating all DVB data as AC-3.
Issue #434
2015-05-08 17:06:59 +01:00
Oliver Woodman
7437ee39d8 Remove deprecated method. 2015-05-08 17:06:27 +01:00
Oliver Woodman
54b71a5743 Allow cross-protocol redirects.
Issue: #423
2015-05-08 17:05:54 +01:00
Oliver Woodman
4527539efe Handle cenc:pssh elements in DASH manifests.
Issue: #407
2015-05-08 17:05:04 +01:00
Oliver Woodman
3360f5eda5 Enable passthrough based on the input MIME type. 2015-05-08 17:04:21 +01:00
Oliver Woodman
a1083d360a Prevent wrapping detection on new passthrough AudioTracks. 2015-05-08 17:03:05 +01:00
Oliver Woodman
de5bce3400 Apply passthrough workarounds only on platform API versions 21/22. 2015-05-08 17:02:23 +01:00
Oliver Woodman
9921dfd1ce Deprecate FrameworkSampleSource as a deterrent. 2015-05-05 20:33:25 +01:00
Oliver Woodman
6909c948b9 Remove SuppressLint in AudioTrack. 2015-05-05 20:32:06 +01:00
Oliver Woodman
9dcb17f21a Clean up DataSourceInputStream 2015-05-05 20:30:52 +01:00
Oliver Woodman
a63883a8c8 Fix format equality checking.
For Live SmoothStreaming, referential equality checking
isn't enough (it breaks once the manifest is updated).
Updated other instances too just for consistency.
2015-05-05 20:30:32 +01:00
Tanuj Mittal
2a06c2641c Fix DataSourceInputStream.read() for EOF cases 2015-05-05 16:30:09 +05:30
Oliver Woodman
79cdd03682 Filter unsupported video formats for HLS. 2015-05-01 20:34:57 +01:00
Oliver Woodman
b405d3d9b7 Have Representation, TrackElement and Variant consistently expose Format.
And delete things that we're parsing but don't use from TrackElement.
2015-05-01 20:33:52 +01:00
Oliver Woodman
8673cafce8 Move Allocator to HlsSampleSource (from HlsChunkSource).
- This makes HLS consistent with Chunk/ExtractorSampleSource.
- It needs to be consistent for WebVTT in HLS.
- Also trim the allocator when done.
2015-05-01 20:32:42 +01:00
Oliver Woodman
0c5a1a6c35 Distinguish exceptions caught at top level. 2015-05-01 20:31:49 +01:00
Oliver Woodman
efb9ff1fe7 Play standalone MPEG-TS files.
- Have TsExtractor report a SeekMap to the output.
- Implement TsExtractor.reset to reset extractor state.
- Add 1x sample.
2015-05-01 20:31:21 +01:00
Oliver Woodman
cfab852096 Remove pointless references to ElementaryStreamReaders. 2015-05-01 20:30:00 +01:00
Oliver Woodman
d82343d06c Remove MediaFormat.bitrate. 2015-05-01 20:29:32 +01:00
Oliver Woodman
54f97c952e Reintroduce Allocation abstraction.
Play movies has an Allocator that attempts to allocate a single
huge byte[] up front to minimize the risk of GC pauses. This abstraction
will be required to keep that when updating them to the new Exo.
2015-05-01 20:28:49 +01:00
Oliver Woodman
9b112cf94d Video format selection.
Making Representation and TrackElement extend Format will simplify
this further (TBC whether this is a good idea!).

Issue: #393
2015-05-01 20:27:11 +01:00
Oliver Woodman
fafcd79e1b Move AC-3 bitrate calculation into Ac3Util.
This is in preparation for removing bitrate from MediaFormat.
2015-05-01 20:25:19 +01:00
Oliver Woodman
6bf62770bd Make sure that the process dies if a loading task throws Error. 2015-05-01 20:24:50 +01:00
Oliver Woodman
1d528b80ea Move getUserAgent from DemoUtil to library's Util. 2015-05-01 20:24:27 +01:00
Oliver Woodman
6cb46e4549 webm_extractor: Add VP8 to the list of codecs.
VP8 can be decoded by MediaCodec (since very early versions of android). Now that we want WebmExtractor to be general purpose, adding VP8 makes sense as it is a common use case.
2015-05-01 20:23:33 +01:00
Oliver Woodman
5ea7424ee3 Tidy up AssetDataSource. 2015-05-01 20:23:02 +01:00
Oliver Woodman
ce3d5c9a59 Throw when getMinBufferSize returns an error value. 2015-05-01 20:22:03 +01:00
Oliver Woodman
e6c7defc79 Make ParsableBitArray.data public, like ParsableByteArray. 2015-05-01 20:21:36 +01:00
Oliver Woodman
7ad55dbf2c webm_extractor: Add support for parsing BlockGroup element
This CL adds support for parsing BlockGroup elements for all
codecs (not just opus). It also adds a test to verify the new
behavior.
2015-05-01 20:20:47 +01:00
Oliver Woodman
aed45bb2ca Add support for reading AC-3 audio in HLS. 2015-05-01 20:18:08 +01:00
Oliver Woodman
48fc9635a9 webm_extractor: Add support for Cues present at the end of file
This CL adds support for WebM files which have Cues present at the end of the file (i.e.) after Clusters. The file referenced in the bug can now be played back using the demo app. It adds a new flag to WebmExtractor which should be set to true only when being used through ExtractorSampleSource. All others (e.g. DASH) should not set it.

Reference file: http://demos.webmproject.org/exoplayer/glass_vp9_vorbis_cues_at_end.webm
2015-05-01 20:13:19 +01:00
Oliver Woodman
6cccfc1caa Make Atom.getAtomTypeString public.
I've found myself doing this a couple of times during local
debugging. It's harmless to have it public, and seems pretty
useful for debugging inside of the mp4 package.
2015-05-01 20:12:28 +01:00
Oliver Woodman
b787852e71 Correctly stop previous renderers if prepare is called again. 2015-05-01 20:11:57 +01:00
Oliver Woodman
88daaa882c Fix NPE if source is released having never been prepared. 2015-05-01 20:11:27 +01:00
Oliver Woodman
837090e8f9 Move AC-3 header parsing into a new Ac3Util class.
This is in preparation for adding support for AC-3 in HLS.

Also parse E-AC-3 boxes.
2015-05-01 20:10:47 +01:00
ojw28
26c5461b10 Merge pull request #408 from dnutcracker/dev
fix for issue #403
2015-04-24 11:51:11 +01:00
Nati Dykstein
a43dd6ba68 Update AssetDataSource.java 2015-04-22 22:25:44 +03:00
Oliver Woodman
f273c73123 Support NALUnitLengthFieldLength != 4.
Seems a little hacky to define this in Track, but there doesn't seem to
be a particularly nice alternative.

Issue: #406
2015-04-22 16:24:12 +01:00
Oliver Woodman
afb1a93059 Refine ExtractorSampleSource retry.
I was hoping not to avoid this, but in the case of a parsing
failure during preparation we keep retrying forever!
2015-04-22 16:23:33 +01:00
Oliver Woodman
1a01dcc55a Separate UriDataSource from HttpDataSource.
Using a file:// URL for loading an HLS stream (for testing) would fail due to
casting the connection to an HttpURLConnection in DefaultHttpDataSource.

This change makes UriDataSource an interface for objects that are DataSources
with URIs. That allows for reading manifests for HLS using just a UriDataSource
rather than an HttpDataSource (URLs in the playlist are relative to the data
source's URL so the getUri method is needed).
2015-04-22 16:22:48 +01:00
Oliver Woodman
a1336978ad Fix DataSpec toString formatting. 2015-04-22 16:19:48 +01:00
Oliver Woodman
c807c69a93 webm_extractor: Support for multiple tracks
Github Issue: #363
2015-04-22 16:18:23 +01:00
Oliver Woodman
f637fde962 Allow overriding of codec buffer dequeue block time. 2015-04-22 16:17:36 +01:00
Oliver Woodman
1a9bf018a4 Add frame rate to Format for use in format selection (when known). 2015-04-22 16:16:42 +01:00
Oliver Woodman
a7e2b719c5 Call init() on the extractor only once for each chunk.
On retrying loading a chunk, the state of the extractor was reset due to a call
to seek(). Prevent this call by only calling init() if no bytes were loaded.

Also make the DefaultExtractorInput use the loading position not the original
stream position so that its getPosition() method returns offsets relative to
the start of the stream, which fixes a bug where the chunk index offsets would
be relative to the wrong position if there was a retry while loading the chunk.
2015-04-22 16:14:46 +01:00
Oliver Woodman
21e69f3154 Add more loading info (including chunk loading times) to
BaseChunkSampleSourceEventListener.onLoadCompleted.
2015-04-22 16:13:19 +01:00
Oliver Woodman
3a1325b0af Make TsExtractor consistent with AdtsExtractor. 2015-04-22 16:11:23 +01:00
Nati Dykstein
647d9bedb8 fix for issue #403 2015-04-22 14:51:05 +03:00
Oliver Woodman
55e08ff712 Avoid time discontinuity when retrying a live stream.
Issue: #227
Issue: #389
2015-04-17 20:12:11 +01:00
Oliver Woodman
faf0e2c147 Improve retry logic.
1. Reset retry count to 0 if a Loadable makes progress.
2. Handle resume correctly in the case of live streams.

Issue: #227
Issue: #389
2015-04-17 20:10:31 +01:00
Oliver Woodman
4c94a846d5 webm_extractor: Fix issue in vorbis extraction.
Vorbis decoder in android MediaCodec [1] expects the last 4 bytes of the sample to be the number of samples in the current page. This definition holds good only for Ogg and is irrelevant for WebM. So we always set this to -1 (the decoder will ignore this value if we set it to -1). The android platform media extractor [2] does the same.
2015-04-17 20:09:45 +01:00
Oliver Woodman
b1aac839e6 Don't feed AC-3 input when the audio track is paused.
This works around an issue the audio track continues to play audio data written
after calling AudioTrack.pause(), which breaks rebuffering behavior (as video
can never catch up if audio continues to be consumed, in some circumstances).

Also don't increment the timestamp wrap count if the track is paused, to work
around an issue where the playback head position jumps back to zero after the
AudioTrack position jumps back to zero.
2015-04-17 20:08:54 +01:00
Oliver Woodman
c4eee71fa2 Support AAC without platform MediaExtractor.
Issue: #231
Issue: #227
2015-04-17 20:07:04 +01:00
Oliver Woodman
fb97fca04e Handle dynamic appearance/disappearance of ID3 track in HLS. 2015-04-17 20:04:52 +01:00
Oliver Woodman
5f74226d67 Make the audio track session workaround flag non-final. 2015-04-17 20:04:18 +01:00
Oliver Woodman
508e13e0bd Clean up + optimize ParsableByteArray. 2015-04-17 20:03:24 +01:00
Oliver Woodman
9092fad8e8 Fix subtitles. 2015-04-17 20:02:20 +01:00
Oliver Woodman
0523717841 Fix crash. 2015-04-17 20:01:59 +01:00
Oliver Woodman
e84c852169 Select E-AC-3 in preference to AC-3, and remove other tracks. 2015-04-17 20:01:06 +01:00
Oliver Woodman
3f1638de95 Use ENCODING_PCM_16BIT for keepSessionIdAudioTrack.
ENCODING_PCM_8BIT support is not required.
2015-04-17 19:59:58 +01:00
Oliver Woodman
e4e6a1caf0 Switch from AudioFormat.ENCODING_DEFAULT to .ENCODING_PCM_16BIT.
AudioTrack.getMinBufferSize does not handle ENCODING_DEFAULT so
switch back to ENCODING_PCM_16BIT.
2015-04-17 19:59:03 +01:00
Oliver Woodman
c3bf60b1a9 Add JavaDoc to remove lint warning about unused variable. 2015-04-14 16:45:46 +01:00
Oliver Woodman
7cf6aa86d2 Properly document in code how to pass CustomData to PlayReady DRM.
Issue: #339
2015-04-14 16:44:01 +01:00
Oliver Woodman
d9b3582baa Use OMX.google.raw.decoder for passthrough playback.
The OMX component needs to be configured with a format that has a
MIME type of audio/raw. Remove Ac3PassthroughAudioTrackRenderer,
which is no longer used.
2015-04-14 16:42:24 +01:00
Oliver Woodman
ed1dbddc75 Trim memory when disabling ExtractorSampleSource.
This prevents memory leakage even in the case where the app
is still holding a reference (direct or indirect) to the
Allocator.
2015-04-13 19:36:16 +01:00
Oliver Woodman
0d69a2eae8 Implement event reporting from HlsSampleSource.
Issue: #275
2015-04-13 19:03:04 +01:00
Oliver Woodman
e21f7801b5 Major surgery to move all playback modes to the new Extractor model. 2015-04-13 18:57:31 +01:00
Oliver Woodman
265adf9a8f Move chunk trigger constants into Chunk. 2015-04-11 02:09:40 +01:00
Oliver Woodman
ad56490bde Add ability to discard from write-side of DefaultTrackOutput. 2015-04-11 02:03:43 +01:00
Oliver Woodman
4c8f9a8c6f Remove source package, and restore original FrameworkSampleSource. 2015-04-11 02:00:47 +01:00
Oliver Woodman
587edf8e2b Add new style mp4/fmp4 extractors. 2015-04-11 01:58:34 +01:00
Oliver Woodman
7d8141e419 Add new style mp3 extractor. 2015-04-11 01:42:03 +01:00
Oliver Woodman
4a1fed9e86 Add new style WebM extractor. 2015-04-11 01:30:11 +01:00
Oliver Woodman
6c5af23230 Minor tweaks to HlsSampleSource. 2015-04-11 01:12:40 +01:00
Oliver Woodman
da656e6f26 More steps towards unified extractors. 2015-04-11 01:07:41 +01:00
Oliver Woodman
53a47524a1 Support non-square pixels in HLS.
Github issue: #375
2015-04-11 00:59:00 +01:00
Oliver Woodman
37d12ff14a Steps toward generalizing the Extractor interface for all extractors. 2015-04-11 00:55:38 +01:00
Oliver Woodman
3a551c73ba Move hls.parser to a new extractor package.
This package will house all extractors, which will be unified
to implement a single Extractor interface.
2015-04-11 00:27:24 +01:00
Oliver Woodman
fc176b9cbe Fix TsExtractor bug.
The limit on the ts packet buffer can be reduced during processing
if it's discovered to have padding. Hence we need to reset it back
to the ts packet size before processing each packet.
2015-04-10 23:41:45 +01:00
Oliver Woodman
61443b2f12 Relocate content of Mp4Util to more sensible locations.
- Atom related stuff in Mp4Util is moved to Atom.
- Remainder of Mp4Util is renamed to H264Util.
2015-04-10 23:31:03 +01:00
Oliver Woodman
fea2140d57 Add ability to query size/rate support in MediaCodecUtil. 2015-04-10 23:15:52 +01:00
Oliver Woodman
38efb1fc3f Clean up Aes128DataSource. 2015-04-10 23:12:47 +01:00
Oliver Woodman
6bf52dd69c Report decoder initialization information out of track renderer. 2015-04-10 23:06:57 +01:00
Oliver Woodman
a17123c49b Clean up codec reinitialization. 2015-04-10 23:03:50 +01:00
Oliver Woodman
380c427fb3 Make MediaCodecVideoTrackRenderer easier to extend. 2015-04-10 23:01:09 +01:00
Oliver Woodman
a085d2f29b Add END_OF_INPUT constant + start using it. 2015-04-10 23:00:23 +01:00
Oliver Woodman
d745384d99 Change decodeOnly to be a sample flag. 2015-04-10 22:55:12 +01:00
Oliver Woodman
70b0e55a8b Remove deprecated bandwidth parameter. 2015-04-10 22:39:15 +01:00
Oliver Woodman
c901025643 Don't attempt license request when keys expire.
- Keys should not expire during normal playbacks of correctly configured content.
- Attempting to refresh on expiration causes a race condition, that may result
  in either failure or brief re-buffer, for the 30s license test video.
- This change provides deterministic behavior, which is to always fail.
2015-04-10 22:38:06 +01:00
Oliver Woodman
d108c13535 Remove deprecated method. 2015-04-10 22:36:07 +01:00
Oliver Woodman
4dc8e8f951 Add audio and m3u8 mime types. 2015-04-10 22:35:03 +01:00
Oliver Woodman
ecaf329b0d Improve ParsableByteArray performance + enhance API. 2015-04-10 22:34:06 +01:00