static parseFrame(nalus) {
    const H265 = shaka.transmuxer.H265;
    let isKeyframe = false;
    const nalusData = [];
    let hvcSample = false;
    for (const nalu of nalus) {
      let push = false;
      switch (nalu.type) {
        case H265.NALU_TYPE_TRAIL_N_:
        case H265.NALU_TYPE_TRAIL_R_: {
          hvcSample = true;
          push = true;
          break;
        }
        case H265.NALU_TYPE_IDR_W_RADL_:
        case H265.NALU_TYPE_IDR_N_LP_:
        case H265.NALU_TYPE_CRA_NUT_:
          hvcSample = true;
          push = true;
          isKeyframe = true;
          break;
        case H265.NALU_TYPE_VPS_:
          push = true;
          break;
        case H265.NALU_TYPE_SPS_:
          push = true;
          break;
        case H265.NALU_TYPE_PPS_:
          push = true;
          break;
        case H265.NALU_TYPE_AUD_:
          push = true;
          hvcSample = true;
          break;
        case H265.NALU_TYPE_SEI_PREFIX_:
        case H265.NALU_TYPE_SEI_SUFFIX_:
          push = true;
          break;
        default:
          push = false;
          break;
      }
      if (hvcSample && push) {
        const size = nalu.fullData.byteLength;
        const naluLength = new Uint8Array(4);
        naluLength[0] = (size >> 24) & 0xff;
        naluLength[1] = (size >> 16) & 0xff;
        naluLength[2] = (size >> 8) & 0xff;
        naluLength[3] = size & 0xff;
        nalusData.push(naluLength);
        nalusData.push(nalu.fullData);
      }
    }
    if (!nalusData.length) {
      return null;
    }
    const data = shaka.util.Uint8ArrayUtils.concat(...nalusData);
    return {
      data,
      isKeyframe,
    };
  }
@param {!Array<shaka.extern.VideoNalu>} nalus
@return {?{data: !Uint8Array, isKeyframe: boolean}}