有償コンテンツのHLS配信に、さくらのクラウド ウェブアクセラレータ(CDN)+オブジェクトストレージ を組み合わせて使う

これは さくらインターネット Advent Calendar 2021  の21日目の記事です。

 

本記事では、

「オブジェクトストレージ」とCDNサービス「ウェブアクセラレータ」を組み合わせて利用し、

ウェブアクセラレータ「ワンタイムURL機能」を利用して、有償コンテンツ想定のHLS配信を試してみた内容を書きました。 

【オブジェクトストレージ】

【ウェブアクセラレータ(CDN)】

 

目次

 

ウェブアクセラレータ「ワンタイムURL機能」とは?

ウェブアクセラレータのワンタイムURLは、有償コンテンツ配布用のダウンロード用ページやイベントで期間限定の動画や画像の公開ページ作成などといった、サイト内のコンテンツに指定時間のみアクセス可能にしたい時にご利用いただけます。

( サイト全体ワンタイムURL機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント )

 

配信イメージ

本記事では、下記の利用用途を想定した配信を試してみます。

 

【通知イメージ】

f:id:nozomi1773:20211221055830p:plain

アーカイブ動画の視聴など、有償コンテンツ購入者に、

  • メール

  • ログインアカウント毎の購入ページ(Webページで、ログインアカウントごとのコンテンツ表示)

などで、「HLS配信の閲覧用URL(ワンタイムURL)」を通知します。

 

【配信イメージ】

f:id:nozomi1773:20211221063445p:plain

  • この配信用URLを把握している人(有償コンテンツ購入者)のみが閲覧できる。
  • この配信用URLから規定の期間内のみ閲覧可能で、期間を過ぎると閲覧NGになる。
  • オブジェクトストレージへの直接アクセスも閲覧NGとなる。

 

設定

STEP1. オブジェクトストレージに、バケットを作る

マニュアル:オブジェクトストレージ サービス基本情報 | さくらのクラウド ドキュメント

 

STEP1-① 【さくらのクラウド ホーム】 から 【オブジェクトストレージ】を選択

f:id:nozomi1773:20211220190725p:plain

STEP1-② 【サイト 】 → 【石狩第1サイト】 を選択

f:id:nozomi1773:20211220191051p:plain

 

STEP1-③ バケットの追加

バケット】→ 【バケットの追加】 を選択

f:id:nozomi1773:20211220192011p:plain

バケットの名前を入力して、【追加】する

※ 今回の記事では、バケット名「video」

f:id:nozomi1773:20211220192346p:plain

STEP1-④ パーミッションの追加(ウェブアクセラレータ連携用 READ(読み込み)権限)

パーミッション】→ 【パーミッションの追加】を選択

f:id:nozomi1773:20211220192711p:plain

ウェブアクセラレータ連携用READ(読み込み)権限パーミッションを【追加】します。

※ 今回の記事では、「video」バケットのみのREAD(読み込み)権限のパーミッションを「video-read-only」の名前で追加します。

f:id:nozomi1773:20211220222818p:plain

表示されたシークレットアクセスキーをメモします。(再度表示されない為、必ずメモしておきます。)

f:id:nozomi1773:20211220223354p:plain

 

STEP1-⑤ パーミッションの追加(コンテンツアップロード用 READ/WRITE(読み込み/書き込み)権限)

パーミッション】→ 【パーミッションの追加】を選択

f:id:nozomi1773:20211220192711p:plain

コンテンツアプロード用READ/WRITE(読み込み/書き込み)権限パーミッションを【追加】します。

※ 今回の記事では、「video」バケットのみのREAD/WRITE(読み込み/書き込み)権限のパーミッションを「video-read-write」の名前で追加します。

f:id:nozomi1773:20211220223657p:plain

表示されたシークレットアクセスキーをメモします。(再度表示されない為、必ずメモしておきます。)

f:id:nozomi1773:20211220223354p:plain

 

STEP2. オブジェクトストレージに、htmlファイルをアップロード(配信確認用)

※ 本手順では、Ubuntu 18.04 の環境にて、awscliで準備しました。

STEP2-① awscli の インストール

$ sudo apt update 
$ sudo apt install awscli

 

STEP2-② awscli の 設定

※ 今回の記事では、「video」バケットのコンテンツアアプロード用に、「video」のREAD/WRITE(読み込み/書き込み)権限のパーミッション「video-read-write」シークレットアクセスキーをつかう。

