동적 인제스트를 위한 소스 파일 업로드 API

이 항목에서는 동적 인제스트용 소스 파일 업로드 API를 사용하여 Video Cloud 계정에 비디오를 추가하는 방법에 대해 알아봅니다. 소스 파일 업로드 API는 동적 인제스트를 통해 소스 파일을 비디오 클라우드로 업로드 (“푸시”) 하는 기능을 제공합니다.

서문

소스 파일 업로드를 통한 수집의 경우 Brightcove는 비디오 및 자산 파일을 업로드 할 수있는 S3 버킷을 제공하고 Dynamic Ingest는 자체 S3 버킷 또는 URL에서와 동일한 방식으로 S3 버킷에서 비디오를 가져옵니다. 아래 다이어그램은 기본 동적 수집과 소스 파일 업로드를 통한 수집을위한 워크 플로의 차이점을 보여줍니다.

워크플로 차이점
워크플로 차이점

자주하는 질문

동영상은 일시적으로 저장되는 기간과 URL은 언제 무효화 되나요?
동영상은 업로드 된 후 24 시간이 지나면 임시 저장소에서 삭제되며 그 이후에는 URL이 더 이상 유효하지 않습니다.
Dynamic Ingest API유효한 사람이 S3 자격 증명을 반환한 기간은 얼마나 됩니까?
S3 자격 증명은 API가 보낸 후 24 시간 동안도 유효합니다.
24 시간 후에 비디오 파일이 S3 버킷에서 물리적으로 삭제됩니까?
동영상이 성공적으로 수집 된 후 S3 버킷에서 삭제됩니까?
모든 동영상은 성공적으로 처리되었는지 여부에 관계없이 24 시간 후에 임시 저장소에서 삭제됩니다.
URL이 있는 사람이 임시 저장소에 있는 비디오에 공개적으로 액세스할 수 있습니까?
아니요
보안 자격 증명없이 임시 저장소에서 비디오를 다운로드하거나 볼 수있는 방법이 있습니까?
아니요
다른 Brightcove 고객과 공유되는 임시 스토리지에 액세스하기위한 보안 자격 증명이 있습니까?
아니요, 임시 저장소를 사용하는 모든 고객에게는 고유 한 보안 자격 증명이 제공됩니다.
다른 Brightcove 고객이 자신의 보안 자격 증명을 사용하여 임시 저장소에있는 내 비디오에 액세스 할 수있는 방법이 있습니까?
아니요, 보안 자격 증명은 임시 저장소로 푸시 한 동영상에 대한 액세스 만 제공합니다.
파일 업로드 용 S3 버킷이 상주하는 리전은 어디입니까?
US-EAST-1 (수정 됨).

소스 파일 이름

Brightcove Player에서 비디오 및 자산에 액세스하는 데 문제가 발생하지 않도록하려면 비디오, 이미지 또는 텍스트 트랙 (WebVTT 파일)에 관계없이 소스 파일 이름에 특수 문자를 사용하지 않아야합니다. 이는 원격 자산에도 적용됩니다. 파일 이름에는 다음 만 포함되어야합니다.

  • 싱글바이트문자 (대문자 또는 소문자)
  • 번호
  • 대시 (-) 및 밑줄 (_)
  • URL로 인코딩된경우 공백

인증

동적 인제스트의 클라이언트 자격 증명을 얻는 가장 쉬운 방법은 API 인증을 위한 Studio 관리자 페이지를 이용하는것입니다. API 권한의 경우 최소한 다음이 필요합니다.

  • CMS> 비디오 읽기
  • 동적 수집> 만들기
  • Dynamic Ingest> Push Files (새로운 소스 파일 업로드 API)
API 인증
API 인증

푸시 기반 수집을 위한 Brightcove API 요청에 대한 인증에는다른 동적 인제스트 요청에 대한 요청보다 한 가지 추가 권한이 필요합니다 .

      video-cloud/upload-urls/read

소스 파일 업로드에 필요한 전체 권한 세트는 다음과 같습니다.

  • 비디오 클라우드/비디오/생성
  • 비디오 클라우드/비디오/읽기
  • 비디오-클라우드/비디오/업데이트
  • 비디오 클라우드 / 업로드 URL / 읽기

