全部產品
Search
文件中心

:使用場景

更新時間:Aug 30, 2018

場景

在上兩節分別介紹了用戶端服務端的相關操作,接下來我們介紹如何將用戶端和服務端連接起來使用,如果您還沒有閱讀前兩節,強烈建議先閱讀前兩節,然後再閱讀本節。

視頻監控

在前言裡面,介紹了可以方便的用於網路攝影機等裝置,這裡,會詳細介紹一下如何使用。

流程

流程圖

角色包括三個,網路攝像機,應用伺服器,阿里雲Object Storage Service服務(OSS),網路攝像機內部使用OSS MEDIA C SDK的client部分,應用伺服器內部使用OSS MEDIA C SDK的server部分。

當網路攝像機拍攝了一段視頻,需要上傳到OSS。流程如下:

  1. 首先,網路攝像機嚮應用伺服器發送網路請求:要求獲取一個上傳視頻到OSS的授權。
  2. 應用伺服器收到請求後,通過檢查覺得可以給網路攝像機上傳的許可權,就通過OSS MEDIA C SDK的get_token介面,向阿里雲請求一個在特定有效期間有效,只有上傳許可權的token。
  3. 阿里雲接收到應用伺服器的獲取token請求後,通過檢查使用者的配置,如果允許,就頒發一個臨時token(包括臨時access key id,臨時access key secret和臨時sts token):只有上傳OSS的許可權,且在特定時間內有效,然後發送給應用伺服器。
  4. 應用伺服器收到臨時token後,轉寄給剛才要token的網路攝像機。
  5. 網路攝像機獲取到token後,就可以通過OSS MEDIA C SDK client部分的oss_media_write接 口上傳視頻檔案到OSS了。
  6. 還可以在應用伺服器上使用C SDK的server部分或者JAVA, C#,Go,Python,Php,Ruby等SDK實現一個HTTP服務,這樣其他人就可以在網頁上查看,管理各個視頻檔案。

範例程式碼

下面是一個簡單模擬用戶端和服務端操作的樣本程式:

  1. char* global_temp_access_key_id = NULL;
  2. char* global_temp_access_key_secret = NULL;
  3. char* global_temp_token = NULL;
  4. /* 授權函數 */
  5. static void auth_func(oss_media_file_t *file) {
  6. file->endpoint = "your endpoint";
  7. file->is_cname = 0;
  8. file->access_key_id = global_temp_access_key_id;
  9. file->access_key_secret = global_temp_access_key_secret;
  10. file->token = global_temp_token;
  11. /* 本次授權的有效時間 */
  12. file->expiration = time(NULL) + 300;
  13. }
  14. /* 模擬服務端發送token給用戶端 */
  15. static void send_token_to_client(oss_media_token_t token) {
  16. global_temp_access_key_id = token.tmpAccessKeyId;
  17. global_temp_access_key_secret = token.tmpAccessKeySecret;
  18. global_temp_token = token.securityToken;
  19. }
  20. void get_and_use_token() {
  21. oss_media_token_t token;
  22. /* 服務端邏輯:從阿里雲獲取到臨時token後發送給用戶端 */
  23. {
  24. int ret;
  25. char *policy = NULL;
  26. oss_media_config_t config;
  27. policy = "{\n"
  28. "\"Statement\": [\n"
  29. "{"
  30. "\"Action\": \"oss:*\",\n"
  31. "\"Effect\": \"Allow\",\n"
  32. "\"Resource\": \"*\"\n"
  33. "}\n"
  34. "],\n"
  35. "\"Version\": \"1\"\n"
  36. "}\n";
  37. init_media_config(&config);
  38. /* 從阿里雲請求一個臨時授權token */
  39. ret = oss_media_get_token_from_policy(&config, policy,
  40. 17 * 60, &token);
  41. if (ret != 0) {
  42. printf ("Get token failed.");
  43. return;
  44. }
  45. /* 模擬將臨時token發送給用戶端 */
  46. send_token_to_client(token);
  47. }
  48. /* 用戶端邏輯:從服務端獲取到臨時token後,使用臨時token操作檔案 */
  49. {
  50. int ret;
  51. int64_t write_size = 0;
  52. oss_media_file_t *file = NULL;
  53. char *content = NULL;
  54. char *bucket_name;
  55. char *object_key;
  56. oss_media_file_stat_t stat;
  57. content = "hello oss media file\n";
  58. bucket_name = "<your bucket name>";
  59. object_key = "key";
  60. /* 開啟檔案 */
  61. file = oss_media_file_open(bucket_name, object_key, "w", auth_func);
  62. if (file != NULL) {
  63. printf ("open file failed.");
  64. return;
  65. }
  66. /* 寫檔案 */
  67. write_size = oss_media_file_write(file, content, strlen(content));
  68. if (write_size != strlen(content)) {
  69. printf ("write file failed.");
  70. return;
  71. }
  72. /* 關閉檔案釋放資源 */
  73. oss_media_file_close(file);
  74. }
  75. }

提示:

  • Policy可以從阿里雲存取控制RAM > 角色管理 > 點擊某個角色 > 基本資料下面的方框中獲取。
  • 如果不需要精準控制許可權,可以使用更簡單的oss_media_get_token介面,其中path參數可以是”/*”, mode參數可以是”rwa”。
  • 更詳細的RAM、STS使用可以參考RAM和STS指南