ここでは、MNS の要件とインストール手順について、簡単に説明します。
詳しくは、MNS のドキュメント「SDK のダウンロード」、および「キューユーザーマニュアル」をご参照ください。
この例で使用している言語は PHP です。 その他言語の使用方法の詳細については、MNS のドキュメント「SDK ユーザーマニュアル」をご参照ください。
環境要件
PHP 5.5 以降
インストール
MNS SDK for PHP を Alibaba Cloud からダウンロードします。
MNS SDK for PHP を Alibaba Cloud からダウンロードします。
この例で使用している言語は PHP です。 その他言語の使用方法の詳細については、MNS のドキュメント「SDK ユーザーマニュアル」をご参照ください。
ファイルをプロジェクトのディレクトリに展開します。 phpsdk
ディレクトリが展開されます。
サンプルコード
- MNS SDK への参照設定
requireonce(dirname(__FILE
).’/php_sdk/mns-autoloader.php’);
- MNS の初期化 MNS では、ユーザーの各リージョンごとに、独立したサービスドメイン名を設定します。 ルールは、
https://${UserId}.mns.${Region}.aliyuncs.com
です。 次の例では、中国 (杭州) (cn-hangzhou) を使用しています。 ユーザーの実際の要件に応じて、リージョンを中国 (北京) (cn-beijing) などに置き換えます。use AliyunMNS\Client; use AliyunMNS\Exception\MnsException;
$mns_client = new Client(‘https://'.$user_id.'.mns.cn-hangzhou.aliyuncs.com‘, $access_key_id, $access_key_secret); $queue = $mns_client->getQueueRef($queue_name);
</li>
<li class="li">メッセージの受信
<p class="p">MNS が受信する各メッセージにはハンドルが割り当てられ、後でメッセージを操作する際に使用します (メッセージの削除など)。</p>
<p class="p" cond-props="intl" id="intlll">また、MNS ではメッセージの一括受信をサポートしており、パフォーマンスを向上させることができます。 詳しくは、MNS のドキュメント 「BatchReceiveMessage」をご参照ください。</p>
<div class="p">メッセージの受信時に、タイムアウト時間を指定することができます。 (次の例では、タイムアウト時間は 3 秒間に設定されています) キューにメッセージがない場合、タイムアウトが発生してエラーが返されます。
<pre class="pre codeblock"><code>$receipt_handle = NULL;
$message = null; try { $res = $queue->receiveMessage(3); echo “ReceiveMessage Succeed! \n”; $message = $res->getMessageBody(); $receipt_handle = $res->getreceiptHandle(); } catch (MnsException $e) { echo “ReceiveMessage Failed: “ . $e . “\n”; }
</li>
<li class="li">メッセージの削除
<p class="p" cond-props="intl" id="ins">メッセージは自動的にキューから削除されることはありません。 メッセージの削除は、DeleteMessage を呼び出して行います。 削除を行わない場合、メッセージはキューに残り続け、次回も同じメッセージを受け取ることになります。
また、DeleteMessage はメッセージを受信した後、指定された時間内に呼び出さないと失敗します。 詳しくは、「MNS - DeleteMessage」をご参照ください。
</p>
<pre class="pre codeblock"><code>try
{ $res = $queue->deleteMessage($receipt_handle); echo “DeleteMessage Succeed! \n”; } catch (MnsException $e) { echo “DeleteMessage Failed: “ . $e . “\n”; }
<li class="li">メッセージの分析
<div class="p">メッセージ本文は文字列で、コンテンツは JSON 形式のオブジェクトです。 <code class="ph codeph">json_decode</code> を使用して文字列をオブジェクトに変換した後、JSON オブジェクトを分析することで、メッセージの詳細を取得することができます。 次の例では、メディアワークフローを起動する出力ファイルが、出力されています。
<pre class="pre codeblock"><code>$json_message = json_decode($message);
$input_file = $json_message->{‘MediaWorkflowExecution’}->{‘Input’}->{‘InputFile’}; echo ‘input_filelocation:’.$input_file->{‘Location’}. ‘ bucket:’.$input_file->{‘Bucket’}. ‘ object:’.$input_file->{‘Object’}.”\n”;
</li>
<li class="li">ビデオ出力詳細の取得
<p class="p">メッセージの詳細を取得した後、メディアライブラリ API を使用して、ワークフローで実行されたビデオの詳細を取得します。 次の例では、トランスコードタスク、およびスクリーンショットタスクの出力
URL が出力されています。
</p>
<div class="p">メディアライブラリ内の PHP 用 SDK のインストールおよび設定方法についての詳細は、<a title="MPS PHP SDK は Alibab Cloud PHP SDK に基づいています。 ここでは、Alibaba Cloud PHP SDK に関する基本的な知識を説明します。" href="~~55741#concept-kss-d22-z2b~~">「メディアライブラリ SDK-PHP」</a>をご参照ください。
<pre class="pre codeblock"><code>include_once 'aliyun-php-sdk-core/Config.php';
use Mts\Request\V20140618 as Mts;
<div class="p">メディアライブラリのクライアントを初期化します。
<pre class="pre codeblock"><code>$profile = DefaultProfile::getProfile('cn-hangzhou',
$access_key_id,
$access_key_secret);
$mts_client = new DefaultAcsClient($profile);
<div class="p">すべてのトランスコードタスクの出力 URL と基本情報を出力します。
<pre class="pre codeblock"><code>If (strbmp ($ json_message-> {'type'}, 'report ') = 0 ){
$activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
$transcode_job_ids = Array();
for ($i = 0; $i < count($audioStreams); $i++) {
if (strcmp($activities[$i]->{'Type'}, 'Transcode') == 0) {
$transcode_job_ids[] = $activities[$i]->{'JobId'};
}
}
$request = new Mts\QueryJobListRequest();
$request->setJobIds(join(',', $transcode_job_ids));
$request->setRegionId('cn-hangzhou');
$response = $mts_client->getAcsResponse($request);
for ($i=0; $i < count($response->{'JobList'}->{'Job'}); $i++) {
$output = $response->{'JobList'}->{'Job'}[$i]->{'Output'};
$output_file = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'OutputFile'};
$video_properties = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'Properties'};
echo 'URLs of the transcoding output files'.'http://'.$output_file->{'Bucket'}.'.'.
$output_file->{'Location'}.'.aliyuncs.com/'.
urldecode($output_file->{'Object'})."\n";
echo 'basic information of the transcoding output files'.$video_properties->{'Width'}.'x'.$video_properties->{'Height'}.
' duration:'.$video_properties->{'Duration'}."\n";
}
}
<div class="p">すべてのスクリーンショットタスクの出力 URL を出力します。
<pre class="pre codeblock"><code>if (strcmp($json_message->{'Type'}, 'Report') == 0) {
$activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
$snapshot_job_ids = Array();
for ($i = 0; $i < count($audioStreams); $i++) {
if (strcmp($activities[$i]->{'Type'}, 'Snapshot') == 0) {
$snapshot_job_ids[] = $activities[$i]->{'JobId'};
}
}
$request = new Mts\QuerySnapshotJobListRequest();
$request->setSnapshotJobIds(join(',', $snapshot_job_ids));
$request->setRegionId('cn-hangzhou');
$response = $mts_client->getAcsResponse($request);
for ($i=0; $i < count($response->{'SnapshotJobList'}->{'SnapshotJob'}); $i++) {
$snapshot_config = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'};
$output_file = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'}->{'OutputFile'};
echo 'URLs of the screenshot output files'.'http://'.$output_file->{'Bucket'}.'.'.
$output_file->{'Location'}.'.aliyuncs.com/'.
urldecode($output_file->{'Object'})."\n";
}
}
</li>
</ul>
</section>
</div>
</article>
</main>