日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

接入普通模板剪輯Web SDK

智能生產制作提供專業在線的普通模板剪輯能力,針對視頻制作中重復性內容和定制美化需求,您可以通過自定義模板和素材替換,實現批量化視頻生產。通過閱讀本文,您可以了解如何接入普通模板剪輯Web SDK。

接入說明

普通模板是基于視頻剪輯工程創建的,因此基于普通模板的視頻剪輯是集成在視頻剪輯Web SDK中。如果您需要接入普通模板剪輯,只需要接入視頻剪輯Web SDK,并在初始化中傳入參數mode。關于接入及初始化視頻剪輯Web SDK,請參見接入視頻剪輯Web SDK

window.AliyunVideoEditor.init({
  mode: 'template'
  ......
});

config屬性說明

由于普通模板是基于視頻剪輯工程創建的,因此接入視頻剪輯Web SDK中的config屬性也同樣適用于普通模板剪輯,詳情請參見config屬性說明。除此之外,基于普通模板剪輯的config屬性中還額外增加了以下參數:

參數

類型

必填

描述

引入版本

updateTemplate

(data: {coverUrl: string; duration: number; timeline: Timeline; isAuto: boolean}) => Promise<{projectId: string}>;

編輯普通模板界面右上角保存模板按鈕對應的參數,作用為保存模板的時間線,參數依次為:工程的封面圖地址、時長(單位:秒)、Timeline數據和是否自動保存(當前每分鐘自動保存1次)。返回的Promise對象需要resolve項目ID。

3.7.0

init()示例代碼

重要

Web SDK只負責界面交互,不會發起請求,您需要通過Web SDK調用請求邏輯。請求本身應該先發送給您自己的服務端,您自己的服務端再根據AccessKey信息(AccessKey ID和AccessKey Secret)轉發給相關的阿里云OpenAPI。

// 注意,WebSDK 本身并不提供 request 這個方法,這里僅作為示例,您可以使用您喜歡的網絡請求庫,如 axios 等

