有償コンテンツのHLS配信に、さくらのクラウド ウェブアクセラレータ(CDN)+オブジェクトストレージ を組み合わせて使う
本記事では、さくらのクラウド「オブジェクトストレージ」とCDNサービス「ウェブアクセラレータ」を組み合わせて利用し、ウェブアクセラレータ「ワンタイムURL機能」を利用して、有償コンテンツ想定のHLS配信を試してみた内容を書きました。
注意事項
本記事は、2021-12-21 に旧ブログにて公開後、ブログ移設時にリンク切れ修正程度の修正を加えたものです。 記載の内容には古い情報も含まれます。試される際は、公式ドキュメントや最新情報の確認を強くおすすめします。
はじめに
これは さくらインターネット Advent Calendar 2021 の21日目の記事です。
本記事では、さくらのクラウド「オブジェクトストレージ」とCDNサービス「ウェブアクセラレータ」を組み合わせて利用し、ウェブアクセラレータ「ワンタイムURL機能」を利用して、有償コンテンツ想定のHLS配信を試してみた内容を書きました。
オブジェクトストレージ
- オブジェクトストレージ | さくらのクラウド : 2021年4月1日より正式提供開始
ウェブアクセラレータ(CDN)
- 【国産CDN】低コストで高速・安定配信 | さくらのウェブアクセラレータ
- ウェブアクセラレータでオブジェクトストレージ連携機能を提供開始しました | さくらのクラウドニュース : 2021年4月15日リリースの新機能
- ウェブアクセラレータにサイト全体ワンタイムURL機能を追加しました | さくらのクラウドニュース : 2021年12月16日リリースの新機能
ウェブアクセラレータ「ワンタイムURL機能」とは?
ウェブアクセラレータのワンタイムURLは、有償コンテンツ配布用のダウンロード用ページやイベントで期間限定の動画や画像の公開ページ作成などといった、サイト内のコンテンツに指定時間のみアクセス可能にしたい時にご利用いただけます。
( サイト全体ワンタイムURL機能の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント より)
配信イメージ
本記事では、下記の利用用途を想定した配信を試してみます。
通知イメージ
アーカイブ動画の視聴など、有償コンテンツ購入者に、
- メール
- ログインアカウント毎の購入ページ(Webページで、ログインアカウントごとのコンテンツ表示)
などで、「HLS配信の閲覧用URL(ワンタイムURL)」を通知します。
配信イメージ
- この配信用URLを把握している人(有償コンテンツ購入者)のみが閲覧できる。
- この配信用URLから規定の期間内のみ閲覧可能で、期間を過ぎると閲覧NGになる。
- オブジェクトストレージへの直接アクセスも閲覧NGとなる。
設定
STEP1. オブジェクトストレージに、バケットを作る
マニュアル:オブジェクトストレージ サービス基本情報 | さくらのクラウド ドキュメント
STEP1-① 【さくらのクラウド ホーム】 から 【オブジェクトストレージ】を選択
STEP1-② 【サイト 】 → 【石狩第1サイト】 を選択
STEP1-③ バケットの追加
バケット -> バケットの追加 を選択
バケットの名前を入力して、追加 する
本記事でのバケット名の例 : video
STEP1-④ パーミッションの追加(ウェブアクセラレータ連携用 READ(読み込み)権限)
パーミッション -> パーミッションの追加 を選択
ウェブアクセラレータ連携用 に READ(読み込み)権限 でパーミッションを 追加 します。
本記事での例として、video バケットのみのREAD(読み込み)権限のパーミッションを video-read-only の名前で追加します。
表示されたシークレットアクセスキーをパスワード管理ツールなどに保管しておきます。(再度表示されない為、必ずメモしておきます。)
STEP1-⑤ パーミッションの追加(コンテンツアップロード用 READ/WRITE(読み込み/書き込み)権限)
パーミッション -> パーミッションの追加 を選択
コンテンツアプロード用 に READ/WRITE(読み込み/書き込み)権限 でパーミッションを 追加 します。
本記事での例として、video バケットのみのREAD/WRITE(読み込み/書き込み)権限のパーミッションを video-read-write の名前で追加します。
表示されたシークレットアクセスキーをパスワード管理ツールなどに保管しておきます。(再度表示されない為、必ずメモしておきます。)
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
コントロールパネルから確認すると下記の状態
デフォルトのオブジェクト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)】を選択
STEP3-② 【サイト追加】 から 「サイト新規新規追加」に必要情報を入力して、【保存】で追加します。
オリジン種別:オブジェクトストレージ を選択し、必要情報を入力します。
今回の記事では
- STEP1で用意した、
videoバケット videoバケットのみのREAD(読み込み)権限のパーミッションvideo-read-onlyのアークレットアクセスキー- 公開ドメイン名を
video.example.jp
を指定します。
STEP3-③ サイト有効化の準備として、独自ドメインの場合、利用しているDNSサービスにて、対象のTXTレコードまたはCNAMEレコードを追加する。
サイト追加時の確認画面の「CNAME先|サブドメイン」の表示
または、サイト一覧→「対象サイト」→「設定」から確認
確認したレコードを、利用しているDNSサービスにてTXTレコードを設定します。
TXTレコードが設定されたことを、digで確認する場合、
$ dig video.example.jp -t txt +short
"webaccel=xxxxxxxxxx.user.webaccel.jp"
のように確認。
STEP3-③ サイト有効化
サイト一覧→「対象サイト」→「設定」から、「有効にする」を選択し、サイトを有効化します。
STEP3-④ CNAMEの設定
STEP3-③で確認したCNAME先を、利用しているDNSサービスにて設定します。
(サイト有効化済みで、TXTレコードはCNAMEと共存できないので、不要の為、この時点で除去)
CNAMEが設定されたことを、digで確認する場合、
$ dig video.example.jp
...(略)...
;; ANSWER SECTION:
video.example.jp. 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 自動更新証明書」を使います。持ち込みの証明書の設定もできます。
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://video.example.jp/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 を、 ffmpeg を使って、 test-video.m3u8 と、10秒ごとに分割した test-video{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として記述
- HTMLに記述するm3u8ファイルの取得URLの記述を、ワンタイムURLとして記述
を設定する必要があります。
STEP4-③では前者の「m3u8ファイル内に設定するtsファイルの取得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 (JST)まで有効
として、設定します。
書き換え実行例
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-④では後者の「HTMLに記述するm3u8ファイルの取得URLの記述を、ワンタイムURLとして記述」を設定します。
本記事では、Video.js を使用します
m3u8のワンタイムURLの発行
- シークレット文字列が STEP4-① ワンタイムURLのシークレットを決める で生成した文字列
- ワンタイムURLの有効期限を
2021/12/31 23:59:59 (JST)まで有効
として、設定します。
$ 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ファイル作成 (例)
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で用意したシークレット文字列を設定し、「保存」します。
STEP6. 配信確認
ウェブアクセラレータ経由で 通常URLで httpsアクセス ( 403 Forbidden )
ワンタイムURL以外の方式で、アクセスした場合、アクセス拒否(403)となります。
$ curl -v https://video.example.jp/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://video.example.jp"
$ 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://video.example.jp/index.html?webaccel_secure_time=1640962799&webaccel_secure_hash=be29d92d067ab9a76982ddeae561eb88
$ curl -v "https://video.example.jp/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://video.example.jp"
$ 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://video.example.jp/play.html?webaccel_secure_time=1640962799&webaccel_secure_hash=a65c56a11e222a6211eabe5b652662c3
発行したワンタイムURL https://video.example.jp/play.html?webaccel_secure_time=1640962799&webaccel_secure_hash=a65c56a11e222a6211eabe5b652662c3 にブラウザからアクセスします
( このURLを有償コンテンツ購入者にのみ通知する想定 )
設定した有効期限までの間、動画を閲覧できます。
不正なアクセス(hash値が正しくない)や、閲覧期限の有効期限切れの場合は、403 Forbidden で閲覧できません。
以上、今年リリースの新機能を使って、有償コンテンツ想定のHLS配信を試してみた紹介でした!
.