$ sudo aws configure --profile video
AWS Access Key ID [None]: 「video-read-write」のアクセスキーを入力
AWS Secret Access Key [None]: 「video-read-write」のシークレットアクセスキーを入力
Default region name [None]: "jp-north-1" を入力
Default output format [None]: "json" を入力

$ tail -3 ~/.aws/config
[profile video]
region = jp-north-1
output = json

$ aws --profile video --endpoint-url=https://s3.isk01.sakurastorage.jp s3 ls s3://video/
$
→ 「video」バケットにアクセス可能なことを確認。まだ空の状態。

 

STEP2-③ テスト用のhtmlファイルを作成し、アップロードします。

今回は ローカルにもvideoディレクトリを準備し、awscli の sync で同期します。

$ mkdir video
$ cd video

~/video$ vim index.html
~/video$ cat index.html
<html>
<head>
<title>配信テストページ</title>
</head>
<body>
配信テストページです。<br/>
</body>
</html>

$ aws --profile video --endpoint-url=https://s3.isk01.sakurastorage.jp s3 sync ~/video s3://video/
upload: ./index.html to s3://video/index.html

アップロードできたことを確認

$ aws --profile video --endpoint-url=https://s3.isk01.sakurastorage.jp s3 ls s3://video/
2021-12-XX XX:XX:XX        124 index.html

コントロールパネルから確認すると下記の状態

f:id:nozomi1773:20211220232309p:plain

 

デフォルトのオブジェクトACLは private の為、API経由でのみアクセス可能で、

直接 httpsアクセスを試した場合、下記のようにエラーとなります。

$ curl -v https://video.s3.isk01.sakurastorage.jp/index.html

...(略)...
< HTTP/1.1 403 Forbidden
< Server: openresty
< Date: Xxx, XX Dec 2021 XX:XX:XX GMT
< Content-Type: application/xml
< Content-Length: 174
< Connection: keep-alive
< x-amz-id-2: XXXXXXXXXXXXXXXXXXXX
< x-amz-request-id: XXXXXXXXXXXXXXXXXXXX
<
* Connection #0 to host video.s3.isk01.sakurastorage.jp left intact
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Access Denied</Message><Resource></Resource><RequestId>XXXXXXXXXXXXXXXXXXXX</RequestId></Error>

 

STEP3. ウェブアクセラレータに、オリジン「オブジェクトストレージ」で配信設定/htmlファイル配信確認

本記事内では、独自ドメイン利用にて試しています。サブドメイン(xxxx.user.webacccel.jp)利用の場合は、手順内のDNSの設定等は不要です。

 

マニュアル : 初期設定(オブジェクトストレージ・独自ドメイン利用) | ウェブアクセラレータ | さくらのクラウド ドキュメント

に沿って設定を実施します。

 

STEP3-① 【さくらのクラウド ホーム】 から 【ウェブアクセラレータ(CDN)】を選択

f:id:nozomi1773:20211220234517p:plain

 

STEP3-② 【サイト追加】 から 「サイト新規新規追加」に必要情報を入力して、【保存】で追加します。

オリジン種別:オブジェクトストレージ を選択し、必要情報を入力します。

※ 今回の記事では、STEP1で用意した、「video」バケット、「video」バケットのみのREAD(読み込み)権限のパーミッション「video-read-only」のアークレットアクセスキーを指定します。

f:id:nozomi1773:20211220235054p:plain

STEP3-③ サイト有効化の準備として、独自ドメインの場合、利用しているDNSサービスにて、対象のTXTレコードまたはCNAMEレコードを追加する。

サイト追加時の確認画面の「CNAME先|サブドメイン」の表示

f:id:nozomi1773:20211221000412p:plain

または、サイト一覧→「対象サイト」→「設定」から確認

f:id:nozomi1773:20211221000636p:plain

 

確認したレコードを、利用しているDNSサービスにてTXTレコードを設定します。

TXTレコードが設定されたことを、digで確認する場合、

$ dig *****.1773.work -t txt +short
"webaccel=xxxxxxxxxx.user.webaccel.jp"

のように確認。

 

STEP3-③ サイト有効化

サイト一覧→「対象サイト」→「設定」から、「有効にする」を選択し、サイトを有効化します。

f:id:nozomi1773:20211221001252p:plain

 

STEP3-④ CNAMEの設定

STEP3-③で確認したCNAME先を、利用しているDNSサービスにて設定します。

