구글 클라우드 라이브 스트림 API 연동 가이드

개요

본 문서는 구글 클라우드의 라이브 스트림 API를 이용한 라이브 스트림 영상에 PallyCon 멀티DRM 패키징을 연동하는 방법을 설명합니다. 라이브 스트림 API는 메자닌 라이브 신호를 여러 디바이스 플랫폼에서 사용할 수 있도록 DASH(Dynamic Adaptive Streaming over HTTP), HLS(HTTP Live Streaming) 등의 스트리밍 포맷으로 트랜스코딩합니다.

연동 샘플

PallyCon GCP 라이브 스트림 연동 샘플 Github 저장소

PallyCon GCP 라이브 스트림 연동 샘플API 클라이언트 라이브러리를 이용하여 구글 클라우드 라이브 스트림 API v1과 PallyCon 멀티 DRM을 연동하는 방법을 보여줍니다. 본 가이드는 DRM 연동에 중점을 두었기 때문에 fmp4 포맷의 라이브 스트림에 Widevine, PlayReady, FairPlay DRM을 적용하는 간단한 시나리오만 사용하였으며, 라이브 스트림 API v1 기능에 대한 자세한 내용은 레퍼런스 링크를 참고하시기 바랍니다.

사전 요구 사항

샘플 프로젝트 실행 방법

  1. 샘플 리포지토리를 복제하거나 다운로드합니다.
  2. Visual Studio에서 PallyConGoogleLiveStreamSample.sln 파일을 열고 실행할 활성 프로젝트를 선택합니다.
  3. 구글 클라우드 프로젝트, 버킷 정보, PallyCon KMS 관련 정보가 있는지 확인합니다.
  4. 메인 메소드 상단에 있는 변수 값을 설정합니다.
  5. 프로젝트를 실행합니다.
  6. 콘솔에 출력되는 <RTMP input endpoint uri>를 복사합니다.
  7. 스트리밍 상태가 AwaitingInput이고 채널이 준비되었습니다라는 출력이 표시되면 아래와 같이 입력 엔드포인트로 라이브 스트림을 전송합니다.
    $ ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
      -acodec aac -vcodec h264 -f flv <RTMP input endpoint uri>
    
  8. Google Cloud 콘솔의 Buckets 페이지에서 패키징 결과를 확인합니다.

PallyConKMSClientWrapper

C++ 라이브러리(PallyConKmsClient_MD.lib)를 래핑하여 PallyCon KMS 서버와 통신하기 위한 C++/CLI 프로젝트입니다. getPackagingInfoFromKmsServer 함수를 사용하면 KMS 서버로부터 패키징 정보를 가져올 수 있습니다.

bool PallyConKmsClientWrapper::getPackagingInfoFromKmsServer(String^ content_id, String^% key_id, String^% key, String^% iv, String^% hls_key_uri, String^% widevine_pssh, String^% playready_pssh)
{
	try
	{
		ContentPackagingInfo packInfos = _kmsClient->getContentPackagingInfoFromKmsServer(
			msclr::interop::marshal_as<std::string>(content_id), "", PackType::DASH | PackType::HLS);
		key_id = gcnew String(packInfos.keyId.c_str());
		key = gcnew String(packInfos.key.c_str());
		iv = gcnew String(packInfos.iv.c_str());
		hls_key_uri = gcnew String(packInfos.hlsKeyUri.c_str());
		widevine_pssh = gcnew String(packInfos.pssh_widevine.c_str());
		playready_pssh = gcnew String(packInfos.pssh_playready.c_str());
	}
	catch (std::exception& e)
	{
		std::cout << e.what();
	}

	return true;
}

참고 링크

이전
다음