window.AliyunVideoEditor.init({
    container: document.getElementById('aliyun-video-editor'),
    locale: 'zh-CN',
    mode: 'template', // 開啟普通模版編輯模式
    getEditingProjectMaterials: () => {
      if (templateId) {
        // templateId 由調用方自己保存

        // 相關接口文檔 http://bestwisewords.com/document_detail/277452.html
        return request('GetTemplate', {
          TemplateId: templateId,
          RelatedMediaidFlag: 1 // 加上這個參數,會返回相應的用于綁定媒資的字段
        })
          .then(res => {
            const { RelatedMediaids } = res.data.Template;
            const MediaIds = Object.values(JSON.parse(RelatedMediaids)).reduce(
              (acc, cur) => acc.concat(cur),
              []
            );

            // 批量獲取媒資ID對應的資源
            // 用 GetMediaInfo 逐個媒資單個查詢 http://bestwisewords.com/document_detail/197842.htm
            return request('BatchGetMediaInfos', {
              MediaIds,
              AdditionType: 'FileInfo'
            });
          })
          .then(res => {
            return transMediaList(res.data.MediaInfos); // 需要做一些數據變換,具體參考后文
          });
      }
      return Promise.resolve([]);
    },
    searchMedia: mediaType => {
      // mediaType 為用戶當前所在的素材 tab,可能為 video | audio | image,您可以根據這個參數對應地展示同類型的可添加素材
      return new Promise(resolve => {
        // 調用方需要自己實現展示媒資、選擇媒資添加的界面,這里的 callDialog 只是一種示例,WebSDK 本身并不提供
        // 關于展示媒資,請參考:http://bestwisewords.com/document_detail/197964.html
        callDialog({
          onSubmit: async materials => {
            // 這里的 materials 是 ListMediaBasicInfos 接口獲取的媒資列表,并經過 transMediaList 轉換

            // 相關接口文檔 http://bestwisewords.com/document_detail/277452.html
            const res = await request('GetTemplate', {
              TemplateId: templateId, // templateId 由調用方自己保存
              RelatedMediaidFlag: 1 // 加上這個參數,會返回相應的用于綁定媒資的字段
            });

            const { Template } = res.data;
            const MediaIdsMap = JSON.parse(Template.RelatedMediaids); // 解析出當前已綁定的媒資

            // 將選中的媒資進行添加
            materials.forEach(({ mediaType: type, mediaId }) => {
              if (!MediaIdsMap[type]) {
                MediaIdsMap[type] = [];
              }

              if (!MediaIdsMap[type].includes(mediaId)) {
                MediaIdsMap[type].push(mediaId);
              }
            });

            // 保存更新的媒資
            // 相關接口文檔 http://bestwisewords.com/document_detail/340673.html
            await request('UpdateTemplate', {
              TemplateId: templateId, // templateId 由調用方自己保存
              RelatedMediaids: JSON.stringify(MediaIdsMap)
            });

            resolve(materials);
          }
        });
      });
    },
    deleteEditingProjectMaterials: async (mediaId, mediaType) => {
      // 相關接口文檔 http://bestwisewords.com/document_detail/277452.html
      const res = await request('GetTemplate', {
        TemplateId: templateId, // templateId 由調用方自己保存
        RelatedMediaidFlag: 1 // 加上這個參數,會返回相應的用于綁定媒資的字段
      });

      const { Template } = res.data;
      const MediaIdsMap = JSON.parse(Template.RelatedMediaids); // 解析出當前已綁定的媒資

      // 剔除要刪除的媒資
      if (MediaIdsMap[mediaType] && MediaIdsMap[mediaType].includes(mediaId)) {
        MediaIdsMap[mediaType].splice(MediaIdsMap[mediaType].indexOf(mediaId), 1);

        // 保存更新的媒資
        // 相關接口文檔 http://bestwisewords.com/document_detail/340673.html
        await request('UpdateTemplate', {
          TemplateId: templateId, // templateId 由調用方自己保存
          RelatedMediaids: JSON.stringify(MediaIdsMap)
        });

        return true;
      }

      return false;
    },
    getEditingProject: async () => {
      // 相關接口文檔 http://bestwisewords.com/document_detail/277452.html
      const res = await request('GetTemplate', {
        TemplateId: templateId // templateId 由調用方自己保存
      });

      const config = res.data.Template.Config;
      return {
        timeline: config ? JSON.parse(Config) : undefined
      };
    },
    updateTemplate: async ({ coverUrl, timeline, isAuto }) => {
      const updateParams = {
        TemplateId: templateId, // templateId 由調用方自己保存
        CoverURL: coverUrl,
        Config: JSON.stringify(timeline)
      };

      // 保存更新
      // 相關接口文檔 http://bestwisewords.com/document_detail/340673.html
      await request('UpdateTemplate', updateParams);
    }

    // updateEditingProject 模版模式下不會使用到該參數,不需要傳入
    // produceEditingProjectVideo 模版模式下不會使用到該參數,不需要傳入
  });

  /**
   * 將服務端的素材信息轉換成 WebSDK 需要的格式
   */
  function transMediaList(data) {
    if (!data) return [];

    if (Array.isArray(data)) {
      return data.map(item => {
        const basicInfo = item.MediaBasicInfo;
        const fileBasicInfo = item.FileInfoList[0].FileBasicInfo;
        const mediaId = basicInfo.MediaId;
        const result = {
          mediaId
        };
        const mediaType = basicInfo.MediaType;
        result.mediaType = mediaType;

        if (mediaType === 'video') {
          result.video = {
            title: fileBasicInfo.FileName,
            duration: Number(fileBasicInfo.Duration),
            // 源視頻的寬高、碼率等數據,用于推薦合成數據,不傳入或是0時無推薦數據
            width: Number(fileBasicInfo.Width) || 0,
            height: Number(fileBasicInfo.Height) || 0,
            bitrate: Number(fileBasicInfo.Bitrate) || 0,
            coverUrl: basicInfo.CoverURL
          };
          const spriteImages = basicInfo.SpriteImages;
          if (spriteImages) {
            try {
              const spriteArr = JSON.parse(spriteImages);
              const sprite = spriteArr[0];
              const config = JSON.parse(sprite.Config);
              result.video.spriteConfig = {
                num: config.Num,
                lines: config.SpriteSnapshotConfig?.Lines,
                cols: config.SpriteSnapshotConfig?.Columns,
                cellWidth: config.SpriteSnapshotConfig?.CellWidth,
                cellHeight: config.SpriteSnapshotConfig?.CellHeight
              };
              result.video.sprites = sprite.SnapshotUrlList;
            } catch (e) {
              console.log(e);
            }
          }
        } else if (mediaType === 'audio') {
          result.audio = {
            title: fileBasicInfo.FileName,
            duration: Number(fileBasicInfo.Duration),
            coverURL: '' // 您可以給音頻文件一個默認的封面圖
          };
        } else if (mediaType === 'image') {
          result.image = {
            title: fileBasicInfo.FileName,
            coverUrl: fileBasicInfo.FileUrl,
            // 圖片的寬高等數據,用于推薦合成數據,不傳入或是0時無推薦數據
            width: Number(fileBasicInfo.Width) || 0,
            height: Number(fileBasicInfo.Height) || 0
          };
        }

        return result;
      });
    } else {
      return [data];
    }
  }