메인 콘텐츠로 건너뛰기
블로그클라우드 개요리노드에서 확장 가능한 비디오 트랜스코딩: Kubernetes와 카펠라를 이용한 MP4에서 HLS로 변환하기

리노드에서 확장 가능한 비디오 트랜스코딩: Kubernetes와 카펠라를 사용한 MP4를 HLS로 변환하기

잠금해제심리스스트리밍히어로

스트리밍 플랫폼이 계속해서 우리의 스크린을 점령하고 콘텐츠 소비 방식을 혁신함에 따라 견고하고 확장 가능한 스트리밍 서비스 구축의 중요성이 그 어느 때보다 중요해졌습니다. 조직은 어떻게 여러 디바이스와 플랫폼 간의 호환성을 보장하는 동시에 비용을 절감하고 효율성을 극대화할 수 있을까요? 이 튜토리얼에서는 온디맨드 비디오 트랜스코딩에 대해 자세히 알아보겠습니다.

수요에 따라 트랜스코딩 인프라를 확장할 수 있도록 Linode Kubernetes 엔진을 사용하여 비디오 트랜스코딩을 설정하겠습니다. MP4 파일을 스트리밍 서비스에서 일반적으로 사용하는 형식인 HLS(HTTP 라이브 스트리밍)로 변환하는 과정을 살펴보겠습니다. HLS는 적응형 비트레이트 스트리밍 기능을 사용하여 디바이스나 네트워크 속도에 관계없이 원활한 재생과 일관된 시청 환경을 보장합니다. 시작하려면 mp4 파일(이미 가지고 있는 mp4 동영상 예시일 수 있음)을 사용하여 입력 버킷에 업로드한 다음 동영상 트랜스코딩을 처리하기 위해 트랜스코딩 파트너인 Capella에 전송합니다. 

Capella는 바로 배포할 수 있는 솔루션을 제공하는 Akamai 파트너사로, Akamai Compute에서 실행할 수 있습니다. 카펠라와 파트너십을 맺은 이유는 플랫폼에서 인코더를 실행하고, VOD 자산을 Object Storage에 저장하고 Akamai CDN을 통해 전송할 수 있기 때문입니다. 또한 이 파트너십을 통해 Kubernetes 및 Helm과 함께 배포할 수 있어 확장이 훨씬 쉬워졌습니다. 예를 들어, 아래 튜토리얼에서 Capella의 인코딩 머신은 작업 수에 따라 자동으로 스케일업되었다가 작업이 완료되면 다시 축소되므로 수천 달러의 유휴 컴퓨팅 시간을 절약할 수 있습니다.

전제 조건:

