Commit graph

45 commits

Author SHA1 Message Date
Oliver Woodman
8c1088559e Generalize getPsshInfo to properly accomodate WebM.
- Rather than returning a map, return a DrmInitData object,
  with mapped and non-mapped implementations.
- Include a suitable mimeType to pass to the MediaDrm. Previously
  we were incorrectly passing the mimeType of the samples,
  where-as MediaDrm expects the container mimeType. Note that
  it doesn't matter whether the mimeType starts with "video" or
  "audio", hence using video mimeTypes everywhere.
2015-03-10 19:42:48 +00:00
Oliver Woodman
462fea3eaf Correctly resolve Uris according to RFC3986.
Issue: #327
2015-03-05 11:56:00 +00:00
Oliver Woodman
457557b56f Parse ISO8601 timestamps using UTC timezone. 2015-03-04 11:02:43 +00:00
Oliver Woodman
006986cc58 Make NetworkLoadable use an injected HttpDataSource.
Note: I'm fairly confident that NetworkLoadable.Parser implementations
can live without the inputEncoding being specified. But not completely
100%...

Issue: #311
Issue: #56
2015-02-25 13:39:15 +00:00
Oliver Woodman
2ce17b601f Correctly bound search into segment indices.
The return value here assumed that the time being searched for
was beyond the start time of the last segment. This fix also
handles the case where the time is prior to the start of the
first segment.
2015-02-25 13:34:31 +00:00
Oliver Woodman
d2da3bbf8a Simplify NetworkLoader/Parser/ManifestParser
The only downside of this change is that MediaPresentationDescriptionParser
is no longer stateless.
2015-02-25 12:09:06 +00:00
Oliver Woodman
6d14fc3330 Implement UTC time synchronization for DASH Live.
Support is provided for the following schemes:

urn:mpeg:dash:utc:direct:2012
urn:mpeg:dash:utc:http-iso:2014
urn:mpeg:dash:utc:http-xsdate:2012
urn:mpeg:dash:utc:http-xsdate:2014
2015-02-20 15:10:25 +00:00
Oliver Woodman
c1a2f3d0c2 Add AOSP header. 2015-02-02 19:54:56 +00:00
Oliver Woodman
7b9b7c6e3b Handle non-indexed representations.
These may occur in VOD streams where a representation's data
is small enough not to require segmentation or an index. For
example subtitle files.

Issue: #268
2015-02-02 19:54:08 +00:00
Oliver Woodman
ed0b02d09b Package restructuring to accommodate incoming features (sorry).
This may be painful in terms of applications having to change their
imports. Sorry about that.
2015-01-27 17:00:46 +00:00
Oliver Woodman
f1a7784eb1 Fix DASH Live edge calculation.
Also added clamping to getSegmentNum in one case where
it was not already implemented, and defined this behavior
property in the getSegmentNum javadoc.

Issue: #262
2015-01-26 14:49:33 +00:00
Oliver Woodman
a64df69f85 Refine last segment calculation.
This makes the calculation correct for the case where periodDurationMs
does not divide exactly into durationMs.
2015-01-26 14:08:38 +00:00
Ihor Zakhozhyi
1a363849e2 Fixed wrong calculation of last segment number when using segment template without segment timeline. 2015-01-25 18:49:53 +02:00
Oliver Woodman
11eb1c222b Identify AC-3 tracks by codecs="ac-3", not the MIME type. 2014-12-15 15:04:38 +00:00
Oliver Woodman
595147de9b Enforce sliding window of available segments for DASH DVB. 2014-12-15 15:03:10 +00:00
Oliver Woodman
bb024fda08 Partial support for DASH DVB Live streams.
- Adds support for dash manifests that define SegmentTemplate
  but no SegmentTimeline.
- Assumes that the device clock is correct when calculating which
  segments to load. The final step here is to use the Utc timing
  element in the DASH manifest to obtain an accurate client clock.
- Doesn't yet enforce that the client shouldn't load segments that
  are in the future or behind the live window.
2014-12-12 14:07:48 +00:00
Oliver Woodman
c4b2a01212 Allow out-of-band pssh data for DASH playbacks.
This fixes the referenced issue, except that the MPD parser
needs to actually parse out UUID and binary data for schemes
that we wish to support. Alternatively, it's easy to applications
to do this themselves by extending the parser and overriding
the parseContentProtection and buildContentProtection methods.

Github Issue: #119
2014-12-08 20:15:06 +00:00
Oliver Woodman
2f0a1779e2 Stop piping PSSH information through the extractor.
It's cleaner to not inject data into the extractor only
so that it can be read out as though it were parsed from
the stream. This is also an incremental step towards
fixing Github issue #119.
2014-12-08 20:13:52 +00:00
Oliver Woodman
4efc0abde9 Implement DASH Live.
Note: This adds support for the majority of DASH live streams,
however we do not yet correctly support live streams that rely
on UtcTimingElements in their manifests.