이러한 권한은 Studio에서 사용할 수있습니다. 또는 다음과 같이 POST 요청을 수행하여 OAuth API에서 직접 소스 파일 업로드 API를 사용하기위한 클라이언트 자격 증명을 얻을 수 있습니다.

요청 URL

      https://oauth.brightcove.com/v4/client_credentials

헤더

  • Authorization: BC_TOKEN {YOUR_BC_TOKEN}
  • 콘텐츠 유형: 응용 프로그램/json

요청 본문

{
  "type": "credential",
  "maximum_scope": [
  {
    "identity": {
      "type": "video-cloud-account",
      "account-id": {YOUR_ACCOUNT_ID}
    },
    "operations": [
      "video-cloud/upload-urls/read",
      "video-cloud/video/create",
      "video-cloud/video/read",
      "video-cloud/video/update",
      "video-cloud/ingest-profiles/profile/write",
      "video-cloud/ingest-profiles/account/write",
      "video-cloud/ingest-profiles/profile/read",
      "video-cloud/ingest-profiles/account/read"
    ]
  }
  ],
  "name": "Source File Upload Credentials"
}

API 요청

푸시 기반 수집과 관련된 네 가지 API 요청이 있습니다.

  1. Video Cloud에서 비디오 객체를 생성하기위한 CMS API POST 요청 (풀 기반 수집과 동일)
  2. Brightcove S3 버킷 URL을 얻기위한 Dynamic Ingest GET 요청
  3. 소스 파일을 Brightcove S3 버킷에 업로드하기위한 PUT 요청
  4. 소스 파일을 수집하기위한 동적 수집 POST 요청 (풀 기반 수집과 동일)

이러한 요청은 다음 섹션에서 자세히 설명합니다.

CMS API 요청

CMS API요청은 새 비디오를 추가하기 위한 모든 동적 인제스트 작업에 대한 요청과 동일합니다. 이 요청은 새 동영상을 수집하는 데 필요합니다. 기존 동영상에 자산을 교체하거나 추가하는 경우이 단계가 필요하지 않습니다. 대신 다른 요청에서 기존 동영상 ID를 사용합니다.

요청 구문

이것은 다음에POST대한 요청입니다.

      https://cms.api.brightcove.com/v1/accounts/{ACCOUNT_ID}/videos

매개변수

요청에 대한 URL 매개 변수:

  • {ACCOUNT_ID} - 계정 ID

요청 본문

요청 본문은 동영상name (필수) 및 기타 동영상 메타데이터 (선택 사항) 를 포함하는 JSON 객체로 구성됩니다.

{
  "name": "My Video"
}

자세한 내용은 API참조를 참조하십시오.

헤더

요청에 포함시켜야하는 HTTP 헤더는 다음과 같습니다.

  • Authorization: Bearer {ACCESS_TOKEN}
  • Content-Type: application/json

대응

응답은 동영상 메타 데이터를 포함하는 JSON 개체입니다. 나머지 Dynamic Ingest 작업의 중요한 항목은id , 당신이{VIDEO_ID} Ingest API에 대한 요청에서.

S3 URL 요청

Ingest API에 대한 첫 번째 요청은 소스 파일을 Brightcove S3 버킷에 넣은 다음 거기에서 Video Cloud로 수집하는 데 필요한 정보를 검색합니다.

요청 구문

이것은 다음에GET대한 요청입니다.

https://ingest.api.brightcove.com/v1/accounts/{ACCOUNT_ID}/videos/{VIDEO_ID}/upload-urls/{SOURCE_NAME}

매개변수

요청에 대한 URL 매개 변수:

  • {ACCOUNT_ID} - 계정 ID
  • {VIDEO_ID} - CMS API요청에서 반환된 동영상 ID
  • {SOURCE_NAME} - 비디오 소스 파일 이름 - 이름에는?& , #또는 공백과 같은 URL 예약 문자가 포함되어서는 안 됩니다.

헤더

요청에 포함시켜야하는 HTTP 헤더는 다음과 같습니다.

  • Authorization: Bearer {ACCESS_TOKEN}

대응

