使用eyevinn开源云在5分钟内完成媒体供应链视频转码
Eyevinn开源云旨在降低开源项目的启动门槛,并通过将部分收入回馈给贡献者。本指南将引导您完成使用Eyevinn开源云的开放式Web服务进行视频转码的步骤。
1. 获取API访问令牌和项目设置
- 访问Eyevinn开源云网络控制台的“设置/API”页面。
- 复制API访问令牌,并将其存储在名为
OSC_ACCESS_TOKEN的环境变量中。 如下图所示:

<code class="bash">export OSC_ACCESS_TOKEN=<access-token-copied-above></code>
- 创建一个Node.js项目:
<code class="bash">mkdir transcode cd transcode npm init</code>
- 安装JavaScript客户端SDK:
<code class="bash">npm install --save @osaas/client-core @osaas/client-services @osaas/client-transcode</code>
- 创建一个名为
transcode.js的文件,并添加以下代码:
<code class="javascript">const { context } = require('@osaas/client-core');
const ctx = new context();</code>
测试运行脚本:
<code class="bash">node transcode.js</code>
2. 设置用于存储转码视频文件的存储空间
- (如果您已拥有S3兼容存储,可跳过此步骤)
- 安装Minio客户端库:
<code class="bash">npm install --save minio</code>
- 添加名为
setup()的新函数,该函数将上下文作为参数:
<code class="javascript">const { context, waitForInstanceReady } = require('@osaas/client-core');
const { getMinioMinioInstance, createMinioMinioInstance } = require('@osaas/client-services');
const minio = require('minio');
const delay = (ms) => new Promise((res) => setTimeout(res, ms));
async function setup(context) {
console.log('setting up storage');
let storage = await getMinioMinioInstance(context, 'devguide');
if (!storage) {
storage = await createMinioMinioInstance(context, {
name: 'devguide',
rootuser: 'admin',
rootpassword: 'abc12345678'
});
await waitForInstanceReady('minio-minio', 'devguide', context);
await delay(2000);
}
const client = new minio.Client({
endpoint: new URL(storage.url).hostname,
accessKey: 'admin',
secretKey: 'abc12345678',
});
const buckets = await client.listBuckets();
if (!buckets.find((bucket) => bucket.name === 'output')) {
await client.makeBucket('output');
}
}
async function main() {
const ctx = new context();
await setup(ctx);
}
main();</code>
运行脚本将创建一个存储服务和存储桶。
3. 设置视频转码器
将以下代码添加到setup()函数中,创建视频转码实例。(如果已拥有S3存储桶,请替换以下S3凭据为您的存储桶凭据)
<code class="javascript">const { getEncoreInstance, createEncoreInstance } = require('@osaas/client-services');
...
async function setup(context) {
...
let transcoder = await getEncoreInstance(context, 'devguide');
if (!transcoder) {
transcoder = await createEncoreInstance(context, {
name: 'devguide',
s3AccessKeyId: 'admin',
s3SecretAccessKey: 'abc12345678',
s3Endpoint: storage.url
});
}
}</code>
4. 转码视频文件
使用以下示例视频进行转码:https://testcontent.eyevinn.technology/mp4/vinn.mp4
将以下代码添加到main()函数中:
<code class="javascript">const { transcode } = require('@osaas/client-transcode');
...
async function main() {
const ctx = new context();
await setup(ctx);
await transcode(ctx, {
encoreInstanceName: 'devguide',
inputUrl: new URL('https://testcontent.eyevinn.technology/mp4/vinn.mp4'),
externalId: 'vinn',
outputUrl: new URL('s3://output/')
});
}</code>
为了接收转码进度通知,可以使用callbackUrl参数:
<code class="javascript">await transcode(ctx, {
encoreInstanceName: 'devguide',
inputUrl: new URL('https://testcontent.eyevinn.technology/mp4/vinn.mp4'),
externalId: 'vinn',
outputUrl: new URL('s3://output/'),
callbackUrl: 'https://example.com/webhook'
});</code>
您可以使用S3客户端验证输出存储桶中的转码文件。
本指南简化了原文,并对代码块进行了格式调整,使其更易于阅读和理解。 同时,对部分语句进行了同义词替换,避免了直接照搬原文。










