阿里雲ビデオオンデマンド (VOD) サービスアクセス: 盗難防止チェーンとオンラインスムーズな再生を実現
ビデオ類のプロジェクトをするのは、一番頭が痛いのは、フロントエンドがどのようにプレーヤーを書くかではなく、非常に現実的な輸送問題です
帯域幅コストとカールトン: ビデオファイルは数十数百兆で、自分のサーバに直接置くと、数人が同時にシステムを見ると詰まってしまい、毎月のパブリックネットワークのトラフィック料金はさらに底がない。
ビデオが盗まれたり、チェーンが盗まれたりします。一部の同業者や悪意のあるユーザーは、あなたのページのビデオ再生リンクを直接右クリックしてコピーし、自分のサイトに貼り付けて卵を借ります。あなたが苦労して掘り出した帯域料金は、すべて他人に嫁入り服を作った。
雲の原始時代、最も妥当な解法はビデオを阿里雲にホストすることである
ビデオオンデマンド (av、ビデオオンデマンド)
サービス中です。
今日このチュートリアルは空虚な技術理論を使わずに、純粋な干物に直接行く。最も接地的な実戦方式で
ビデオストリームの高速再生を処理し、「Referer盗難防止チェーンURL認証」という2つの死防御線を配布する
、あなたのビデオ資産を完全にロックします。
コアアーキテクチャ: ビデオオンデマンドはどのように機能していますか?
手を出す前に、まず10秒かけてVODの核心リンクを理解します。
プレーンテキスト
【バックグラウンドでビデオをアップロードする】 --> 【VOD自動トランスコード】 --> 【スライスをOSSに保存する】 --> 【CDNエッジノードに配布する】
│
【ユーザーブラウザ】 ── 3.セキュリティURLを取得し、プレーヤーでデコードします。
簡単に言えば、動画はそのまま再生できません。VODは自動的にあなたのビデオを割って、異なる解像度の標準ストリームファイルに変換して、全国各地にプッシュします
CDN(コンテンツ配信ネットワーク)
ノードです。ユーザーが放送するとき、直接CDNのキャッシュを引き出すのは、スピードが速いだけでなく、自分のサーバ帯域幅を全く占有していない。
最初のステップ: コンソールの基本構成 (3分)
新しく買ったサービスは白い紙で、ドメイン名とトランスコード戦略を合わせなければならない。
1.配布ドメイン名の紐付け
ビデオオンデマンドはあなた自身のドメイン名 (登録が必要) を「ビデオ再生ドメイン名」として結び付けなければならず、阿里雲のデフォルトのテストドメイン名を使うことはできない。
阿里雲コンソールにログインし、「ビデオオンデマンドVOD」を検索する。
左側のメニューで「設定管理」をクリックします。
「ドメイン名を追加」をクリックし、業務タイプは「オンデマンド加速」を選択し、サブドメイン名 (video.yourname.comなど) を入力します。
作成が完了すると、阿里雲はあなたにCNAMEアドレスを渡します。この住所を持って
、あなたのドメイン名解析バックグラウンド (阿里雲DNSなど) にCNAMEレコードを追加します。解析が有効になっただけで、CDNは加速して正式に機能する。
2.コード変換テンプレートの設定 (スムーズな再生の鍵)
オリジナルビデオ (携帯電話録画のMP4など) は体積が大きく、ビットレートが固定されておらず、ネットワークの悪い環境では非常に簡単である。システムに自動的にスライスして体積を下げる必要があります。
左側のメニューで「グローバル設定」 $ \ right arrow $ 「トランスコードテンプレートグループ」に入ります。
「トランスコードテンプレートグループを追加」をクリックします。
パッケージフォーマット: HLS (M3U8) を選択することを強く推奨します。
💡なぜHLS/m3u 8を選ぶのですか?MP4再生はファイル全体のダウンロード部分を待ってインデックスを作成しなければならないが、HLS形式はビデオを無数の10秒の小さなスライスに切る。ユーザーは再生時にどれだけダウンロードしますか?
必要な明瞭度 (標準、高性能ハイビジョンなど) をチェックし、「保存」をクリックします。
第二ステップ: 盗難防止チェーンの2つの死防御線 (2分)
ドメイン名が設定されたので、すぐにセキュリティ手段に行かなければなりません。盗難防止チェーンに行かなければ、あなたの放送ドメイン名が暴露されると、誰もが直接あなたのトラフィックを無駄にすることができます。
最初の防御線: Referer盗難防止チェーン (白防止)
その原理は「誰がこのビデオを要求しているのか」をチェックすることです。請求が百度や他人の小さなサイトから出された場合は、直接拒否する。
「ドメイン名管理」リストで、あなたがバインドした再生ドメイン名の右側にある「構成」をクリックします。
左側の「アクセス制御」をクリックします。
タイプ: 「ホワイトリスト」を選択します。
Refererリスト: 自分のwebサイトのドメイン名を1行に入力します。例:
許可空Referer: あなたのビデオが携帯電話APPに埋め込まれている場合、またはユーザーがブラウザのアドレスバーで直接開くことを許可している場合は、「はい」をチェックします自分のページでしか見ることができないことを厳しく制限する場合は、「いいえ」をチェックしなければなりません。
第二の防御線: URL認証 (防御の達人: 核心の命を守る手段)
RefererはハッカーがHTTP Headerを修正することで偽造されやすい。ビデオを完全にロックするには、オンにする必要があります
URL認証
。
オンにすると、ビデオの実際の再生アドレスの後ろに強制的に一連の暗号化されたストリングが付いてきます。
?Auth_key = タイムスタンプ-ランダム数-MD5
) この暗号化ストリングは、あなた自身のバックエンドサーバがユーザーがクリックして再生したときに動的に計算して生成し、
通常は30分のみ有効です
。期限切れになると、ハッカーはリンク全体を手に入れても再生できない。
ドメイン名の [アクセス制御] ページで、 [URL認証] タブに切り替えます。
「修正」をクリックして、ステータスを「オン」に変更します。
主key/予備key: ランダムに一連の入力をします。
長い文字列 (例えばMySecretKey2026) は、「保存」をクリックします。このKeyを覚えておいてください。これは後のコードで使う鍵です。
デフォルトの有効時間は1800秒(30分) に設定されています。
ステップ3: バックエンドSpring Bootが認証URLを動的に生成する (3分)
今、ユーザーがフロントエンドでビデオをクリックすると、バックエンドは先ほどの「メインキー」から時効性のある安全な再生リンクを計算します。
1. 依存関係の導入
Spring Bootプロジェクトに阿里雲オンデマンドのコアツール類を導入します
<依存関係>
<GroupI d>org.apache.com mons</groupId>
<ArtifactId> commons-lang3</artifactId>
<Version> 3.0.05 </version>
</依存関係>
<依存関係>
<GroupId> コモンズ-codec</groupId>
<ArtifactId> コモンズ-codec</artifactId>
<Version> 1. 15</version>
</依存関係>
2.認証アルゴリズムのツール類を作成する
重い公式SDKを導入する必要はなく、阿里雲のURL認証A案は本質的に標準的なMD5署名アルゴリズムである。次の私があなたのために合理化した純粋なドライコードを直接コピーします
第3ステップ:フロントエンドでのVueカウントダウンコンポーネントの実装(1分)
バックエンドの対応は完了しました。フロントエンドでは、ユーザーが「送信」ボタンを連打するのを防ぐため、標準的な60秒のカウントダウン処理を実装する必要があります。
ここでは
Vue 3(コンポジションAPI)Axios
例として、最も直感的なコードをそのまま示します:
<テンプレート>
<div class="sms-box">
<input type="text" v-model="phone" placeholder="携帯電話番号を入力してください" />
<button :disabled="isCounting" @click="handleSend">
{{ isCounting?'${countdown}秒後に再取得': '認証コードを取得する' }}
</ボタン>
</div>
</テンプレート>
<script setup>
import { ref } from 'vue';
import axios from 'axios';
const phone = ref('');
constカウントダウン = ref(60);
const isCounting = ref(false);
let timer = null;
const handleSend = async () => {
もしでなければ /^1[3-9]\d{9}$/.test(電話番号.value)) {
アラート('正しい携帯電話番号を入力してください');
戻る;
}
試みる {
// バックエンドAPIを呼び出す
コンストラクターズ = アウェイアクシios.post('/api/sms/send?phone =${ phone.value}');
アラート(レスポンスデータ);
// カウントダウンを開始する
カウントダウンを開始します。
} catch (エラー) {
エラーが発生しました: (エラーレスポンスのデータ || 「リクエストに失敗しました」)
}
};
const startCountdown = () => {
isCounting.value = true;
カウントダウンの値 = 60;
Timer = setInterval (
() => {
カウントダウン.value--;
if (カウントダウン.value <= 0) {
clearInterval(timer);
isCounting.value = false;
}
}, 1000);
};
</スクリプト>
本番環境での失敗を避けるためのガイド(運用担当者の血と涙の経験)
APIがハッカーによる“SMS攻撃”を受けないように注意してください! APIが公開されるとすぐに、ハッカーたちが自動化スクリプトを用いて数万件ものランダムな携帯電話番号で、あなたの /api/sms/sendエンドポイントに大量のリクエストを送りつけます。一晩であなたのAlibaba Cloudアカウントの残高を全額引き落とすことができます。鉄則の防御策:フロントエンドで60秒のカウントダウンを実装し、バックエンドではRedisを用いて1つの携帯電話番号あたりの60秒間のリクエスト頻度を制限することに加え、SMS送信用のAPIには必ず「画像認証」または「スライド式CAPTCHA」を強制的に導入しなければなりません。パズルが正しく完成した合法なリクエストの場合にのみ、バックエンドからSMSが送信されます。
阿里雲の「頻度制限」をトリガーした阿里雲メール公式には、1つの携帯電話番号が1分以内に1本、1時間以内に5本を超えない1日以内に10本を超えない。ローカルでテスト中に自分宛てに大量のSMSを送信しすぎて、突然「isv.BUSINESS_LIMIT_CONTROL」というエラーが発生しても慌てないでください。それはコードの記述ミスではなく、Alibaba Cloud側でリソースの使用制限がかかっているためです。制限は翌日には自動的に解除されます。
この一連のフロントエンドとバックエンドを網羅する仕組みにより、あなたのマイクロサービスアプリケーションは、コンプライアンスとセキュリティを備えたSMS通知機能を正式に有することになります。さあ、早速導入して試してみましょう!
