Azure Blob Storage에서 비디오 스트리밍

4245 단어 webdevazure
최근에 Azure Blob Storage 계정에서 비디오 콘텐츠를 스트리밍해야 하는 프로젝트가 있었습니다. 충분히 쉬울까요? <video> 태그를 삽입하고 Blob URL을 가리키기만 하면 됩니다(Blob은 공개적으로 액세스할 수 있음). 글쎄, 그것은 그렇게 간단하지 않았습니다. 다음은 비슷한 작업을 수행해야 하는 경우 도움이 될 수 있는 몇 가지 문제입니다.

우리는 왜 기다리고 있습니까?



첫 번째 순진한 시도인 Blob URL을 가리키는 <video> 태그의 경우 재생하기 전에 전체 비디오 파일을 먼저 다운로드하려고 시도하고 있었고 스트리밍하려는 비디오가 너무 커서 허용할 수 없는 것으로 나타났습니다.



Full video download took 43 seconds, not great...



스트리밍의 경우 요청에서 전체 비디오 대신 한 번에 데이터 범위를 지정해야 합니다. 이는 HTTP 206 부분 콘텐츠 응답을 반환하는 Accept-Ranges HTTP 헤더를 통해 지원됩니다. 이에 대한 지원은 Azure 저장소 서비스version '2011-08-18'가 나올 때까지 제공되지 않았기 때문에 전체 파일이 먼저 다운로드되었습니다. SDK 또는 REST API(x-ms-version 헤더를 통해)를 사용할 때 버전을 지정할 수 있지만 URL에서 <video> 태그를 가리키고 싶었던 공개 익명 액세스의 경우에는 이것이 옵션이 아니었습니다.

전역 기본 버전 설정



대신 SDK 중 하나 또는 'Set Blob Service Properties' REST API 메서드를 사용하여 계정 수준에서 전역적으로 기본 버전을 설정할 수 있습니다. 이것은 hinted at here 이지만 특히 공용 익명 액세스에 대해 문서에서 완전히 설명되지 않은 부분입니다. 버전을 2011-08-18 이상으로 설정하여 REST/SDK 호출을 수행하면 스토리지 계정이 이제 범위 요청을 지원하고 스트리밍이 예상대로 작동합니다.

blobServiceClient.setProperties({
    defaultServiceVersion: "2021-04-10"
})
.then(res => console.log("Set Properties response", res))
.catch(err => console.error("Set Properties error", err));


How to set the default service version via the JavaScript SDK.





With the correct default storage version set, the video can start playing immediately (note the response status code for the video).

Note: To set the default version you will probably need a PUT CORS rule on your storage account and a role assignment for the identity making the call. Storage Account Contributor should do the trick.



보너스: 부분 콘텐츠 응답을 통해 사용자가 비디오를 스크러빙할 수도 있습니다.

컨텐츠 타입



알아야 할 또 다른 문제는 Blob의 콘텐츠 유형이 올바르게 설정되었는지 확인하는 것입니다. 이것은 일반적으로 업로드 중에 적절하게 설정되지만 video/... 유형이고 application/octet-stream 와 같은 기본값으로 설정되지 않았는지 확인하십시오.

추가 정보


  • General Azure Storage versioning best practices
  • 좋은 웹페이지 즐겨찾기