[AEM Assets]{class="badge positive" title="適用於AEM Assets)。"}
與Dynamic Media整合 integrate-dynamic-media
「內容建議程式」與Dynamic Media整合,讓使用者可以瀏覽、預覽和選取Dynamic Media轉譯,以用於他們的應用程式和工作流程。 使用者可以從可用的轉譯、影像預設集、智慧型裁切中選取,並套用支援的Dynamic Media修飾元來自訂資產傳送。 以下章節說明如何處理選取的轉譯資訊,以及如何產生Dynamic Media傳送URL以用於您的應用程式。
使用selectedMedia建置Dynamic Media URL build-dynamic-media-urls-selectedmedia
當使用者從「內容建議程式」的「動態媒體」面板選取「動態媒體」轉譯時,selectedMedia物件中會傳回選取的轉譯資訊。 主機應用程式必須使用此資訊來產生適當的Dynamic Media傳遞URL。
selectedmedia物件 selectedmedia-object
selectedMedia物件已新增至選取的資產,並包含使用者選取之Dynamic Media轉譯的相關資訊。
'selectedMedia': Array<{
base?: string;
preset?: string;
smartcrop?: string;
modifiers?: Array<string>;
apiStyle?: 'scene7' | 'openapi'
}>;
selectedMedia物件包含下列屬性:
basepresetsmartcropmodifiersapiStylescene7)或OpenAPI (openapi)傳遞棧疊。例如,當使用者選取基本轉譯並套用rotate=90修飾元時,傳回的物件會類似於以下內容:
selectedMedia: {
apiStyle: "scene7",
base: "scene7company/image",
modifiers: ["rotate=90"]
}
存取handleSelection回呼中的selectedMedia access-selectedmedia
選取轉譯後,handleSelection回呼傳回的selectedAssets裝載中,selectedMedia物件即可使用。
async function handleSelection(assets) {
const dmUrls = [];
assets.forEach((asset) => {
if(asset?.selectedMedia){
const dmUrl = createDMUrlFromSelectedMedia(
asset.selectedMedia,
asset
);
dmUrls.push({ asset, dmUrl });
}
});
}
回呼會逐一檢視選取的資產。 對於包含selectedMedia物件的每個資產,應用程式會使用選取的轉譯資訊產生Dynamic Media URL。
產生Dynamic Media URL generate-dynamic-media-url
下列函式會驗證所選轉譯資訊,並決定應使用哪個Dynamic Media傳遞棧疊。
const DM_OPENAPI_API_STYLE = 'openapi';
const DM_SCENE7_API_STYLE = 'scene7';
const ASSET_REPO_NAME_KEY = 'repo:name';
const ASSET_REPO_ID_KEY = 'repo:id';
const REPO_ID_KEY = 'repo:repositoryId';
export const createDMUrlFromSelectedMedia = (
selectedMedia,
repoMetadata
) => {
if (!selectedMedia || !selectedMedia?.apiStyle) {
throw new Error(
'Selected media or api style is not valid'
);
}
if (
selectedMedia?.apiStyle === DM_OPENAPI_API_STYLE
) {
return buildDMOpenApiUrl(
selectedMedia,
repoMetadata
);
} else if (
selectedMedia?.apiStyle === DM_SCENE7_API_STYLE
) {
return buildDMScene7Url(
selectedMedia,
repoMetadata
);
}
};
此函式會執行下列動作:
- 驗證選取的轉譯包含
apiStyle值。 - 決定選取的轉譯使用具OpenAPI功能的Dynamic Media或Dynamic Media Scene7。
- 根據選取的傳遞棧疊呼叫適當的URL產生函式。
建立Dynamic Media OpenAPI URL build-openapi-url
以下函式會使用選取的轉譯資訊和存放庫中繼資料來產生Dynamic Media OpenAPI URL。
export const buildDMOpenApiUrl = (
selectedMedia,
repoMetadata
) => {
const { base, preset, smartcrop, modifiers }
= selectedMedia;
const dmDomain =
repoMetadata?.[REPO_ID_KEY]
.replace('author-', 'delivery-');
const assetName =
repoMetadata?.[ASSET_REPO_NAME_KEY];
const assetId =
repoMetadata?.[ASSET_REPO_ID_KEY];
const seoName =
assetName?.split('.')[0];
const assetFormat =
repoMetadata?.['dc:format'];
let dmUrl;
if (
assetFormat &&
assetFormat.startsWith('video/')
) {
dmUrl =
`https://${dmDomain}/adobe/assets/${assetId}/play`;
} else {
dmUrl =
`https://${dmDomain}/adobe/assets/${assetId}/as/${seoName}.avif`;
if (base) {
} else if (preset) {
dmUrl =
`${dmUrl}?preset=${preset}`;
} else if (smartcrop) {
dmUrl =
`${dmUrl}?smartcrop=${smartcrop}`;
}
}
if (modifiers && dmUrl) {
const modifierString =
getModifierString(selectedMedia);
if(base) {
dmUrl =
`${dmUrl}?${modifierString}`;
} else {
dmUrl =
`${dmUrl}&${modifierString}`;
}
}
return dmUrl;
};
此函式:
- 擷取建構傳遞URL所需的存放庫資訊。
- 建立基礎OpenAPI傳送URL。
- 將選取的預設集或智慧型裁切附加至URL (如適用)。
- 附加任何使用者選取的修飾元。
- 傳回最終OpenAPI傳送URL。
針對視訊資產,函式會產生Dynamic Media視訊播放器URL。
建立Dynamic Media Scene7 URL build-scene7-url
以下函式產生Dynamic Media Scene7 URL。
export const buildDMScene7Url = (
selectedMedia,
repoMetadata
) => {
const {
base,
preset,
smartcrop,
modifiers
} = selectedMedia;
let scene7Domain =
repoMetadata?.['repo:scene7Domain'];
const scene7File =
repoMetadata?.['repo:scene7File'];
if (!scene7Domain || !scene7File) {
return null;
}
scene7Domain =
scene7Domain.startsWith('http://')
? scene7Domain.replace(
'http://',
'https://'
)
: scene7Domain;
scene7Domain =
scene7Domain?.endsWith('/')
? scene7Domain
: `${scene7Domain}/`;
let dmUrl;
if (base) {
dmUrl =
`${scene7Domain}is/image/${base}`;
} else if (preset) {
dmUrl =
`${scene7Domain}is/image/${scene7File}?$${preset}$`;
} else if (smartcrop) {
dmUrl =
`${scene7Domain}is/image/${scene7File}:${smartcrop}`;
}
if (modifiers && dmUrl) {
const modifierString =
getModifierString(selectedMedia);
if (preset) {
dmUrl =
`${dmUrl}&${modifierString}`;
} else {
dmUrl =
`${dmUrl}?${modifierString}`;
}
}
return dmUrl;
};
此函式:
- 從存放庫中繼資料中擷取Scene7網域和資產資訊。
- 為選取的基本轉譯、影像預設集或智慧型裁切建立URL。
- 附加任何選取的修飾元。
- 傳回最終Scene7傳遞URL。
產生修飾元字串 generate-modifiers-string
以下協助程式函式將修飾元陣列轉換為與URL相容的查詢字串。
export const getModifierString = (
selectedMedia
) => {
const { modifiers } = selectedMedia;
if (modifiers) {
const modifierString =
modifiers.length > 0
? modifiers.join('&')
: '';
return modifierString;
}
return null;
};
函式將所有選取的修飾元合併為以&符號(&)分隔的單一字串。
例如:
[
'rotate=90',
'width=1200'
]
傳回:
rotate=90&width=1200
產生的字串會附加至最終Dynamic Media URL,並在資產傳遞時套用選取的轉換。
另請參閱