目的

ここでは、暗号化ビデオを再生するための HLS 標準暗号化ワークフロー作成の全体的な手順を説明します。

HLS 標準暗号化のアーキテクチャーの詳細は、「HLS 標準暗号化」をご参照ください。

手順

  1. HLS 暗号化ワークフローを作成します。

    HLS 暗号化ワークフローとデモコードの作成の詳細は、「HLS 標準暗号化ワークフローの作成」をご参照ください。

    HLS 標準ワークフローを作成するときは、テスト用の “HLS_KEY_URI” パラメーター値に「http: //127.0.0.1:8888」を入力します。 プレイ中、プレイヤーはこのアドレスへのキーをリクエストするので、ユーザーはキーを配布するためのサービスを作成します。
    1. </li>
    2. <li class="li">ビデオをアップロードして暗号化します。
    3. <p class="p">MPS コンソールのメディアファイルを使用し、ビデオをアップロードします。 ワークフローを選択するときは、新しく作成した HLS 標準暗号化ワークフローを選択します。
    4. アップロード後、ワークフローは自動的に暗号化トランスコーディングを開始します。 ビデオが公開ステータスになったら、次の手順に従います。
    5. </p>
    6. </li>
    7. <li class="li">ローカル認証サービスを作成します。
    8. <p class="p">HLS 標準暗号化ビデオを再生する際の認証サービスとして機能する、ローカル HTTP サービスを作成し、MtsHlsUriTokenトークンを発行してトークンの検証を行います。</p>
    9. <p class="p">Java コード依存関係の例</p>
    10. <p class="p"><a title="" href="https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core">https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core</a></p>
    11. <p class="p"><a title="" href="https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-kms">https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-kms</a></p>
    12. <pre class="pre codeblock"><code>

    package com.aliyun.smallcode;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.http.ProtocolType;import com.aliyuncs.kms.model.v20160120. DecryptRequest;import com.aliyuncs.kms.model.v20160120. DecryptResponse;import com.aliyuncs.profile.DefaultProfile;import com.sun.net.httpserver.Headers;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.httpserver.HttpServer;import com.sun.net.httpserver.spi.HttpServerProvider;import org.apache.commons.codec.binary.Base64;import java.io.IOException;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.InetSocketAddress;import java.net.URI;import java.util.regex.Matcher;import java.util.regex.Pattern;public class AuthorizationServer {private static DefaultAcsClient client;static {String region = “”;String accessKeyId = “<your-access-key-id>”String accessKeySecret = “<your-access-key-secret>”;client = new DefaultAcsClient(DefaultProfile.getProfile(region, accessKeyId, accessKeySecret));}public class AuthorizationHandler implements HttpHandler {public void handle(HttpExchange httpExchange) throws IOException {String requestMethod = httpExchange.getRequestMethod();if(requestMethod.equalsIgnoreCase(“GET”)){//Get ciphertext and key from URLString ciphertext = getCiphertext(httpExchange);if (null == ciphertext)return;//decrypt ciphertext from KMS, and Base64 decodebyte[] key = decrypt(ciphertext);//Set headersetHeader(httpExchange, key);//Response keyOutputStream responseBody = httpExchange.getResponseBody();responseBody.write(key);responseBody.close();}}private void setHeader(HttpExchange httpExchange, byte[] key) throws IOException {Headers responseHeaders = httpExchange.getResponseHeaders();responseHeaders.set(“Access-Control-Allow-Origin”, ““);httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, key.length);}private byte[] decrypt(String ciphertext) {DecryptRequest request = new DecryptRequest();request.setCiphertextBlob(ciphertext);request.setProtocol(ProtocolType.HTTPS);try {DecryptResponse response = client.getAcsResponse(request);String plaintext = response.getPlaintext();//Note: require base64 decodereturn Base64.decodeBase64(plaintext);} catch (ClientException e) {e.printStackTrace();return null;}}private String getCiphertext(HttpExchange httpExchange) {URI uri = httpExchange.getRequestURI();String queryString = uri.getQuery();String pattern = “Ciphertext=(\w)”;Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(queryString);if (m.find())return m.group(1);else {System.out.println(“Not Found Ciphertext”);return null;}}}private void startService() throws IOException {HttpServerProvider provider = HttpServerProvider.provider();//listening port 8888 can accept 10 request simultaneouslyHttpServer httpserver = provider.createHttpServer(new InetSocketAddress(8888), 10);httpserver.createContext(“/“, new AuthorizationHandler());httpserver.start();System.out.println(“server started”);}public static void main(String[] args) throws IOException {AuthorizationServer server = new AuthorizationServer();server.startService();}}

    Python サンプルコード

    1. <p class="p">pip install aliyun-python-sdk-core</p>
    2. <p class="p">pip install aliyun-python-sdk-kms</p>
    3. <p class="p">pip install aliyun-python-sdk-mts</p>
    4. <pre class="pre codeblock"><code>

    -- coding: UTF-8 --

    from BaseHTTPServer import BaseHTTPRequestHandlerfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkkms.request.v20160120 import DecryptRequestimport cgiimport jsonimport base64import urlparseclient = AcsClient(“”,””,””);class AuthorizationHandler(BaseHTTPRequestHandler):def do_GET(self):self.check()self.set_header()cipertext = self.get_cihpertext()plaintext = self.decrypt_cihpertext(cipertext)print plaintextkey = base64.b64decode(plaintext)print keyself.wfile.write(key)def do_POST(self):passdef check(self):

    check MtsHlsUriToken, etc.

    passdef set_header(self):self.send_response(200)

    cors

    self.sendheader(‘Access-Control-Allow-Origin’, ‘*’)self.endheaders()def getcihpertext(self):path = urlparse.urlparse(self.path)query = urlparse.parseqs(path.query)return query.get(‘Ciphertext’)[0]def decrypt_cihpertext(self, cipertext):request = DecryptRequest.DecryptRequest()request.set_CiphertextBlob(cipertext)response = client.do_action_with_exception(request)jsonResp = json.loads(response)return jsonResp[“Plaintext”]if __name == ‘__main‘:

    Start a simple server, and loop forever

    from BaseHTTPServer import HTTPServerprint “Starting server, use to stop”server = HTTPServer((‘127.0.0.1’, 8888), AuthorizationHandler)server.serve_forever()

    1. <li class="li">再生アドレスを取得します。
    2. <p class="p">再生アドレスは複数の方法で取得することができます。 詳しくは、<a title="" href="https://www.alibabacloud.com/help/faq-detail/50628.htm">「MPS ファイル出力に関する質問」</a>をご参照ください。
    3. </p>
    4. </li>
    5. <li class="li">ビデオを再生します。
    6. <p class="p">オンラインプレーヤーを使用して、HLS 暗号化ビデオの再生をテストします。 詳しくは、<a title="" href="http://player.alicdn.com/detection.html">「Alibaba Cloud プレーヤーのユーザー診断ツール」</a>をご参照ください。
    7. </p>
    8. <p class="p">次の図に示すように、ダイアログボックスに手順 <span class="ph uicontrol">4</span> で取得した再生アドレスを入力し、<span class="ph uicontrol">[再生]</span>をクリックします。
    9. </p>
    10. <div class="note note note-note">
    11. <div class="note-icon-wrapper"><i class="icon-note note"></i></div>
    12. <div class="note-content"><strong></strong> ブラウザーの DEBUG を使用して、プレイヤーは自動的に認証サーバーをリクエストし、復号化キーを取得します。復号化後、再生操作を行います。
    13. </div>
    14. </div>
    15. <br><img class="image" id="image-uy2-dlg-x2b" src="images/10097_en-US.png"><br></li>
    16. </ol>
    17. </section>
    18. </div>
    19. </article>
    20. </main>