OSS MEDIA C SDKは、クライアント、サーバー、HLSの3つの部分に分かれています。 主にクライアントに関連する操作をカバーします。 その他の操作については、以下のドキュメントをご参照ください。
インターフェイス
クライアントに関連する操作インターフェイスはすべてoss_media_file.hに配置されます。 現在、次のインターフェイスが提供されています。
- oss_media_file_open
- oss_media_file_stat
- oss_media_file_tell
- oss_media_file_seek
- oss_media_file_read
- oss_media_file_write
- oss_media_file_close
次に、さまざまなインターフェースの機能と使用ノートを詳細に示します。
基本的な構造
/**
* OSS MEDIAファイルのメタデータ (ファイルの長さ、場所、タイプなど)
* /
typedef struct {
int64_tの長さ;
int64_t pos;
char * タイプ;
} oss_media_file_stat_t;
/**
* OSSメディアファイルの属性
* /
typedef struct oss_media_file_s {
void * ipc;
char * エンドポイント;
int8_t is_cname;
char * bucket_name;
char * object_key;
char * access_key_id;
char * access_key_secret;
char * token;
char * モード;
oss_media_file_stat_t _stat;
time_tの有効期限;
auth_fn_t auth_func;
} oss_media_file_t;
説明
- type: ファイルタイプ: normalまたはappendable。
- ipc: デバイスの一意の識別子を設定します。 この属性は、要件に従ってauth funcで使用でき、使用しない場合は無視できます。
- endpoint: そのようなs oss-cn-hangzhou.aliyuncs.com。
- is_cname: CNAMEが有効になっているかどうか。
- bucket_name: OSSバケットの名前。
- object_key: OSSオブジェクトの名前。
- access_key_id: アクセス制御のためにAlibaba Cloudによって提供されるAccessKey ID。 ここでは、2つのモードが利用可能である。 マスターアカウントまたはサブアカウントのAccessKey ID。 この場合、後続のトークンはNULLに設定する必要があります。 2. get_tokenを通じて取得した一時的なAccessKey ID。
- access_key_secret: アクセス制御のためにAlibaba Cloudが提供するAccessKey Secret。 2つの利用可能なモードは、1. マスターアカウントまたはサブアカウントの永続的なAccessKey Secret。 この場合、後続のトークンはNULLに設定する必要があります。 2. get_tokenによって取得された一時的なAccessKey Secret。 access_key_idとaccess_key_secretは同時に同じモードを使用する必要があります。
- token: マスターアカウントまたはサブアカウントの永続的なAccessKey IDとAccessKey Secretを同時に使用する場合、この属性をNULLに設定する必要があります。 端末デバイスを使用してリソースをアップロードまたはダウンロードする場合、アプリサーバーは端末デバイスへの一時的なアクセス許可を付与する必要があります。 一時的なaccess_key_id、access_key_secret、およびトークンは、サーバー上のget_tokenを介して取得できます。 トークンをNULL以外の値に設定した場合、システムは一時的なAccessKey ID、一時的なAccessKey Secret、および一時的なトークンを使用する必要があります。 一時トークンを使用しない場合は、この属性をNULLに設定してください。
- expiration: 承認が失敗した時刻。 最初の承認の後、次の承認は有効期限が過ぎた後にのみ実行されます。
- auth: 承認機能。 関数を実装し、関数内のホスト、バケット、およびトークン値に値を付与する必要があります。
- mode: 読み書きモード。
初期化
/**
* @ brief OSSメディアの初期化
* @ noteこのインターフェイスは、プログラムがOSS MEDIA C SDKの初期化を開始するときに最初に呼び出される必要があります。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合は、エラーが発生したことを示します。 考えられる原因には、メモリ不足、またはAPRまたはCURLのバージョンが低すぎることが含まれます。
* /
int oss_media_init(aos_log_level_e log_level);
説明 完全なコードについては、『GitHub』をご参照ください。
破壊
/**
* @ brief OSS meidaを破棄する
* @ noteこのインターフェイスは、OSS MEDIA C SDKを破棄するためにプログラムが終了したときに最後に呼び出される必要があります。
* /
void oss_media_destroy();
説明 完全なコードについては、『GitHub』をご参照ください。
オブジェクトを開くOpen an object
/**
* @ brief OSSオブジェクトを開く
* @ param[in] bucket_name ossにオブジェクトを格納するバケットの名前
* @ param[in] object_key oss内のオブジェクトの名前
* @ param[in] モード:
* 'r': 読み取りモード
* 'w': 上書きモード
* 'a': 書き込みモードの追加
* 注: 組み合わせて使用することはできません
* @ param[in] auth_func access_key_id/access_key_secretを設定する権限付与関数
* @ return:
* NULLが返された場合は、成功を示します。 それ以外の場合は、失敗を示します。
* /
oss_media_file_t * oss_media_file_open(char * bucket_name、
char * object_key,
char * モード、
auth_fn_t auth_func);
説明
- mode: 読み取り専用、上書き、および追加書き込みモードがサポートされています。 組み合わせモードはサポートされていません。
- 読み取りモード: オブジェクトを開くと、オブジェクトのコンテンツの一部が読み取り専用になります。 通常、コンテンツ全体を読み取るには複数の読み取りが必要です。
- 上書きモード: オブジェクトを開くと、オブジェクトの内容が一度に完全に書き込まれます。 複数の書き込みがサポートされていますが、最新のコンテンツは以前のコンテンツを上書きします。
- 追加書き込み: オブジェクトを開いた後、追加モードでオブジェクトにコンテンツを複数回書き込むことができます。
- 完全なコードについては、『GitHub』をご参照ください。
オブジェクトを閉じる
/**
* @ brief OSSオブジェクトを閉じる
* /
void oss_media_file_close(oss_media_file_t * ファイル);
説明 完全なコードについては、『GitHub』をご参照ください。
オブジェクトを書く
/**
* @ brief OSSにオブジェクトを書き込みます。
* @ return:
* リクエストが成功すると、書き込まれたデータのサイズが返されます。 「-1」が返された場合は、データ書き込みが失敗したことを示します。
* /
int64_t oss_media_file_write(oss_media_file_t * file、const void * buf、int64_t nbyte);
プロジェクトの例:
/* 認証機能 * /
static void auth_func(oss_media_file_t * ファイル) {
file->endpoint = "your endpoint";
ファイル->is_cname = 0;
file->access_key_id = "Alibaba Cloudが提供するアクセスキーIDまたは一時的なアクセスキーID"
file->access_key_secret = "Alibaba Cloudが提供するアクセスキーシークレットまたは一時的なアクセスキーシークレット"
file->token = "get_tokenインターフェースを介して一時トークンを取得する";
/* この認証の有効時間 * /
ファイル-> 有効期限=時間 (NULL) + 300;
}
static void write_file() {
oss_clean(g_filename);
int64_t write_size;
oss_media_file_t * ファイル;
char * bucket_name = "<あなたのバケット名>";
char * key = "<your object key>";
char * content = "aliyun oss media c sdk";
/* オブジェクトを開く * /
file = oss_media_file_open(bucket_name, key, "w", auth_func);
if (! file) {
printf (「メディアファイルを開くに失敗しました」);
return;
}
/* オブジェクトの書き込み * /
write_size = oss_media_file_write (ファイル、コンテンツ、strlen (コンテンツ));
if (-1 != write_size) {
printf("write %" PRId64 "bytes successed \n", write_size);
} else {
oss_media_file_close (ファイル);
printf("write failed\n");
return;
}
/* オブジェクトを閉じてリソースを解放する * /
oss_media_file_close (ファイル);
}
説明
- この例では、
overwrite ("w")
モードを使用してオブジェクトを開きます。 複数の書き込みが実行される場合、後の書き込みは前の書き込みを上書きする。 追加書き込みを有効にする場合は、オブジェクトを開くために追加書き込み ("a")
モードを指定します。 - 完全なコードについては、『GitHub』をご参照ください。
オブジェクトの読み取り
/**
* @ brief固定数nバイトのデータを読み取ります。
* @ note bufのサイズはnbyte + 1以上でなければなりません。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、「-1」が返された場合は、エラーが発生した可能性があります。 失敗の原因としては、オブジェクトが「読み取り専用」モードで開かれていない、オブジェクトがOSSに接続できない、またはオブジェクトがOSSを読み取る権限を持っていないなどがあります。
* /
int64_t oss_media_file_read(oss_media_file_t * file, void * buf, int64_t nbyte);
プロジェクトの例:
int ntotal, nread, nbuf = 16;
char buf[nbuf];
char * content;
char * bucket_name = "<あなたのバケット名>";
char * key = "<your object key>";
oss_media_file_t * ファイル;
/* オブジェクトを開く * /
file = oss_media_file_open(bucket_name, key, "r", auth_func);
if (! file) {
printf (「メディアファイルを開くに失敗しました」);
return;
}
/* オブジェクトを読み取る * /
content = malloc(stat.length + 1);
ntotal = 0;
while ((nread = oss_media_file_read(file, buf, nbuf)) > 0) {
memcpy(content + ntotal、buf、nread);
ntotal += nread;
}
content[ntotal] = '\0';
/* オブジェクトを閉じる * /
oss_media_file_close (ファイル);
無料 (コンテンツ);
printf("oss media c sdk read object successed \n");
}
説明 完全なコードについては、『GitHub』をご参照ください。
オブジェクトの管理
OSS MEDIA FILEは、tell、seek、およびstat操作もサポートしています。
/**
* @ brief OSSメディアファイルの場所を取得する
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、「-1」が返された場合は、エラーが発生した可能性があります。 失敗の原因としては、オブジェクトが「読み取り専用」モードで開かれていない、オブジェクトがOSSに接続できない、またはオブジェクトがOSSを読み取る権限を持っていないなどがあります。
* /
int64_t oss_media_file_tell(oss_media_file_t * ファイル);
/**
* @ brief OSS MEDIA FILEポインターを指定された場所に設定します。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、「-1」が返された場合は、エラーが発生した可能性があります。 失敗の原因としては、オブジェクトが「読み取り専用」モードで開かれていない、オブジェクトがOSSに接続できない、またはオブジェクトがOSSを読み取る権限を持っていないなどがあります。
* /
int64_t oss_media_file_seek(oss_media_file_t * ファイル、int64_tオフセット);
/**
* @ brief OSS MEDIA FILEのメタデータを取得します。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、「-1」が返された場合は、エラーが発生した可能性があります。 失敗の原因としては、オブジェクトがOSSに接続できない、またはオブジェクトがOSSを読み取る権限を持っていないなどがあります。
* /
int oss_media_file_stat(oss_media_file_t * file, oss_media_file_stat_t * stat);
プロジェクトの例:
static void seek_tell_stat_file() {
int ntotal, nread, nbuf = 16;
char buf[nbuf];
char * bucket_name = "<あなたのバケット名>";
char * key = "<your object key>";
oss_media_file_t * ファイル;
/* オブジェクトを開く * /
file = oss_media_file_open(bucket_name, key, "r", auth_func);
if (! file) {
printf (「メディアファイルを開くに失敗しました」);
return;
}
/* オブジェクトのメタ情報を取得する * /
oss_media_file_stat_t stat;
if (0 != oss_media_file_stat(file, &stat)) {
oss_media_file_close (ファイル);
oss_media_file_free (ファイル);
printf("stat media file[% s] failed\n", file->object_key);
return;
}
printf("file [name=% s, length=% ld, type=% s]",
ファイル->object_key, stat.length, stat.type);
/* tell * /
printf("file [position=%" PRId64 "]", oss_media_file_tell(file));
/* シーク * /
oss_media_file_seek (ファイル、stat.length / 2);
/* オブジェクトを閉じる * /
oss_media_file_close (ファイル);
printf("oss media c sdk seek object successed \n");
}
説明 完全なコードについては、『GitHub』をご参照ください。