(サイト有効化済みで、TXTレコードは不要の為、この時点で除去)

CNAMEが設定されたことを、digで確認する場合、

$ dig *****.1773.work 
...(略)...
;; ANSWER SECTION:
*****.1773.work.         360     IN      CNAME   xxxxxxxx.user.webaccel.jp.
xxxxxxxx.user.webaccel.jp. 3600 IN      CNAME   site-XXXXXXXX.gslb1.sakura.ne.jp.
site-XXXXXXXX.gslb1.sakura.ne.jp. 9 IN A    XXX.XXX.X.X
...(略)...

のように確認。

 

STEP3-⑤ SSL証明書の設定

※ 本記事では、「Let's Encrypt 自動更新証明書」を使います。持ち込みの証明書の設定もできます。

f:id:nozomi1773:20211221001542p:plain

 

STEP3-⑥ 配信確認

 

◇【復習】オブジェクトストレージに直接httpsアクセス(403 Forbidden

デフォルトのオブジェクトACLは private の為、API経由でのみアクセス可能で、

オブジェクトストレージに直接 httpsアクセスを試した場合、下記のようにエラーとなります。

$ curl -v https://video.s3.isk01.sakurastorage.jp/index.html

...(略)...
< HTTP/1.1 403 Forbidden
< Server: openresty
< Date: Xxx, XX Dec 2021 XX:XX:XX GMT
< Content-Type: application/xml
< Content-Length: 174
< Connection: keep-alive
< x-amz-id-2: XXXXXXXXXXXXXXXXXXXX
< x-amz-request-id: XXXXXXXXXXXXXXXXXXXX
<
* Connection #0 to host video.s3.isk01.sakurastorage.jp left intact
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Access Denied</Message><Resource></Resource><RequestId>XXXXXXXXXXXXXXXXXXXX</RequestId></Error>

 

◇ ウェブアクセラレータ経由でhttpsアクセス(200 OK

STEP2で、アップロードしたコンテンツにウェブアクセラレータ経由でアクセスします。

$ curl -v https://*****.1773.work/index.html

...(略)...
< HTTP/2 200
< server: nginx
< date: Xxx, XX Dec 2021 XX:XX:XX GMT
< content-type: text/html
< content-length: 124
< accept-ranges: bytes
< etag: "XXXXXXXXXXXXXXXXXXXX"
< last-modified: Xxx, XX Dec 2021 XX:XX:XX GMT
< x-amz-id-2: XXXXXXXXXXXXXXXXXXXX
< x-amz-request-id: XXXXXXXXXXXXXXXXXXXX
< cache-control: s-maxage=3600
< age: 0
< via: XXXXXXXXXXXXXXXXXXXX
< x-webaccel-origin-status: 200
< x-cache: MISS
<
<html>
<head>
<title>配信テストページ</title>
</head>
<body>
配信テストページです。<br/>
</body>
</html>

→ ウェブアクセラレータ経由でアクセスできることを確認!

 

STEP4.「ワンタイムURL」対象のコンテンツの準備、オブジェクトストレージにワンタイムURL形式のHLSは配信用ファイルをアップロード

 

STEP4-① ワンタイムURLのシークレットを決める

8文字以上16文字以内(使用可能な文字種はカンマとスペースを除いた印字可能ASCII) の文字列を決めます。

※ 本記事では、ランダム文字列を生成します。

※ シークレット文字列は、他人に公開しないでくだい。

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -1
****************

 

STEP4-② HLS配信用ファイルの作成

※ 本記事では、用意したmp4ファイルを ffmpeg を使って、m3u8ファイル・tsファイルを生成します。 

~/video$ ls -l
total 19648
-rw-r--r-- 1 xxxxxxxxx xxxxxxxxx      124 Dec XX XX:XX index.html
-rw-r--r-- 1 xxxxxxxxx xxxxxxxxx 20061144 Dec XX XX:XX test.mp4

 

用意したmp4ファイル「test.mp4」を、ffmegを使って、

「test-video.m3u8」と、10秒ごとに分割した「test-videoXXX(001~008).ts」のセグメントファイルを生成します。

~/video$ sudo apt install ffmpeg

~/video$ ffmpeg -i test.mp4 -c:v copy -c:a copy -f hls -hls_time 10 -hls_playlist_type vod -hls_segment_filename "test-video%3d.ts" test-video.m3u8
...(略)...

~/video$ ls test*
test-video.m3u8  test-video000.ts  test-video001.ts  test-video002.ts  test-video003.ts  test-video004.ts  test-video005.ts  test-video006.ts  test-video007.ts  test-video008.ts  test.mp4

→ ファイルが生成された状態です。

 

STEP4-③ m3u8ファイルを「ワンタイムURL」形式に書き換え

HLS配信にてワンタイムURLを利用する場合、

・m3u8ファイル内に設定するtsファイルの取得URLの記述を、ワンタイムURLとして記述 ←STEP4-③でこちらを設定

・HTMLに記述するm3u8ファイルの取得URLの記述を、ワンタイムURLとして記述

を設定する必要があります。

 

◇記述の変更前(ffmpegで生成したファイルそのままの状況)

~/video$ cat test-video.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:12.659044,
test-video000.ts
#EXTINF:9.175833,
test-video001.ts
#EXTINF:8.708700,
test-video002.ts
#EXTINF:10.377033,
test-video003.ts
#EXTINF:12.012000,
test-video004.ts
#EXTINF:9.009000,
test-video005.ts
#EXTINF:8.241567,
test-video006.ts
#EXTINF:12.012000,
test-video007.ts
#EXTINF:1.635267,
test-video008.ts
#EXT-X-ENDLIST

→ この値を、「test-videoXXX.ts?webaccel_secure_hash="MD5の値"&webaccel_secure_time="HEX値"」という形式に修正します。

(ワンタイムURLの形式についての詳細 は、

サイト全体ワンタイムURL機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント

 

今回は、

・シークレット文字列が 【STEP4-① ワンタイムURLのシークレットを決める】 で生成した文字列

・ワンタイムURLの有効期限を「2021/12/31 23:59:59 まで有効」

として、設定します。

 

◇ 書き換え実行例

onetime-replace.sh
―――
#!/bin/bash

org_file="/home/***/video/test-video.m3u8.org"
new_file="/home/***/video/test-video.m3u8"

secret="*****"(設定したシークレット文字列)
limit_time=$(date -d '2021/12/31 23:59:59' +%s)

if [ ! -e $org_file ]; then
echo "org_file が存在しません。"
exit
fi

if [ -e $new_file ]; then
rm $new_file
fi
touch $new_file

while IFS= read -r line
do
if [ ${line::1} == "#" ]; then
echo $line >> $new_file
else
md5=$(echo -n "//${line}/${secret}/${limit_time}/" | md5sum)
echo "${line}?webaccel_secure_time=${limit_time}&webaccel_secure_hash=${md5%% *}" >> $new_file
fi
done < $org_file

 

~/video$ cp -ip test-video.m3u8 test-video.m3u8.org
~/video$ ~/tools/onetime-replace.sh

 

◇記述の変更後(書き換え後)

~/video$ cat test-video.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:12.659044,
test-video000.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=2f5e1163b2829b323fd4c9b1be299f7e
#EXTINF:9.175833,
test-video001.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=90ac6521bfaee2d630e172cbfc2a1052
#EXTINF:8.708700,
test-video002.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=c0847397ff49c39d3850563b420b24f0
#EXTINF:10.377033,
test-video003.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=b917f094b32000decbb9e2fa6c7560d5
#EXTINF:12.012000,
test-video004.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=d3c841f358ffdaf0bd71b5d00edb0318
#EXTINF:9.009000,
test-video005.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=2b5327e5aee07a0148256f96453c9d28
#EXTINF:8.241567,
test-video006.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=cffdbaaf44d8c4afbf1a0e8827984458
#EXTINF:12.012000,
test-video007.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=57dcd721d0f0044de83799f70644f4c2
#EXTINF:1.635267,
test-video008.ts?webaccel_secure_time=1640962799&webaccel_secure_hash=b303a86c70e9740385afcd43ff3c8449
#EXT-X-ENDLIS

元ファイルは不要のため退避

~/video$ mv test-video.m3u8.org ~/backup/
~/video$ mv test.mp4 ~/backup/

 

※ 今回は、htmlとHLS配信用ファイルを直下の階層に置いています。

  別ディレクトリに配置する場合は、ワンタイムURL発行時のファイルパス指定に、ディレクトリを含めます。(詳細 は、

サイト全体ワンタイムURL機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント

 

STEP4-④ m3u8ファイルを「ワンタイムURL」形式で呼び出すhtmlファイルの作成

HLS配信にてワンタイムURLを利用する場合、

・m3u8ファイル内に設定するtsファイルの取得URLの記述を、ワンタイムURLとして記述

・HTMLに記述するm3u8ファイルの取得URLの記述を、ワンタイムURLとして記述 ←STEP4-④でこちらを設定

を設定する必要があります。

 

※ 本記事では、Video.js を使用します

 

◇ m3u8のワンタイムURLの発行

・シークレット文字列が 【STEP4-① ワンタイムURLのシークレットを決める】 で生成した文字列

・ワンタイムURLの有効期限を「2021/12/31 23:59:59 まで有効」

として、設定します。

$ SECRET="*****"(設定したシークレット文字列)
$ LIMIT_TIME=$(date -d '2021/12/31 23:59:59' +%s)
$ FILEPATH="/test-video.m3u8"
$ MD5=$(echo -n "/${FILEPATH}/${SECRET}/${LIMIT_TIME}/" | md5sum)
$ echo "${FILEPATH}?webaccel_secure_time=${LIMIT_TIME}&webaccel_secure_hash=${MD5%% *}"
/test-video.m3u8?webaccel_secure_time=1640962799&webaccel_secure_hash=5b7f44851593725b3d0d5a1fd9fed43c

※ 今回は、htmlとHLS配信用ファイルを直下の階層に置いています。

  別ディレクトリに配置する場合は、ワンタイムURL発行時のファイルパス指定に、ディレクトリを含めます。(詳細 は、

サイト全体ワンタイムURL機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント

 

◇ htmlファイル作成 (例)

~/video$ vim play.html

~/video$ cat play.html
 
<html>
  <head>
    <title>Test Play</title>
  <link href="https://vjs.zencdn.net/7.17.0/video-js.css" rel="stylesheet">
  </head>
  <body>
    <video-js id=example-video width=1280 height=720
              class="vjs-default-skin" controls>
      <source
         src="./test-video.m3u8?webaccel_secure_time=1640962799&webaccel_secure_hash=5b7f44851593725b3d0d5a1fd9fed43c"
         type="application/x-mpegURL">
    </video-js>
  <script src="https://vjs.zencdn.net/7.17.0/video.js"></script>
    <script>
      var player = videojs('example-video');
    </script>
  </body>
</html>

※ 今回は、htmlとHLS配信用ファイルを同一ドメイン内に配置しています。

 ドメインにリソース共有する場合(htmlファイルとHLS配信ファイルの配信ドメインが別の場合など)は、CORS機能を利用してください(詳細:CORS機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント

 

 

STEP4-⑤ コンテンツのアップロード

アップロード対象の確認

~/video$ ls
index.html  test-video.m3u8   test-video001.ts  test-video003.ts  test-video005.ts  test-video007.ts  test.mp4
play.html   test-video000.ts  test-video002.ts  test-video004.ts  test-video006.ts  test-video008.ts

STEP2と同様に、ローカルのvideoディレクトリを、awscli の sync で同期します。

$ aws --profile video --endpoint-url=https://s3.isk01.sakurastorage.jp s3 sync ~/video s3://video/
upload: ./test-video.m3u8 to s3://video/test-video.m3u8
upload: ./play.html to s3://video/play.html
upload: ./test-video001.ts to s3://video/test-video001.ts
upload: ./test-video008.ts to s3://video/test-video008.ts
upload: ./test-video002.ts to s3://video/test-video002.ts
upload: ./test-video004.ts to s3://video/test-video004.ts
upload: ./test-video003.ts to s3://video/test-video003.ts
upload: ./test-video005.ts to s3://video/test-video005.ts
upload: ./test-video000.ts to s3://video/test-video000.ts
upload: ./test-video006.ts to s3://video/test-video006.ts
upload: ./test-video007.ts to s3://video/test-video007.ts

アップロードできたことを確認

$ aws --profile video --endpoint-url=https://s3.isk01.sakurastorage.jp s3 ls s3://video/
2021-12-XX XX:XX:XX        124 index.html
2021-12-XX XX:XX:XX        688 play.html
2021-12-XX XX:XX:XX       1207 test-video.m3u8
2021-12-XX XX:XX:XX    2419184 test-video000.ts
2021-12-XX XX:XX:XX   1051672 test-video001.ts
2021-12-XX XX:XX:XX    2317664 test-video002.ts
2021-12-XX XX:XX:XX    2745364 test-video003.ts
2021-12-XX XX:XX:XX    2341540 test-video004.ts
2021-12-XX XX:XX:XX    2272168 test-video005.ts
2021-12-XX XX:XX:XX    2451708 test-video006.ts
2021-12-XX XX:XX:XX    4578552 test-video007.ts
2021-12-XX XX:XX:XX    597840 test-video008.ts

 

STEP5. ウェブアクセラレータに、「ワンタイムURL」の設定

サイト一覧→「対象サイト」→「設定」から、

「サイト全体ワンタイムURL設定」を「有効」にし、STEP4で用意したシークレット文字列を設定し、「保存」します。

f:id:nozomi1773:20211221025204p:plain

 

STEP6. 配信確認

 

◇ ウェブアクセラレータ経由で 通常URLで httpsアクセス(403 Forbidden

ワンタイムURL以外の方式で、アクセスした場合、アクセス拒否(403)となります。

$ curl -v https://*****.1773.work/index.html

...(略)...
< HTTP/2 403
< server: nginx
< date: Xxx, XX Dec 2021 XX:XX:XX GMT
< content-type: text/html
< content-length: 146
<
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

 

◇ ウェブアクセラレータ経由で ワンタイムURLで httpsアクセス(200 OK

# index.html の '2021/12/31 23:59:59' までアクセス可能なURLを発行します
---
$ BASEURL="https://****.1773.work"
$ SECRET="*****"(設定したシークレット文字列)
$ LIMIT_TIME=$(date -d '2021/12/31 23:59:59' +%s)
$ FILEPATH="/index.html"
$ MD5=$(echo -n "/${FILEPATH}/${SECRET}/${LIMIT_TIME}/" | md5sum)
$ echo "${BASEURL}${FILEPATH}?webaccel_secure_time=${LIMIT_TIME}&webaccel_secure_hash=${MD5%% *}"
https://*****.1773.work/index.html?webaccel_secure_time=1640962799&webaccel_secure_hash=be29d92d067ab9a76982ddeae561eb88

$ curl -v "https://*****.1773.work/index.html?webaccel_secure_time=1640962799&webaccel_secure_hash=be29d92d067ab9a76982ddeae561eb88"
...(略)...
< HTTP/2 200
< server: nginx
< date: Xxx, XX Dec 2021 XX:XX:XX GMT
< content-type: text/html
< content-length: 124
< accept-ranges: bytes
< last-modified: Xxx, XX Dec 2021 XX:XX:XX GMT
< x-amz-id-2: XXXXXXXXXXXXXXXXX
< x-amz-request-id: XXXXXXXXXXXXXXXXX
< cache-control: s-maxage=3600
< age: 446
< via: XXXXXXXXXXXXXXXXX
< x-webaccel-origin-status: 200
< x-cache: HIT
<
<html>
<head>
<title>配信テストページ</title>
</head>
<body>
配信テストページです。<br/>
</body>
</html>

 

◇ 用意したHLS配信ページにアクセス

・配信ページの play.html のワンタイムURLを発行します

# play.html の '2021/12/31 23:59:59' までアクセス可能なURLを発行します
---
$ BASEURL="https://****.1773.work"
$ SECRET="*****"(設定したシークレット文字列)
$ LIMIT_TIME=$(date -d '2021/12/31 23:59:59' +%s)
$ FILEPATH="/play.html"
$ MD5=$(echo -n "/${FILEPATH}/${SECRET}/${LIMIT_TIME}/" | md5sum)
$ echo "${BASEURL}${FILEPATH}?webaccel_secure_time=${LIMIT_TIME}&webaccel_secure_hash=${MD5%% *}"
https://*****.1773.work/play.html?webaccel_secure_time=1640962799&webaccel_secure_hash=a65c56a11e222a6211eabe5b652662c3

 

・発行したワンタイムURL「https://*****.1773.work/play.html?webaccel_secure_time=1640962799&webaccel_secure_hash=a65c56a11e222a6211eabe5b652662c3」にブラウザからアクセスします(このURLを有償コンテンツ購入者にのみ通知する想定

◇ 設定した有効期限までの間、動画を閲覧できます。

f:id:nozomi1773:20211221040856p:plain

◇ 不正なアクセス(hash値が正しくない)や、閲覧期限の有効期限切れの場合は、403 Forbidden で閲覧できません。

f:id:nozomi1773:20211221033355p:plain

 

以上、今年リリースの新機能を使って、有償コンテンツ想定のHLS配信を試してみた紹介でした!