[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,并在交付资产时应用选定的转换。