이 튜토리얼을 완료하려면 리노드 계정에 가입해야 합니다. 가입은 무료이며 $100 크레딧을 받을 수 있습니다!

  1. 리노드 API 토큰
  2. kubectl 설치
  3. 헬름 설치
  4. 여기에 나열된 외부 쿠버네티스 도구를 설치합니다.
  5. 아카펠라 라이선스(무료 라이선스는 이메일 sales@capellasystems.net

1단계: 쿠버네티스 클러스터 생성하기

첫 번째 단계는 인코딩을 수행할 Kubernetes 클러스터를 생성하는 것입니다. Akamai Cloud 대시보드에서 Kubernetes를 클릭한 다음 클러스터 생성을 클릭합니다.

다음으로 클러스터에 대한 몇 가지 구성을 입력해 보겠습니다. "트랜스코딩-데모"라고 부르겠습니다. 여기서 가장 가까운 지역을 선택해야 합니다. 저는 로스앤젤레스입니다. 또한 고가용성 컨트롤 플레인을 활성화하여 Kubernetes 클러스터에서 고가용성을 활성화하는 것이 좋습니다.

노드 풀 추가 섹션에서 전용 8GB 요금제에서 노드 3개를 추가해 보겠습니다. 이 세 노드는 관리 노드로, 한 노드는 자동으로 리더로 선출되고 나머지 두 노드는 관리자 이중화를 위한 노드입니다.

이를 추가하면 화면 상단에 클러스터 생성 버튼이 표시됩니다. 이를 클릭하여 Kubernetes 클러스터를 생성합니다. 참고: 몇 분 정도 걸릴 수 있습니다.

이제 Kubernetes 환경 설정이 완료되었습니다. 클라우드 관리자 대시보드에서 생성한 3개의 노드가 실행 중 상태인 것을 확인할 수 있습니다. 

다음으로, 대시보드에서 아래 링크를 클릭하여 Kubeconfig 파일을 다운로드해 보겠습니다. 로컬 머신에 다운로드됩니다. 파일을 Kubernetes 디렉토리(kubectl이 설정된 위치와 동일한 위치)로 이동해야 합니다.  

그런 다음, Kubernetes 대시보드 링크를 클릭하여 Kubernetes 대시보드를 엽니다.

이 메시지가 표시되면 방금 생성한 kubeconfig 파일로 로그인하는 옵션을 클릭해야 합니다.

왼쪽 패널에서 클러스터를 클릭하면 방금 만든 노드를 볼 수 있습니다.

2단계: 헬름 구성 파일 생성 및 편집하기

이제 캄브리아 클러스터를 쿠버네티스 환경에 배포하는 데 사용할 헬름 구성 파일을 생성하고 편집해 보겠습니다. 캠브리아 클러스터는 대량의 비디오 파일을 처리하기 위한 여러 대의 캠브리아 FTC 워크스테이션으로 구성된 확장 가능한 트랜스코딩 네트워크입니다. 캠브리아 클러스터 매니저는 네트워크 전반에서 작업을 라우팅합니다.

먼저 다음 두 명령어를 사용하여 Capella 클러스터 구성 파일 아카이브를 다운로드합니다:

curl -L -s -o capella-cluster.tgz

https://www.dropbox.com/scl/fi/160bla78xylc18wbr6xk8/capella-cluster-0.3.8.tgz?rlkey=lrmxiszcr5da02duefm2vr7cl

헬름 값 표시 capella-cluster.tgz > capellaCambriaConfig.yaml 

구성 파일에서 Capella 라이선스 키와 Linode API 토큰의 두 가지 필드를 업데이트해야 합니다.

필수 요구 사항 섹션에서 sales@capellasystems.net 으로 이메일을 보낸 후 Capella 팀으로부터 받은 라이선스 키를 ftcLicenseKey 필드에 추가합니다. 

그런 다음 linodeAPIToken 필드에 Linode API 토큰을 추가합니다(필수 요건 섹션의 링크를 사용하여 토큰을 생성하세요).

3단계: Cambria 클러스터 설치

이제 캠브리아 클러스터를 설치해야 합니다. 이 클러스터는 대용량의 동영상 파일을 처리하는 데 사용됩니다.

헬름 업그레이드 -설치 capella-cluster capella-cluster.tgz -값 capellaCambriaConfig.yaml 

상태가 배포됨으로 변경된 것을 확인할 수 있습니다.

이 시점에서, 몇 가지 컴포넌트가 Kubernetes 환경에 배포되고 있습니다. 계속하기 전에 모든 구성 요소가 배포될 때까지 몇 분 정도 기다리는 것이 가장 좋습니다.

4단계: 캠브리아 클러스터 웹 UI 열기

Kubernetes 대시보드의 왼쪽 패널에서 서비스를 클릭합니다. 그런 다음 중간 노드(포트 8161)에서 IP 주소를 복사합니다. 이 포트는 웹 UI 전용 포트입니다.

새 탭에서 "https://"를 입력한 다음 IP 주소를 붙여넣습니다. (고급 > 사이트 입력을 클릭하여 사이트를 입력해야 할 수도 있습니다). 이제 캠브리아 클러스터 웹 UI가 표시됩니다. capellaCambriaConfig.yaml 파일에서 WebUI 자격 증명을 사용하여 로그인합니다. (이 자격 증명을 찾는 방법에 대한 자세한 내용은 여기 8페이지를 참조하세요).

5단계: 입력 및 출력 버킷을 만듭니다.

mp4 동영상을 HLS 형식으로 변환하고 있다는 점을 기억하세요. 소스라고 하는 mp4 파일의 입력용 폴더와 출력이라고 하는 HLS 파일의 출력용 폴더가 있는 하나의 버킷을 만들겠습니다.

Akamai Cloud Manager로 이동하여 왼쪽 패널에서 Object Storage 을 클릭합니다. 그런 다음 버킷 생성을 클릭합니다. 이 버킷을 아카펠라라고 부르겠습니다. 위에서 Kubernetes 클러스터에 대해 선택한 것과 동일한 리전을 선택해야 합니다. 그런 다음 버킷 생성을 클릭합니다.

버킷을 만든 후에는 그 위치를 복사하여 나중에 XML 파일에 붙여넣어야 합니다. 버킷의 세부정보 버튼을 클릭한 다음 아래 그림과 같이 해당 위치 옆에 있는 복사 버튼을 클릭합니다. 나중에 필요할 것이므로 메모장에 저장하세요.

다음으로 버킷에 대한 액세스 키를 만들어야 합니다. 액세스 키를 클릭한 다음 액세스 키 만들기를 클릭합니다.

이를 아카펠라 액세스라고 부르겠습니다.

작은 팝업이 표시되고 액세스 키와 비밀 키가 표시됩니다. 나중에 필요할 것이므로 복사하여 메모장에 붙여넣으세요. 저장한 후 비밀 키를 저장했습니다를 클릭합니다.

이제 오브젝트 스토리지 버킷에 입력용과 출력용 폴더를 각각 2개씩 만들어 보겠습니다. 버킷을 클릭한 다음 폴더 만들기를 클릭합니다. 입력 폴더를 "source"라고 부르겠습니다.

출력 폴더에 대해서도 동일한 작업을 수행해 보겠습니다. 이를 "출력"이라고 부르겠습니다.

6단계: 샘플 HLS 문서의 필드를 편집합니다.

Capella에서 mp4를 HLS로 변환하기 위한 트랜스코딩 작업을 위해 이 샘플 파일을 보내주었습니다. 선택할 수 있는 샘플 파일은 더 많으니 이메일을 보낼 때 어떤 파일을 원하는지 물어보세요(위의 전제 조건 확인). 반드시 Kubernetes 폴더에 저장하세요.

액세스 키와 비밀 키를 복사하여 XML 파일의 8줄과 9줄에 있는 작업 설명 섹션에 붙여넣습니다.

업로드 설정 섹션의 234줄과 235줄에 동일한 값을 추가합니다.

231줄에 버킷 영역에 붙여넣습니다. 위 단계에서 메모장에 복사해 두었을 것입니다.

다음으로 업로드 설정 섹션에서 버킷 및 위치 필드를 업데이트해야 합니다. 227줄에서 버킷 필드를 "capella"로 업데이트하고 228줄에서 위치 필드를 "output"으로 업데이트합니다. (아카펠라라는 버킷을 만들었고 출력 폴더는 출력이라는 것을 기억하세요).

6단계: 입력 버킷에 MP4 파일 업로드하기

다음으로 입력 버킷에 MP4 파일을 업로드해 보겠습니다. 반려견의 동영상, 직접 촬영한 요리 동영상 등 어떤 mp4 파일이든 상관없습니다. 저는 flying5라는 MP4 파일을 사용하고 있습니다. Akamai Cloud Manager로 이동하여 소스 버킷에서 mp4 파일을 업로드해 보겠습니다.

이제 XML 파일로 돌아갑니다. 아래와 같이 347줄에 소스 파일의 위치를 추가해 보겠습니다.

7단계: 트랜스코딩 작업 실행

이제 트랜스코딩을 할 준비가 되었습니다! API 호출을 사용하여 트랜스코딩 작업을 실행하겠습니다. 아래의 curl 명령에서 몇 가지를 바꿔야 합니다. 먼저, Kubernetes 대시보드로 이동하여 첫 번째 노드(포트 8650)에서 IP 주소를 가져옵니다. 이 포트는 인코더 작업 통신 전용 포트입니다. 클립보드에 복사하여 저장할 곳에 붙여넣습니다(.ip 앞의 모든 것). 잠시 후에 필요할 것입니다. 

그런 다음, capellaCambriaConfig.yaml 파일에서 cambriaClusterAPIToken을 복사하여 저장합니다. curl 명령에서 usertoken 값을 API 토큰으로 바꿉니다.

그런 다음 트랜스코딩 작업 xml 파일의 이름을 추가합니다. 저는 mp4-hls-transcoding-job.xml로 저장했습니다.

터미널에서 이 명령을 실행해 보겠습니다.

curl -k -X POST "https://123.456.78.90:8650/CambriaFC/v1/Jobs/?usertoken=12345678-1234-5678-abcd-efghijklmn" -d @mp4-hls-transcoding-job.xml

작업이 실행 중인지 확인하려면 Kubernetes 대시보드를 참조해 보겠습니다. Kubernetes 대시보드로 이동하여 작업 목록 포트인 8161 포트에 대한 다음 URL을 열어 보겠습니다. 

작업이 캠브리아 클러스터 매니저에 제출될 때마다 캠브리아 웹 UI의 작업 목록에 표시됩니다.

이러한 작업은 FTC 인코딩 머신에 배포되어 실행됩니다. 이전에 대기 중인 작업이 없는 경우 캠브리아 클러스터 관리자가 자동으로 새 FTC 머신을 시작합니다. 대기 중인 잡의 수가 많으면 부하를 처리하기 위해 추가 FTC 머신이 시작됩니다.

Akamai Linode Kubernetes 요약 페이지에서 프로비저닝 중인 새 머신을 볼 수 있습니다. 머신이 프로비저닝되면 Kubernetes 대시보드의 노드 및 클러스터 관리자 웹 UI에서도 볼 수 있습니다. 사용 가능하고 클러스터에 자동으로 연결되면 작업이 FTC 머신에 배포되어 실행됩니다. WebUI 작업 목록은 진행 상황을 추적하는 데 사용할 수 있습니다.

작업이 완료되면 WebUI에서 상태가 완료로 변경된 것을 볼 수 있습니다.

서로 다른 비디오 유형을 가진 3개의 서로 다른 비디오 파일이 생성됩니다. Akamai 콘솔로 돌아가면 출력 폴더에 몇 개의 폴더가 있는 출력 파일을 볼 수 있습니다. 한 폴더에는 오디오가, 다른 폴더에는 비디오가, 다른 폴더에는 메타데이터가 있습니다.

HLS 지원 플레이어를 통해 재생할 수 있습니다(브라우저 또는 타사 플러그인일 수 있음). 

비디오 트랜스코딩은 최신 멀티미디어 전송의 중요한 측면이며, 이 튜토리얼의 단계를 따르면 이제 이 문제를 쉽게 해결할 수 있습니다! 

요약하기

이 비디오 트랜스코딩 예시는 Linode Kubernetes 엔진 (LKE)을 사용한 최신 멀티미디어 전송의 유연성과 성능을 보여줍니다. 인코딩 머신이 자동으로 가동되어 작업 수에 맞게 확장되었다가 작업이 완료되면 다시 축소되어 LKE를 사용하면 상당한 비용을 절감할 수 있음을 보여줍니다.

비디오를 성공적으로 트랜스코딩한 후에는 전 세계에 전략적으로 분산 배치된 Akamai의 서버 네트워크를 활용하여 시청자의 지리적 위치에 관계없이 HLS 포맷 비디오가 시청자에게 빠르고 원활하게 전송되도록 보장할 수 있습니다. 이렇게 하면 콘텐츠 전송을 Akamai의 분산 엣지 서버로 오프로드하여 오리진 서버의 부하를 완화하는 데 도움이 됩니다. 이렇게 하면 비디오 전송의 성능과 확장성이 향상될 뿐만 아니라 지연 시간과 버퍼링을 줄여 전반적인 사용자 경험도 개선됩니다. 또한, 시청자의 네트워크 상태에 따라 비디오 품질을 자동으로 조정하는 적응형 비트레이트 스트리밍과 같은 고급 기능을 제공하여 다양한 디바이스와 연결 속도에서 원활한 재생을 보장하는 Akamai CDN을 제공합니다. 이는 대역폭이 제한된 지역이나 모바일 디바이스에 고품질 비디오 콘텐츠를 전송하는 데 특히 중요합니다.

다음 단계

이 튜토리얼에서는 Akamai를 사용하여 동영상을 MP4 포맷에서 HLS 포맷으로 트랜스코딩했습니다. 이렇게 변환하면 스트리밍을 위한 다양한 디바이스와의 호환성을 보장할 수 있습니다. 비디오 트랜스코딩에 사용할 수 있는 입력 및 출력 형식의 전체 목록은 여기에서 확인할 수 있습니다. 

동영상 트랜스코딩을 구현하는 방법에 대해 자세히 알아보려면 뉴스레터에 가입하거나 트위터 또는 LinkedIn에서 연결하거나 YouTube 채널을 구독하세요.

이러한 기술 가이드 외에도, 여러분 또는 여러분의 조직이 비디오 트랜스코딩 및 Kubernetes 솔루션의 최적화를 고려하고 있다면, 가입하여 100달러의 무료 크레딧을 받아 Linode의 솔루션을 사용해 볼 수 있습니다. 

내용

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *