用於動態攝取的源文件上傳 API

在本主題中,您將學習如何使用用於動態提取的源文件上傳API將視頻添加到您的視頻雲帳戶。源文件上傳API提供了通過Dynamic Ingest將源文件上傳(“推送”)到Video Cloud的功能。

簡介

為了通過源文件上傳進行提取,Brightcove提供了一個S3存儲桶,您可以將視頻和資產文件上傳到其中,然後Dynamic Ingest以與從您自己的S3存儲桶或URL中提取視頻相同的方式從S3存儲桶中提取視頻。下圖顯示了基本動態攝取和帶有源文件上傳的攝取工作流之間的區別。

工作流程差異
工作流程差異

常問問題

暫時將視頻存儲多長時間?這些URL何時無效?
視頻在上傳後24小時後會從臨時存儲區中刪除,並且這些URL不再有效。
返回的 S3 憑據多長時間Dynamic Ingest API有效的?
S3憑據在API發送後也有效24小時。
24小時後是否從S3存儲桶中物理刪除了視頻文件?
成功提取視頻後,它們是否會從S3存儲桶中刪除?
24小時後,無論是否成功提取所有視頻,它們都會從臨時存儲中刪除。
知道 URL 的人可以公開訪問臨時存儲中的視頻嗎?
沒有安全憑證,有什麼方法可以下載或觀看臨時存儲中的視頻?
與其他Brightcove客戶共享訪問臨時存儲的安全憑證嗎?
不可以,任何使用臨時存儲的客戶都將獲得唯一的安全憑證。
其他Brightcove客戶是否可以使用自己的安全憑證訪問臨時存儲區中的我的視頻?
否,安全憑證僅提供對您推送到臨時存儲的視頻的訪問。
用於文件上傳的S3存儲桶位於哪個區域?
US-EAST-1(固定)。

來源檔案名稱

為避免在Brightcove Player中訪問視頻和資產時出現問題,應避免在源文件名中使用任何特殊字符,無論是視頻,圖像還是文本軌道(WebVTT文件)。這也適用於遠程資產。文件名應僅包括以下內容:

  • 單字節字母(大寫或小寫)
  • 號碼
  • 破折號(-)和下劃線(_)
  • 空間如果它們是 URL 編碼的

驗證

獲取動態攝取客戶端憑據的最簡單方法是通過API 身份驗證的 Studio 管理頁面 .對於API權限,您至少需要:

  • CMS>視頻閱讀
  • 動態提取>創建
  • 動態提取>推送文件(這是新的源文件上傳API)
API 驗證
API 驗證

基於推送的攝取的 Brightcove API 請求的身份驗證需要一項額外的權限其他動態攝取請求 :

      video-cloud/upload-urls/read

源文件上傳所需的全部權限是:

  • 視頻雲/視頻/創建
  • 視頻雲/視頻/閱讀
  • 視頻雲/視頻/更新
  • video-cloud / upload-urls / read

這些權限在工作室 .或者,您可以通過發出POST請求,從OAuth API直接獲取客戶端憑據以使用源文件上傳API,如下所示:

請求網址

      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. CMS API POST請求以在Video Cloud中創建視頻對象(與基於拉取的提取相同)
  2. 動態獲取GET請求以獲取Brightcove S3存儲桶URL
  3. PUT請求將源文件上傳到Brightcove S3存儲桶
  4. 動態提取POST請求以提取源文件(與基於拉取的提取相同)

這些要求在以下各節中詳細介紹。

CMS 應用程式介面請求

CMS API請求與添加新視頻的任何動態攝取操作相同。提取新視頻需要此請求。如果要替換現有視頻或向現有視頻添加資產,則不需要此步驟-相反,您將在其他請求中使用現有視頻ID。

請求語法

這是一個POST請求:

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

參數

請求的URL參數:

  • {ACCOUNT_ID} -您的帳戶 ID

要求主體