응답은 다음과 유사한 JSON 객체입니다.

{
  "bucket": "ingestion-upload-production",
  "object_key": "57838016001/4752143002001/ed5a5ba0-1d97-4f95-a8ec-cbb786b04a37/greatblueheron.mp4",
  "access_key_id": "ACCESS_KEY_APPEARS_HERE",
  "secret_access_key": "SECRET_ACCESS_KEY_APPEARS_HERE",
  "session_token": "FQoDYXdzEKf//////////wEaDKR0wDgquq/qvkZgbyKOA7URC/9io6cmRBDkhbvxoHIKkPZlK/9YNvdWcESPkm75/2PvU6FV1Mc+/XENPzY8KgvP86MBJNxYLPdkuP1phgHs2Yh2p1KIDcQSCZJ3i6i9m4S14ewjWIugYLYDQi6CG+3fiFwfzbKT5jes1kh24m9BQQIuvVOiM1GLTldyDzlrdDopJkdYd4IEU7FU36CUT7RL/aeMwR2Usk56nwqyqkkQHPmvqmGyiLdrD3OrIbUU+6+ZP4usS9dbV3eAqOWDIk3HCN+Kuc9f/eUWhY21ftNDXWgasqQqXwPRs3T1i/hoiIKODbzr8F",
  "signed_url": "https://ingestion-upload-production.s3.amazonaws.com/57838016001/4752143002001/ed5a5ba0-1d97-4f95-a8ec-cbb786b04a37/greatblueheron.mp4?AWSAccessKeyId=ACCESS_KEY_HERE&Expires=1475673952&Signature=%2Fsr5cV%2FVOfGCBkodol9xQIKlbu4%3D",
  "api_request_url": "https://ingestion-upload-production.s3.amazonaws.com/57838016001/4752143002001/ed5a5ba0-1d97-4f95-a8ec-cbb786b04a37/greatblueheron.mp4"
}

응답의 항목은 다음과 같습니다.

  • bucket - S3 버킷 이름
  • object_key -파일 업로드를위한 객체 키 (멀티 파트 업로드를위한 도착 URL 구성에 사용됨)
  • access_key_id -업로드 요청 인증에 사용되는 액세스 키 (멀티 파트 업로드에 사용됨)
  • secret_access_key -업로드 요청 인증에 사용되는 비밀 액세스 키 (멀티 파트 업로드에 사용됨)
  • session_token -대상 objec에 쓸 수있는 기능을 제공하는 수명이 짧은 AWS 토큰
  • signed_url -비교적 작은 동영상이 있고 멀티 파트 업로드를 구현하지 않는 경우 소스 파일을 넣을 수있는 S3 단축 URL입니다.
  • api_request_url -마스터 URL에 대한 Dynamic Ingest POST 요청에 포함 할 URL 또는 image / text_tracks 자산에 대한 URL입니다.

사용중인 언어에 대해 AWS SDK를 사용하여 멀티 파트 업로드를 사용하는 것이 좋습니다. SDK는 자바, .NET, 루비, PHP, 파이썬, 자바스크립트, Go 및 C++를 비롯한 다양한 언어로 사용할 수 있습니다. 참조 AWS 개발자 블로그자세한 내용은.

멀티 파트 업로드를 구현하는 경우 다음 문서와 샘플 코드가 유용합니다.

다음은 PHP의 간단한 예입니다.

 <  ?PHP
  // AWS SDK (푸시 수집 용)
  'vendor / aws-autoloader.php'가 필요합니다.
  
  Aws\ S3\ S3 클라이언트를 사용하십시오.
  Aws\ S3\ 멀티파트 업로더 사용;
  Aws\ 예외\ 멀티파트 업로드 예외 사용;
  
  /**
    *이 문서에서 위에 설명 된대로 S3 정보 얻기
    * 아래 코드는 $ s3response로 디코딩되었다고 가정합니다.
    * 그리고 $ filePath는 자산 파일의 로컬 경로입니다.
    */
  
  s3 = 새로운 S3 클라이언트 ([
      '버전'=> '최신',
      '지역'=> 'us-east-1',
      '신임 정보'=> array (
          '키'=> $ s3response-> access_key_id,
          '비밀'=> $ s3response-> secret_access_key,
          '토큰'	 => $ s3response-> session_token
      )
  ]);
  $ params = array (
      'bucket'=> $ s3response-> s3-> bucket,
      '키'=> $ s3response-> s3-> object_key
  );
  $ uploader = new MultipartUploader ($ this-> s3, $ filePath, $ params);
  {
      $ uploadResponse = $ uploader-> upload ();
  } catch (MultipartUploadException $ e) {
      echo $ e-> getMessage (). "\\엔";
  }
