ここでは、MNS の要件とインストール手順について、簡単に説明します。

詳しくは、MNS のドキュメント「SDK のダウンロード」、および「キューユーザーマニュアル」をご参照ください。

この例で使用している言語は PHP です。 その他言語の使用方法の詳細については、MNS のドキュメント「SDK ユーザーマニュアル」をご参照ください。

環境要件

PHP 5.5 以降

インストール

MNS SDK for PHP を Alibaba Cloud からダウンロードします。

MNS SDK for PHP を Alibaba Cloud からダウンロードします。

この例で使用している言語は PHP です。 その他言語の使用方法の詳細については、MNS のドキュメント「SDK ユーザーマニュアル」をご参照ください。

ファイルをプロジェクトのディレクトリに展開します。 php_sdk ディレクトリが展開されます。

サンプルコード

  • MNS SDK への参照設定
    require_once(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);
  • メッセージの受信

    MNS が受信する各メッセージにはハンドルが割り当てられ、後でメッセージを操作する際に使用します (メッセージの削除など)。

    また、MNS ではメッセージの一括受信をサポートしており、パフォーマンスを向上させることができます。 詳しくは、MNS のドキュメント 「BatchReceiveMessage」をご参照ください。

    メッセージの受信時に、タイムアウト時間を指定することができます。 (次の例では、タイムアウト時間は 3 秒間に設定されています) キューにメッセージがない場合、タイムアウトが発生してエラーが返されます。
    $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";
     }
  • メッセージの削除

    メッセージは自動的にキューから削除されることはありません。 メッセージの削除は、DeleteMessage を呼び出して行います。 削除を行わない場合、メッセージはキューに残り続け、次回も同じメッセージを受け取ることになります。 また、DeleteMessage はメッセージを受信した後、指定された時間内に呼び出さないと失敗します。 詳しくは、「MNS - DeleteMessage」をご参照ください。

    try
     {
          $res = $queue->deleteMessage($receipt_handle);
          echo "DeleteMessage Succeed! \n";
     }
     catch (MnsException $e)
     {
          echo "DeleteMessage Failed: " . $e . "\n";
     }
  • メッセージの分析
    メッセージ本文は文字列で、コンテンツは JSON 形式のオブジェクトです。 json_decode を使用して文字列をオブジェクトに変換した後、JSON オブジェクトを分析することで、メッセージの詳細を取得することができます。 次の例では、メディアワークフローを起動する出力ファイルが、出力されています。
    $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";
  • ビデオ出力詳細の取得

    メッセージの詳細を取得した後、メディアライブラリ API を使用して、ワークフローで実行されたビデオの詳細を取得します。 次の例では、トランスコードタスク、およびスクリーンショットタスクの出力 URL が出力されています。

    メディアライブラリ内の PHP 用 SDK のインストールおよび設定方法についての詳細は、「メディアライブラリ SDK-PHP」をご参照ください。
    include_once 'aliyun-php-sdk-core/Config.php';
     use Mts\Request\V20140618 as Mts;
    メディアライブラリのクライアントを初期化します。
    $profile = DefaultProfile::getProfile('cn-hangzhou',
                                      $access_key_id,
                                      $access_key_secret);
     $mts_client = new DefaultAcsClient($profile);
    すべてのトランスコードタスクの出力 URL と基本情報を出力します。
    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";
          }
     }
    すべてのスクリーンショットタスクの出力 URL を出力します。
    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";
          }
     }