edit-icon download-icon

アプリケーションのシナリオ

最終更新日: Dec 01, 2017

前の2つのドキュメントでは、クライアントとサーバーの相対的な操作について説明しました。ここでは、クライアントとサーバーを接続して使用する方法について説明します。このドキュメントに進む前に、前の2つのドキュメントを読むことをお勧めします。

ビデオ監視

序文では、ネットワークカメラのようなデバイスを紹介しました。その機能と使用方法は次のとおりです。

手順

Procedure

この機能には、ネットワークカメラ、アプリケーションサーバー、Alibaba Cloud Object Storage Service(OSS)の3つの役割があります。ネットワークカメラは、OSS MEDIA C SDKのクライアント部分を使用し、アプリケーションサーバは、OSS C MEDIA SDKのサーバ部分を使用します。

以下は、ネットワークカメラでキャプチャしたビデオクリップをアップロードする手順です。

  1. OSS上でビデオクリップをアップロードするには、ネットワークカメラが許可を得るためにアプリケーションサーバーにネットワーク要求を送信します。

  2. プリケーションサーバーは要求を受信すると、アップロード許可がネットワークカメラに許可されていることを確認するためのチェックを実行し、特定の有効期間のトークンを要求し、OSS MEDIA C SDKのget_tokenインターフェースを介してAlibaba Cloudからのアップロード許可のみを要求します。

  3. Alibaba Cloudは、アプリケーションサーバーからトークンを取得する要求を受信すると、ユーザーの構成をチェックします。チェックで要求が許可されていることが確認された場合、OSSへのアップロード許可と指定された期間の唯一の有効性を持つ一時トークン(一時アクセスキーID、一時アクセスキーシークレット、および一時STSトークンを含む)を発行し、トークンをアプリサーバーに送信します。

  4. テンポラリトークンが受信されると、アプリケーションサーバはトークンをネットワークカメラに転送します。

  5. ネットワークカメラがトークンを取得すると、OSS MEDIA C SDKクライアントのoss_media_writeインターフェイスを介してOSSにビデオファイルをアップロードできます。

  6. また、C SDKのサーバー部分を使用するか、アプリケーションサーバー上でJava、C#、Go、Python、PHP、Ruby SDKを使用してHTTPサービスを実装することもできます。これにより、他のユーザーがWebページ上のさまざまなビデオファイルを表示および管理するのに役立ちます。

サンプルコード

クライアントとサーバー上の操作をシミュレートする簡単なサンプルプロジェクトは、次のとおりです。

  1. char* global_temp_access_key_id = NULL;
  2. char* global_temp_access_key_secret = NULL;
  3. char* global_temp_token = NULL;
  4. /* Authorization function */
  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. /* Effective time of this authorization */
  12. file->expiration = time(NULL) + 300;
  13. }
  14. /* Simulate sending a token to the client from the server */
  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. /* Server logic: Get a temporary token from Alibaba Cloud and send it to the client */
  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. /* Request a temporary authorization token from Alibaba Cloud */
  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. /* Simulate sending the temporary token to the client */
  46. send_token_to_client(token);
  47. }
  48. /* Client logic: Use the temporary token to operate on files after the temporary token is obtained from the server */
  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. /* Open the object */
  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. /* Write an object */
  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. /* Close the object and release the resource */
  73. oss_media_file_close(file);
  74. }
  75. }

注意:

  • [RAM コンソール]にログオンします。左側のナビゲーションペインでロールをクリックします。役割を探して、管理をクリックします。基本情報ページに移動すると、ポリシーが利用可能になります。

  • パーミッションの正確な制御が必要ない場合は、単純なoss_media_get_token インターフェースを使用できます。 パスパラメータは /*で、モードパラメータはrwaです。

  • 詳細についてはRAM and STS Guideを参照してください。