このトピックでは、OSS SDK for Media-Cのシナリオについて説明します。
重要 まず、[クライアント操作] と [サーバー操作] を理解することを推奨します。
ビデオファイルをOSSにアップロードする
序文に記載されているように、OSS SDK for Media-Cは、ネットワークカメラなどのデバイスに使用できます。
OSS SDK for Media-Cを使用して、ネットワークカメラでキャプチャしたビデオファイルをOSSにアップロードするには、次の手順を実行します。
説明 この手順では、ネットワークカメラはOSS SDK for Media-Cで定義されたクライアントとして機能し、アプリケーションサーバーはOSS SDK for Media-Cで定義されたサーバーとして機能します。
- ネットワークカメラがアプリケーションサーバーにリクエストを送信し、OSSにビデオをアップロードする権限を取得します。
- アプリケーションはリクエストを受信し、OSS SDK for Media-Cが提供するget_token操作を使用して、ネットワークカメラがAlibaba Cloudから特定の期間内にのみオブジェクトをアップロードできるようにするトークンをリクエストします。
- Alibaba Cloudは、アプリケーションサーバーからリクエストを受信し、ユーザーの設定を確認し、一時的なAccessKey ID、AccessKey secret、およびSTSトークンを含む一時的なトークンを生成し、そのトークンをアプリケーションサーバーに返します。 この一時トークンにより、ネットワークカメラはオブジェクトをOSSにのみアップロードでき、特定の期間内にのみ有効です。
- アプリケーションは、一時トークンを受信し、トークンをネットワークカメラに送信する。
- ネットワークカメラはトークンを受信し、OSS SDK for Media-Cのクライアント部分が提供するoss_media_write操作を使用して、ビデオファイルをOSSにアップロードします。 説明 アプリケーションサーバーでOSS SDK for Media-Cのサーバー部分を使用したり、OSS SDK for Java、Go、Python、またはRubyを使用してHTTPサービスを実装したりすることもできます。 このようにして、アップロードされたビデオファイルをwebページで表示および管理できます。
サンプルコード
次のコードでは、前のセクションで説明した操作をクライアントとサーバーで実行する方法の例を示します。
char * global_temp_access_key_id = NULL;
char * global_temp_access_key_secret = NULL;
char * global_temp_token = NULL;
/* 承認機能 * /
static void auth_func(oss_media_file_t * ファイル) {
file->endpoint = "your endpoint";
ファイル->is_cname = 0;
ファイル->access_key_id = global_temp_access_key_id;
ファイル->access_key_secret = global_temp_access_key_secret;
file->token = global_temp_token;
/* 一時トークンの有効期間を指定します。 */
ファイル-> 有効期限=時間 (NULL) + 300;
}
/* トークンをクライアントに送信します。 * /
static void send_token_to_client(oss_media_token_t token) {
global_temp_access_key_id = token.tmpAccessKeyId;
global_temp_access_key_secret = token.tmpAccessKeySecret;
global_temp_token = token.securityToken;
}
void get_and_use_token() {
oss_media_token_tトークン;
/* サーバーはAlibaba Cloudから一時トークンを取得し、トークンをクライアントに送信します。 */
{
int ret;
char * policy = NULL;
oss_media_config_t config;
policy = "{\n"
"\" ステートメント \": [\n"
"{"
"\" アクション \": \" oss:*\",\n"
"\" 効果 \": \" 許可 \"、\n"
"\" リソース \": \" *\"\n"
"}\n"
"],\n"
"\" バージョン \": \" 1\"\n"
"}\n";
init_media_config(&config);
/* サーバーが一時トークンを要求します。 */
ret = oss_media_get_token_from_policy(&config, policy,
17*60、&トークン);
if (ret != 0) {
printf ("Get token failed.");
return;
}
/* サーバーは、取得した一時トークンをクライアントに送信します。 */
send_token_to_client (トークン);
}
/* クライアントは、サーバーから受信したトークンを使用して、ファイルに対する操作を実行します。 */
{
int ret;
int64_t write_size = 0;
oss_media_file_t * file = NULL;
char * content = NULL;
char * bucket_name;
char * object_key;
oss_media_file_stat_t stat;
content = "hello oss media file\n";
bucket_name = "<バケット名>";
object_key = "key";
/* クライアントがファイルを開きます。 */
file = oss_media_file_open(bucket_name, object_key, "w", auth_func);
if (file != NULL) {
printf ("ファイルのオープンに失敗しました。");
return;
}
/* クライアントがファイルにデータを書き込みます。 */
write_size = oss_media_file_write (ファイル、コンテンツ、strlen (コンテンツ));
if (write_size != strlen(content)) {
printf ("ファイルの書き込みに失敗しました。");
return;
}
/* クライアントはファイルを閉じてリソースを解放します。 */
oss_media_file_close (ファイル);
}
}
説明
- 次の方法で、コードに含まれるRAMポリシーを取得できます。RAMコンソールにログインし、[RAMロール] をクリックし、任意のRAMロールの [ポリシードキュメント] タブからRAMポリシーを取得します。
- 正確な権限制御が必要ない場合は、oss_media_get_token操作を使用できます。 この場合、pathパラメーターを /* に、modeパラメーターをrwaに設定できます。