processResponse_() {
    let segmentInfo;
    let segment;

    this.state = 'DECRYPTING';

    segmentInfo = this.pendingSegment_;
    segment = segmentInfo.playlist.segments[segmentInfo.mediaIndex];

    // some videos don't start from presentation time zero
    // if that is the case, set the timestamp offset on the first
    // segment to adjust them so that it is not necessary to seek
    // before playback can begin
    if (segment.map && isNaN(this.zeroOffset_)) {
      let timescales = mp4probe.timescale(segment.map.bytes);
      let startTime = mp4probe.startTime(timescales, segmentInfo.bytes);

      this.zeroOffset_ = startTime;
      segmentInfo.timestampOffset -= startTime;
    }

    if (segment.key) {
      // this is an encrypted segment
      // incrementally decrypt the segment
      /* eslint-disable no-new, handle-callback-err */
      new Decrypter(segmentInfo.encryptedBytes,
                    segment.key.bytes,
                    segment.key.iv,
                    (function(err, bytes) {
                      // err always null
                      segmentInfo.bytes = bytes;
                      this.handleSegment_();
                    }).bind(this));
      /* eslint-enable */
    } else {
      this.handleSegment_();
    }
  }
/**
   * Decrypt the segment that is being loaded if necessary
   *
   * @private
   */
Decrypt the segment that is being loaded if necessary
@private
Decrypt the segment that is being loaded if necessary @private
processResponse_() {
    let segmentInfo;
    let segment;
    this.state = 'DECRYPTING';
    segmentInfo = this.pendingSegment_;
    segment = segmentInfo.playlist.segments[segmentInfo.mediaIndex];
    if (segment.map && isNaN(this.zeroOffset_)) {
      let timescales = mp4probe.timescale(segment.map.bytes);
      let startTime = mp4probe.startTime(timescales, segmentInfo.bytes);
      this.zeroOffset_ = startTime;
      segmentInfo.timestampOffset -= startTime;
    }
    if (segment.key) {
      new Decrypter(segmentInfo.encryptedBytes,
                    segment.key.bytes,
                    segment.key.iv,
                    (function(err, bytes) {
                      segmentInfo.bytes = bytes;
                      this.handleSegment_();
                    }).bind(this));
    } else {
      this.handleSegment_();
    }
  }
processResponse_ ( ) { let segmentInfo ; let segment ; this . state = 'DECRYPTING' ; segmentInfo = this . pendingSegment_ ; segment = segmentInfo . playlist . segments [ segmentInfo . mediaIndex ] ; if ( segment . map && isNaN ( this . zeroOffset_ ) ) { let timescales = mp4probe . timescale ( segment . map . bytes ) ; let startTime = mp4probe . startTime ( timescales , segmentInfo . bytes ) ; this . zeroOffset_ = startTime ; segmentInfo . timestampOffset -= startTime ; } if ( segment . key ) { new Decrypter ( segmentInfo . encryptedBytes , segment . key . bytes , segment . key . iv , ( function ( err , bytes ) { segmentInfo . bytes = bytes ; this . handleSegment_ ( ) ; } ) . bind ( this ) ) ; } else { this . handleSegment_ ( ) ; } }
Decrypt the segment that is being loaded if necessary
 @private
Decrypt the segment that is being loaded if necessary @private
// some videos don't start from presentation time zero // if that is the case, set the timestamp offset on the first // segment to adjust them so that it is not necessary to seek // before playback can begin // this is an encrypted segment // incrementally decrypt the segment /* eslint-disable no-new, handle-callback-err */ // err always null /* eslint-enable */