static getVideoConfiguration_(vps, sps, pps, detail) {
    const H265 = shaka.transmuxer.H265;

    const length = 23 + (3 + 2 + vps.byteLength) +
        (3 + 2 + sps.byteLength) + (3 + 2 + pps.byteLength);
    const data = new Uint8Array(length);

    data[0] = 0x01; // configurationVersion
    data[1] = ((detail.generalProfileSpace & 0x03) << 6) |
        ((detail.generalTierFlag ? 1 : 0) << 5) |
        ((detail.generalProfileIdc & 0x1F));
    data[2] = detail.generalProfileCompatibilityFlags1;
    data[3] = detail.generalProfileCompatibilityFlags2;
    data[4] = detail.generalProfileCompatibilityFlags3;
    data[5] = detail.generalProfileCompatibilityFlags4;
    data[6] = detail.generalConstraintIndicatorFlags1;
    data[7] = detail.generalConstraintIndicatorFlags2;
    data[8] = detail.generalConstraintIndicatorFlags3;
    data[9] = detail.generalConstraintIndicatorFlags4;
    data[10] = detail.generalConstraintIndicatorFlags5;
    data[11] = detail.generalConstraintIndicatorFlags6;
    data[12] = detail.generalLevelIdc;
    data[13] = 0xF0 |
        ((detail.minSpatialSegmentationIdc & 0x0F00) >> 8);
    data[14] = (detail.minSpatialSegmentationIdc & 0xFF);
    data[15] = 0xFC | (detail.parallelismType & 0x03);
    data[16] = 0xFC | (detail.chromaFormatIdc & 0x03);
    data[17] = 0xF8 | (detail.bitDepthLumaMinus8 & 0x07);
    data[18] = 0xF8 | (detail.bitDepthChromaMinus8 & 0x07);
    data[19] = 0;
    data[20] = 0;
    data[21] = ((detail.constantFrameRate & 0x03) << 6) |
        ((detail.numTemporalLayers & 0x07) << 3) |
        ((detail.temporalIdNested ? 1 : 0) << 2) | 3;
    data[22] = 3;
    data[23 + 0 + 0] = 0x80 | H265.NALU_TYPE_VPS_;
    data[23 + 0 + 1] = 0;
    data[23 + 0 + 2] = 1;
    data[23 + 0 + 3] = (vps.byteLength & 0xFF00) >> 8;
    data[23 + 0 + 4] = (vps.byteLength & 0x00FF) >> 0;
    data.set(vps, 23 + 0 + 5);
    data[23 + (5 + vps.byteLength) + 0] =
        0x80 | H265.NALU_TYPE_SPS_;
    data[23 + (5 + vps.byteLength) + 1] = 0;
    data[23 + (5 + vps.byteLength) + 2] = 1;
    data[23 + (5 + vps.byteLength) + 3] = (sps.byteLength & 0xFF00) >> 8;
    data[23 + (5 + vps.byteLength) + 4] = (sps.byteLength & 0x00FF) >> 0;
    data.set(sps, 23 + (5 + vps.byteLength) + 5);
    data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 0] =
        0x80 | H265.NALU_TYPE_PPS_;
    data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 1] = 0;
    data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 2] = 1;
    data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 3] =
        (pps.byteLength & 0xFF00) >> 8;
    data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 4] =
        (pps.byteLength & 0x00FF) >> 0;
    data.set(pps, 23 + (5 + vps.byteLength + 5 + sps.byteLength) + 5);
    return data;
  }
@param {!Uint8Array} vps
@param {!Uint8Array} sps
@param {!Uint8Array} pps
@param {shaka.transmuxer.H265.DecoderConfigurationRecordType} detail
@return {!Uint8Array}
@private