請求正文由一個 JSON 對象組成,其中包含name(必需)和視頻的其他元數據(可選):

{
  "name": "My Video"
}

API參考了解詳情。

標頭

您需要在請求中包含的HTTP標頭是:

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

響應

響應將是一個包含視頻元數據的JSON對象。其餘動態攝取操作的重要項目是id,您將用它代替{VIDEO_ID}在對 Ingest API 的請求中。

要求提供S3網址

對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} - 返回的視頻 ID CMS API要求
  • {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 -短暫的AWS令牌,可提供寫入目標objec的功能
  • signed_url -這是一個簡寫的S3網址,如果您的視頻相對較小並且未實現分段上傳,則可以將其放到源文件中
  • api_request_url -這是您將在動態收錄POST請求中包含的主URL或圖像/文本軌道資源的URL中的URL

建議您使用適用於所使用語言的AWS開發工具包進行分段上傳。SDK適用於多種語言,包括Java,.NET,Ruby,PHP,Python,JavaScript,Go和C ++。見AWS 開發人員博客了解更多信息。

如果您要實施分段上傳,則以下文檔和示例代碼將非常有用:

這是PHP中的簡單示例:

<?php
  // AWS開發工具包(用於推送攝取)
  需要'vendor / aws-autoloader.php';
  
  使用Aws \\ S3 \\ S3Client;
  使用 Aws\\S3\\MultipartUploader;
  使用Aws \\ Exception \\ MultipartUploadException;
  
  /**
    *如本文檔所述,獲取S3信息
    *以下代碼假定已將其解碼為$ s3response
    *並且$ filePath是資產文件的本地路徑
    */
  
  s3 =新的S3Client([
      '版本'=>'最新的',
      'region'=>'us-east-1',
      '憑據'=>數組(
          'key'=> $ s3response-> access_key_id,
          '秘密'=> $ s3response-> secret_access_key,
          “令牌”	 => $ s3response-> session_token
      )
  ]);
  $ params =數組(
      'bucket'=> $ s3response-> s3-> bucket,
      '密鑰'=> $ s3response-> s3-> object_key
  );
  $ uploader =新的MultipartUploader($ this-> s3,$ filePath,$ params);
  嘗試{
      $ uploadResponse = $ uploader-> upload();
  } catch(MultipartUploadException $ e){
      echo $ e-> getMessage()。 “ \\ n”;
  }
?>

將源文件放入S3

獲取 S3 URL 後,您使用 PUT 請求上傳您的視頻文件signed_url作為目的地。

您可以使用以下內容捲曲測試 PUT 操作的命令:

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

如果您使用 Postman 將文件發送到 S3,則需要 取消選中 Content-Type 標頭

取消選中郵遞員中的標題
取消選中郵遞員中的標題

還要確保將 body type 更改為 Binary 並選擇要上傳的視頻文件:

郵遞員身體
郵遞員身體

單部分上傳與分段上傳

AWS允許單部分上傳最大5 GB的文件(文件大小沒有其他限制)。對於較大的文件,必須使用分段上傳。儘管單部分上傳更容易設置,但我們建議您盡可能使用分段上傳。這是兩者之間的區別:

  • 單部分上傳將視頻全部上傳為一個文件。單部分上傳文件大小限制為5 GB或更小。如果上載由於某種原因而中斷,則必須重新開始。
  • 分段上傳會將文件分塊推送。由於上傳可以利用多個連接,因此這樣做效率更高。此外,如果上傳中斷,則可以從剩餘的大塊中斷的地方繼續。

動態提取請求

將文件上傳到Brightcove S3存儲桶後,您將發出普通的“動態提取”請求,以從其S3位置提取文件。

請求語法

這是一個POST請求:

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

參數

請求的URL參數:

  • {ACCOUNT_ID} -您的帳戶 ID
  • {VIDEO_ID} - 返回的視頻 ID CMS API要求

要求主體

請求正文由一個 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網站 .