?>

소스 파일을 S3에 PUT

S3 URL을 가져온 후 를 대상으로 사용하여 비디오 파일을 업로드하기 위한 PUT 요청을 보냅니다. signed_url

다음 curl명령을 사용하여 PUT 작업을 테스트할 수 있습니다.

      curl -X PUT "SIGNED_URL_GOES_HERE" --upload-file FILE_PATH_FOR_LOCAL_ASSET_GOES_HERE 

Postman을 사용하여 파일을 S3로 보내는 경우 다음을 수행해야 합니다. 체크 해제컨텐츠 타입머리글 :

Postman에서 헤더 선택 취소
Postman에서 헤더 선택 취소

또한 본문 유형을 바이너리 로 변경하고 업로드할 비디오 파일을 선택해야 합니다.

우편 배달부 몸
우편 배달부 몸

단일 및 다중 부분 업로드

AWS는 최대 5GB 크기의 파일에 대한 단일 부분 업로드를 허용합니다 (파일 크기에 대한 다른 제한은 없음). 더 큰 파일의 경우 멀티 파트 업로드를 사용해야합니다. 단일 부분 업로드는 설정하기가 다소 쉽지만 가능하면 멀티 파트 업로드를 사용하는 것이 좋습니다. 두 가지의 차이점은 다음과 같습니다.

  • 단일 부분 업로드는 비디오를 모두 하나의 파일로 업로드합니다. 단일 부분 업로드는 5GB 이하의 파일 크기로 제한됩니다. 어떤 이유로 업로드가 중단 된 경우 다시 시작해야합니다.
  • 멀티 파트 업로드는 파일을 청크로 푸시합니다. 업로드가 여러 연결을 활용할 수 있기 때문에 더 효율적입니다. 또한 업로드가 중단 된 경우 나머지 청크와 함께 중단 된 부분부터 다시 시작할 수 있습니다.

동적 수집 요청

파일이 Brightcove S3 버킷에 업로드 된 후 S3 위치에서 파일을 수집하기 위해 일반적인 Dynamic Ingest 요청을합니다.

요청 구문

이것은 다음에POST대한 요청입니다.

      https://ingest.api.brightcove.com/v1/accounts/{ACCOUNT_ID}/videos/{VIDEO_ID}/ingest-requests

매개변수

요청에 대한 URL 매개 변수:

  • {ACCOUNT_ID} - 계정 ID
  • {VIDEO_ID} - CMS API요청에서 반환된 동영상 ID

요청 본문

요청 본문은 다음을 포함하는 JSON 객체로 구성됩니다. master (필수) 수집 작업에 대한 세부 정보입니다. 그만큼url ~을 위해master될 것이다api_request_url S3 버킷 정보 요청에 의해 반환됨

      {
      "master": {
          "url": "https://ingestion-upload-prod.s3.amazonaws.com/12345/5678/3712cd37504911ab06a77a26a387ce/source.mp4"
      },
      "profile": "multi-platform-standard-static",
      "capture-images": true
      }

자세한 내용은 API참조를 참조하십시오.

헤더

요청에 포함시켜야하는 HTTP 헤더는 다음과 같습니다.

  • Authorization: Bearer {ACCESS_TOKEN}
  • Content-Type: application/json

대응

응답에는 다음이 포함됩니다. job_id처리 요청을 통해 상태를 추적할 수 있습니다. 알림 .

샘플 코드

푸시 기반 Dynamic Ingest를 시작하는 데 도움이되도록 Java 및 Python으로 몇 가지 샘플 앱을 만들었습니다. Github 사이트에서 찾을 수있습니다.