Issue: #52
2014-12-03 18:45:13 +00:00
Oliver Woodman
2e1f9897e7 Fixed issue in which setting a representation duration to unknown wasn't handled correctly. 2014-12-03 18:30:56 +00:00
Oliver Woodman
dc644ae86d Make single MICROS_PER_SECOND constant + use it everywhere. 2014-12-03 18:30:15 +00:00
Oliver Woodman
2969bba60f Fix timestamp rollover issue for DASH live.
The timestamp scaling in SegmentBase.getSegmentTimeUs was
overflowing for some streams. Apply a similar trick to that
applied in the SmoothStreaming case to fix it.
2014-11-27 18:14:19 +00:00
Oliver Woodman
2472637264 Add support for extracting Vorbis audio in WebM Extractor. 2014-11-18 19:00:30 +00:00
Oliver Woodman
19eb7795fe Fix default startNumber.
Issue: #108
2014-11-03 12:01:53 +00:00
Oliver Woodman
1f0d411886 Make mpd parser more ameanable for extension. 2014-10-20 16:55:38 +01:00
Oliver Woodman
bf5ee6ff23 1. Parse live attributes from SmoothStreaming manifest.
2. Common interface for manifest parsers.
- This effectively moves the common interface from the Fetcher level
  (i.e. ManifestFetcher) to the Parser level (i.e. ManifestParser).
- The motivation here is to allow the implementation of components that
  can work with a generic ManifestParser implementation.
2014-09-11 16:22:01 +01:00
Oliver Woodman
181eceaf4b Fixed MPD date/time parsing issue. 2014-09-08 11:34:06 +01:00
Oliver Woodman
52a300f1fd Merge fMP4/H264 and WebM/VP9 DASH implementations. 2014-09-08 11:33:12 +01:00
Oliver Woodman
1ddd5c6e16 Parse some DASH manifest components for DVB LIVE. 2014-09-08 11:30:21 +01:00
Oliver Woodman
9a124120ff Changes around renderer readiness and extraction.
- Make MediaCodecTrackRenderer.isReady more permissive.
  This largely fixes #21
- Bring WebmExtractor closer to FragmentedMp4Extractor.
  The two will probably be placed under a common interface
  fairly soon, which will allow significant code
  deduplication.
2014-08-01 15:56:26 +01:00
Oliver Woodman
b3277c666b Add language to Format (+other misc fix). 2014-07-28 14:29:21 +01:00
Oliver Woodman
bb5cfd52c5 Add missing files. 2014-07-18 14:55:24 +01:00
Oliver Woodman
62d17cabf0 Add support for SegmentTemplate and SegmentList mpds.
Misc Notes:
- Removed content type filters because some of third parties
  don't set content type.
2014-07-18 14:30:30 +01:00
Oliver Woodman
87461821fe Define DashSegmentIndex wrapper.
This paves the way for SegmentTemplate and SegmentList based
mpds, which will implement DashSegmentIndex directly rather than
parsing an index from the media stream.

- Define DashSegmentIndex.
- Make use of DashSegmentIndex in chunk sources.
- Define an implementation of DashSegmentIndex that wraps a SegmentIndex.
- Add method that will allow Representations to return a DashSegmentIndex
  directly in the future.
- Add support for non-contiguous index and initialization data in media streams.
  For the Webm case this isn't enabled yet due to extractor limitations.
- Removed ability to fetch multiple chunks. This functionality does not extend
  properly to SegmentList and SegmentTemplate variants of DASH.
2014-07-17 11:28:05 +01:00
Oliver Woodman
d7d14037b8 Add utility classes for SegmentTemplate/SegmentList refactor.
A step towards supporting SegmentTemplate style MPDs.
2014-07-15 18:32:37 +01:00
Oliver Woodman
058333565d Use bits/sec instead of bytes/sec for format bandwidth.
Why: This was a bad initial choice. Manifests typically define bandwidth in
bits/sec. If you divide by 8 then you're throwing away information due to
rounding. Unfortunately it turns out that SegmentTemplate based manifests
require you to be able to recall the bitrate exactly (because it's substituted
in during segment URL construction).

Medium term: We should consider converting all our bandwidth estimation
over to bits/sec as well.

Note1: Also changed Period id to be a string, to match the mpd spec.
Note2: Made small optimization in FormatEvaluator to not consider discarding
the first chunk (durationBeforeThisSegmentUs will always be negative, and even
in the error case where it's not, removing the first thunk should be an error).
2014-07-15 13:55:59 +01:00
Oliver Woodman
4366afc273 Support self-contained media chunks.
- Support parsing of moov atoms contained within each chunk.
- Also do a small cleanup to WebM parser.
2014-07-15 12:47:08 +01:00
Oliver Woodman
16fe6a809e More flexible mimeType handling in mpd parser.
- Allow the content type of an adaptation set to be inferred
from the mimeTypes of the contained representations.
- Ensure the contained mimeTypes are consistent with one
another, and with the adaptation set.

Ref: Issue #2
2014-07-10 12:01:12 +01:00
Oliver Woodman
686ac2a6f5 Refactor WebM extractor. 2014-07-09 23:20:23 +01:00
Oliver Woodman
9e16dec2f8 Add support for relative baseUrls in DASH manifests.
Ref: Issue #2
2014-07-09 23:15:58 +01:00
Oliver Woodman
1b957268a6 Add utility methods for inexact ceil/floor binary searches.
This change also fixes issue #5
2014-07-09 15:34:42 +01:00
Oliver Woodman
47c0bbd6b5 Propagate erors to ChunkSource implementations.
This can help custom ChunkSource implementations to act on
this information. For example an adaptive implementation may
choose to blacklist a problematic format if loads of that
format keep failing.
2014-07-04 01:06:20 +01:00
Oliver Woodman
4fd4c89518 Refactored ExoPlayer to use String-based format ids. 2014-07-04 01:04:10 +01:00
Oliver Woodman
8cad387393 Fix ChunkSource disable definition. 2014-07-04 00:45:09 +01:00
Oliver Woodman
27ab5c83a6 Initial drop. 1.0.10. 2014-06-16 12:56:04 +01:00