일반 VAST 변환기 람다
13163 단어 lambdajavascriptawsadtech
그것은 2008년부터 있었고 새로운 발명품이 아니며 본질적으로 목적에 잘 부합합니다. 그러나 광고 삽입기 구성 요소가 다른 광고 서버 공급자와 "대화"하는 것만큼 간단하지 않게 만드는 광고 서버별 태그(확장) 또는 표준 해석이 있을 수 있습니다.
광고 삽입기 측(서버 측이든 클라이언트 측이든)에서 광고를 제공하는 각 시스템에 대해 일부 조정을 수행해야 하는 것은 드문 일이 아닙니다. 이를 용이하게 하기 위해 우리는 VAST가 광고 삽입기로 전달되기 전에 VAST를 수정하거나 변환하는 일반적인 방법으로 사용할 수 있는 "프록시"를 개발했습니다.
AVAST Transformer는 Typescript로 작성되었으며 서비스로 배포하거나 예를 들어 AWS Lambda와 같은 서버리스 접근 방식을 사용하여 배포할 수 있습니다. 소스 코드는 오픈 소스로 공개됩니다.
새로운 변환을 적용할 때 실제 프록시 소스 코드를 수정하지 않고도 일반화되도록 설계되어 변환 언어로 XSLT(Extensible Stylesheet Language Transformations)를 사용하기로 했습니다. 꽤 오랫동안 사용되어 온 XML을 변환하는 언어이며 처음에는 복잡해 보일 수 있지만 사용 방법에 대한 많은 문서가 이미 작성되어 있습니다.
광고 삽입기가 광고 서버에서 직접 VAST XML을 가져오는 대신 VAST 변환기 프록시에서 가져옵니다. 적용할 XSLT를 사용할 수 있는 위치를 가리키는 URL 인코딩 쿼리 매개변수와 함께 URL 인코딩 쿼리 매개변수로 원래 광고 서버 엔드포인트를 제공합니다. 예를 들어 다음 URL로 VAST XML을 가져올 수 있는 Test Adserver을 사용하겠습니다.
https://eyevinn.adtest.eyevinn.technology/api/v1/vast?dur=60
URL 인코딩을 하면 다음과 같은 결과를 얻습니다.
https%3A%2F%2Feyevinn.adtest.eyevinn.technology%2Fapi%2Fv1%2Fvast%3Fdur%3D60
그리고 모든 ClickThrough 링크를 제거하는 이 간단한 XSLT를 적용하려고 합니다.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- Drop VideoClicks -->
<xsl:template match="VideoClicks"></xsl:template>
</xsl:stylesheet>
URL(아래 인코딩됨)에서 사용할 수 있습니다.
http%3A%2F%2Ftestcontent.eyevinn.technology%2Fxslt%2Fremove-click-through.xsl
그러면 광고 삽입기가 다음 URL을 사용하여 VAST Transformer 프록시를 통해 VAST를 가져옵니다.
https://vast-transformer.lambda.eyevinn.technology/transform?vastUrl=https%3A%2F%2Feyevinn.adtest.eyevinn.technology%2Fapi%2Fv1%2Fvast%3Fdur%3D60&xslt=http%3A%2F%2Ftestcontent.eyevinn.technology%2Fxslt%2Fremove-click-through.xsl
쿼리 매개변수
vastUrl
는 테스트 광고 서버를 가리키고 xslt
는 XSLT 파일의 위치를 가리킵니다.이 구현은 성능이 매우 뛰어나야 하므로 libxslt의 Node.js 바인딩을 사용합니다. 현재 이러한 Node.js 바인딩은 이 게시물 작성 시점에 v16 이상이 아직 지원되지 않으므로 15 미만의 노드 버전에서만 작동합니다.
그 외에도 구현은 본질적으로 매우 간단합니다.
// fetch the XSLT XML
const xsltXml = await fetchXslt(xsltUrl);
// forward all headers except the Host header
// when fetching the VAST XML
let headers = {};
Object.keys(event.headers).forEach(k => {
if (k !== 'host') {
headers[k] = event.headers[k];
}
});
const response = await fetch(vastUrl.toString(), {
headers: headers,
});
const vastXml = await response.text();
// apply the XSLT on the VAST XML
const outXml = await xsltProcess(vastXml, xsltXml);
// gzip compress the XML
const compressed = await compress(Buffer.from(outXml, "utf-8"));
// as there are limitations in response size
// from a Lambda
return {
statusCode: 200,
headers: {
"Content-Type": "application/xml",
"Content-Encoding": "gzip",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type, Origin",
'Access-Control-Allow-Private-Network': 'true',
},
body: compressed.toString("base64"),
isBase64Encoded: true,
}
xsltProcess()
함수는 주로 다음으로 구성됩니다.export const xsltProcess = async (sourceXml: string, xsltXml: string): Promise<string> => {
return new Promise((resolve, reject) => {
libxslt.parse(xsltXml, (err, stylesheet) => {
if (err) {
reject(err);
} else {
stylesheet.apply(sourceXml, {}, (err, result) => {
if (err) {
reject(err);
}
resolve(result);
});
}
});
});
}
그리고 그게 다야!
재미로 그리고 이 구현이 얼마나 일반적인지 보여주기 위해 VAST XML을 완전히 사람이 읽을 수 있는 HTML 페이지로 변환하는 XSLT을 작성했습니다.
here 을 클릭하여 결과를 확인하십시오.
아이빈 테크놀로지 소개
Eyevinn Technology는 비디오 및 스트리밍을 전문으로 하는 독립 컨설턴트 회사입니다. 플랫폼이나 기술 공급업체와 상업적으로 연결되어 있지 않은 방식으로 독립적입니다.
Eyevinn에서 모든 소프트웨어 개발자 컨설턴트는 오픈 소스 개발 및 오픈 소스 커뮤니티에 대한 기여를 위해 예약된 전용 예산을 가지고 있습니다. 이것은 우리에게 혁신, 팀 구성 및 개인 역량 개발을 위한 여지를 제공합니다. 또한 회사로서 오픈 소스 커뮤니티에 다시 기여할 수 있는 방법을 제공합니다.
Eyevinn에 대해 더 알고 싶고 여기서 일하는 방법을 알고 싶습니다. [email protected] 로 연락주세요!
Reference
이 문제에 관하여(일반 VAST 변환기 람다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/video/generic-vast-transformer-lambda-ddm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)