我想流式传输存储在 azure blob 存储上的视频。前端我正在使用react。
关于解决方法,请尝试使用以下解决方案
解决方案 1: Azure 媒体服务:使您能够使用低延迟实时流媒体、批量编码、内容保护/DRM 构建媒体应用程序,并向任何设备上的数百万观众交付流媒体内容。
Azure 媒体服务是一个基于云的平台,使您能够构建实现广播质量视频流、增强可访问性和分发、分析内容等的解决方案。
有关更多详细信息,请参阅此文档如何连接到 Azure 媒体服务 v3 node.js SDK:https://learn.microsoft.com/en-us/azure/media-services/latest/configure-connect-nodejs-如何
将适用于 JavaScript 的 Azure 媒体客户端库与 npm 结合使用。
如果使用
Azure 媒体服务 SDK 上传文件,则上传的视频将存储为
Assest
文件。 这将使将视频流式传输到不同设备变得更容易。
要流式传输或下载资产,您首先需要通过创建定位器来“发布”它。定位器提供对资产中包含的文件的访问。
创建定位器后,您可以构建用于流式传输或下载文件的 URL。
注意:您要将视频直接上传到 Azure 存储吗?如果是这种情况,我的建议是使用 Azure 媒体服务 SDK 上传视频,而不是直接将视频上传到 Azure 存储
解决方案 2:尝试使用此代码,可以使用 node.js @azure/storage-blob
包从 Azure 存储中流式传输视频。
app.get("/video", async (req, res) => {
try {
// Create the BlobServiceClient object which will be used to create a container client
const blobServiceClient = BlobServiceClient.fromConnectionString(
AZURE_STORAGE_CONNECTION_STRING
);
const containerName = 'videos';
const blobName = req.query.path;
// Get a reference to a container
const containerClient = blobServiceClient.getContainerClient(containerName);
// Get a block blob client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
console.log('\nDownloaded blob content...');
const downloadBlockBlobResponse = await blockBlobClient.download(0);
downloadBlockBlobResponse.readableStreamBody.pipe(res);
} catch (err) {
console.error(err);
res.sendStatus(500);
}
});
有关更多详细信息,请参阅此SO Thread: