private void resolveDirect() {
   try {
     long utcTimestamp = Util.parseXsDateTime(timingElement.value);
     long elapsedRealtimeOffset = utcTimestamp - timingElementElapsedRealtime;
     callback.onTimestampResolved(timingElement, elapsedRealtimeOffset);
   } catch (ParseException e) {
     callback.onTimestampError(timingElement, new ParserException(e));
   }
 }
 private void resolve() {
   String scheme = timingElement.schemeIdUri;
   if (Util.areEqual(scheme, "urn:mpeg:dash:utc:direct:2012")) {
     resolveDirect();
   } else if (Util.areEqual(scheme, "urn:mpeg:dash:utc:http-iso:2014")) {
     resolveHttp(new Iso8601Parser());
   } else if (Util.areEqual(scheme, "urn:mpeg:dash:utc:http-xsdate:2012")
       || Util.areEqual(scheme, "urn:mpeg:dash:utc:http-xsdate:2014")) {
     resolveHttp(new XsDateTimeParser());
   } else {
     // Unsupported scheme.
     callback.onTimestampError(timingElement, new IOException("Unsupported utc timing scheme"));
   }
 }
 @Override
 public void onLoadError(Loadable loadable, IOException exception) {
   releaseLoader();
   callback.onTimestampError(timingElement, exception);
 }
 @Override
 public void onLoadCompleted(Loadable loadable) {
   releaseLoader();
   long elapsedRealtimeOffset = singleUseLoadable.getResult() - SystemClock.elapsedRealtime();
   callback.onTimestampResolved(timingElement, elapsedRealtimeOffset);
 }