このトピックでは、ApsaraVideo Player SDK for Windows の高度な機能について説明し、サンプルコードを提供します。
ビデオ再生の設定
外部字幕の設定
ApsaraVideo Player SDK for Windows では、外部字幕の追加と切り替えができます。サポートされている字幕ファイルは .srt 形式のみです。サンプルコード:
字幕を表示するためのコントロールを作成します。
さまざまな形式の字幕に対して、異なるビューを作成できます。
mSubtitleLabelPtr = new QLabel(QString(""), this); mSubtitleLabelPtr->setParent(this);字幕用のリスナーを設定します。
// 外部字幕が追加されます。 void AlivcLivePlayerMainDlg::onSubtitleExtAdded(AliPlayer *player, int64_t trackIndex, const char *URL) { emit SgnAddExtSubtitle((qint64) trackIndex); } // 字幕を表示するためのコールバック。 void AlivcLivePlayerMainDlg::onSubtitleShow(AliPlayer *player, int64_t trackIndex, int64_t subtitleId, const char *subtitle) { emit SgnUpdateSubtitle(QString::fromStdString(subtitle), true); } // 字幕を非表示にするためのコールバック。 void AlivcLivePlayerMainDlg::onSubtitleHide(AliPlayer *player, int64_t trackIndex, int64_t subtitleId) { emit SgnUpdateSubtitle(QString(""), false); }字幕を追加します。
mPlayerPtr->addExtSubtitle("url");字幕を切り替えます。
mPlayerPtr->selectExtSubtitle(trackIndex, true);
音声のみ再生の有効化
音声のみの再生を有効にするには、ビデオ再生を無効にします。`prepare` メソッドを呼び出す前に `PlayerConfig` を設定する必要があります。
AVPConfig *config = mPlayerPtr->getConfig();
config->mDisableVideo = true;
mPlayerPtr->setConfig(config);アダプティブビットレートストリーミング
Windows 版 ApsaraVideo Player SDK は、HTTP Live Streaming (HLS) および Dynamic Adaptive Streaming over HTTP (DASH) ビデオストリームのアダプティブビットレートストリーミングをサポートしています。 prepare メソッドの呼び出しに成功すると、getMediaInfo を呼び出して各ストリームに関する情報を取得できます。この情報は TrackInfo として返されます。 サンプルコード:
AVPMediaInfo info = mPlayerPtr->getMediaInfo();
for (int i = 0; i < info.trackCount; i++) {
AVPTrackInfo *track = info.tracks[i];
}HLS および DASH ビデオストリームは、マルチビットレートトランスコーディングテンプレートグループを使用してパッケージングする必要があります。ApsaraVideo VOD コンソールで、設定の管理 > ApsaraVideo Media Processing の設定 > トランスコードテンプレートグループ に移動して、必要なビデオストリームを設定および生成します。詳細については、「ビデオまたは字幕のパッケージングテンプレートの設定」をご参照ください。
再生中に、プレーヤーの selectTrack メソッドを呼び出してストリームのビットレートを切り替えることができます。値を SELECT_AVPTRACK_TYPE_VIDEO_AUTO に設定すると、アダプティブビットレートストリーミングが有効になります。サンプルコード:
// ビットレートを切り替えます。
mPlayerPtr->selectTrack(trackIndex);
// アダプティブビットレートに切り替えます。
mPlayerPtr->selectTrack(SELECT_AVPTRACK_TYPE_VIDEO_AUTO);切り替えの結果は、onTrackChanged リスナーのコールバックで返されます。サンプルコード:
void AlivcLivePlayerMainDlg::onTrackChanged(AliPlayer *player, AVPTrackInfo *info)
{
if (info->trackType == AVPTRACK_TYPE_VIDEO) {
// ビデオが変更されました
}
// etc
}スナップショットのキャプチャ
ApsaraVideo Player SDK for Windows の snapShot メソッドを呼び出して、現在のビデオのスナップショットをキャプチャできます。スナップショットは、onSnapshotImageBuffer コールバックを通じて ARGB32 形式で返されます。サンプルコード:
// 現在のビデオフレームのスナップショットをキャプチャします。
mPlayerPtr->snapshot();
// スナップショットキャプチャのコールバック。
void AlivcLivePlayerMainDlg::onSnapshotImageBuffer(AliPlayer *player, int width, int height, unsigned char *pARGBBuffer)
{
QString savePath = "保存パス";
QImage snapshot(pARGBBuffer, width, height, QImage::Format_ARGB32);
snapshot.save(savePath);
}スナップショットにはユーザーインターフェイスは含まれません。
プレビュー
ApsaraVideo Player SDK for Windows では、ApsaraVideo VOD のプレビュー機能を設定できます。この機能は、VidAuth および VidSts ソースをサポートしています。再生には VidAuth の使用を推奨します。プレビュー機能の設定と使用方法の詳細については、「ビデオのプレビュー」をご参照ください。
プレビュー機能を設定した後、VidPlayerConfigGenerator インターフェイスの setPreviewTime メソッドを呼び出して、プレーヤーのプレビュー時間を設定します。プレビュー時間を設定して SDK を使用してビデオを再生すると、サーバーは完全なビデオコンテンツの代わりにプレビュー期間のコンテンツのみを返します。次のサンプルコードは、VidSts を使用した再生の例です:
VidPlayerConfigGenerator playConfigGen;
playConfigGen.setPreviewTime(10);
AVPVidStsSource vidSource;
vidSource.initWithVid("ビデオ ID",
"アクセスキー ID",
"アクセスキーシークレット",
"セキュリティトークン",
"リージョン",
playConfigGen.generatePlayerConfig());
mPlayerPtr->setSource(vidSource);Referer の設定
ApsaraVideo Player SDK for Windows は、Referer の設定をサポートしています。コンソールで Referer をブラックリストおよびホワイトリストと併用して、アクセス権限を制御できます。リクエストの Referer を設定するには、AVPConfig インターフェイスを使用します。サンプルコード:
// 設定を取得します。
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Referer を設定します。
pConfig->referer = referer;
....// その他の設定。
// プレーヤーに設定を適用します。
mPlayerPtr->setConfig(pConfig);User-Agent の指定
ApsaraVideo Player SDK for Windows は、リクエストの User-Agent (UA) を設定するための AVPConfig を提供します。UA を設定すると、プレーヤーはリクエストに UA 情報を含めます。サンプルコード:
// 設定を取得します。
AVPConfig *pConfig = mPlayerPtr->getConfig();
// User-Agent を設定します。
pConfig->userAgent = userAgent;
....// その他の設定。
// プレーヤーに設定を適用します。
mPlayerPtr->setConfig(pConfig);ネットワークタイムアウト期間と再試行回数の指定
ApsaraVideo Player SDK for Windows は、ネットワークタイムアウト期間と再試行回数の設定をサポートしています。これらの設定を行うには、AVPConfig インターフェイスを使用します。サンプルコード:
// 設定を取得します。
AVPConfig *pConfig = mPlayerPtr->getConfig();
// ネットワークタイムアウト期間をミリ秒単位で設定します。
pConfig->networkTimeout = 5000;
// タイムアウト時の再試行回数を設定します。再試行間隔は networkTimeout の値です。networkRetryCount を 0 に設定した場合、再試行は行われません。再試行ポリシーはアプリによって決定されます。デフォルト値:2。
pConfig->networkRetryCount = 2;
....// その他の設定。
// プレーヤーに設定を適用します。
mPlayerPtr->setConfig(pConfig);networkRetryCount を設定すると、ネットワークの問題で読み込みが発生した場合、プレーヤーは指定された回数だけ再試行します。各再試行の間隔は networkTimeout の値です。
最大再試行回数に達しても読み込み中の状態が続く場合、onError イベントがトリガーされます。この場合、AVPErrorModel.code の値は ERROR_LOADING_TIMEOUT になります。
networkRetryCount が 0 に設定されている場合、ネットワークの再試行がタイムアウトすると、プレーヤーは onPlayerEvent コールバックをトリガーします。eventWithString パラメーターは EVENT_PLAYER_NETWORK_RETRY です。この時点で、プレーヤーの reload メソッドを呼び出してネットワークを再読み込みするか、他の操作を実行できます。
バッファーと遅延の制御
キャッシュ制御はプレーヤーにとって非常に重要です。適切な設定により、起動を高速化し、カクつきを減らすことができます。ApsaraVideo Player SDK for Windows は、キャッシュと遅延を制御するためのインターフェイスを AVPConfig で提供しています。サンプルコード:
// 設定を取得します。
AVPConfig *pConfig = mPlayerPtr->getConfig();
// 最大遅延時間。注:このパラメーターはライブストリーミングでのみ有効です。遅延が大きい場合、SDK はフレーム同期などの操作を実行して、遅延をこの範囲内に保ちます。
pConfig->maxDelayTime = 5000;
// 最大バッファー時間 (ミリ秒単位)。プレーヤーは一度に指定された時間分のデータを最大でバッファーに読み込みます。
pConfig->maxBufferDuration = 50000;
// 高バッファーウォーターマーク (ミリ秒単位)。ネットワーク状態が悪いためにプレーヤーがデータを読み込んでいる場合、バッファーされたデータがこの時間に達すると読み込み中状態が終了します。
pConfig->highBufferDuration = 3000;
// 開始バッファー時間 (ミリ秒単位)。値が小さいほど起動が速くなります。ただし、再生開始直後にプレーヤーが読み込み中状態になる可能性があります。
pConfig->startBufferDuration = 500;
// その他の設定。
// プレーヤーに設定を適用します。
mPlayerPtr->setConfig(pConfig);3つのバッファー時間は、startBufferDuration ≤ highBufferDuration ≤ maxBufferDuration という条件を満たす必要があります。
HTTP ヘッダーの設定
AVPConfig パラメーターを使用して、プレーヤーからのリクエストに HTTP ヘッダーパラメーターを追加できます。サンプルコード:
// 設定を取得します。
AVPConfig *pConfig = mPlayerPtr->getConfig();
// ヘッダーを設定します。
pConfig->headerCount = 1;
pConfig->httpHeaders = new char *[pConfig->headerCount];
// たとえば、HTTPDNS を使用する場合は、Host を設定する必要があります。
pConfig->httpHeaders[0] = strdup("Host:example.com");
....// その他の設定。
// プレーヤーに設定を適用します。
mPlayerPtr->setConfig(pConfig);パフォーマンス
ローカルキャッシュ
ApsaraVideo Player SDK for Windows は、再生中にコンテンツをキャッシュできるローカルキャッシュ機能を提供します。この機能により、ユーザーがビデオを繰り返し再生する際のデータトラフィックを節約できます。この機能を実装するには、`prepare` メソッドを呼び出す前に、プレーヤーの AVPCacheConfig を設定します。サンプルコード:
AVPCacheConfig mCacheConfig;
// キャッシュ機能を有効にします。
mCacheConfig.enable = true;
// キャッシュ可能な単一ファイルの最大時間。この時間を超えるファイルはキャッシュされません。
mCacheConfig.maxDuration = 100;
// キャッシュディレクトリの最大サイズ。サイズ制限を超えた場合、最も古いキャッシュファイルが削除されます。
mCacheConfig.maxSizeMB = 200;
// キャッシュディレクトリのパス。これを、ご利用のアプリの目的のパスに置き換えてください。
mCacheConfig.path = strdup("ご利用のキャッシュパスをここに入力してください");
// プレーヤーにキャッシュ設定を適用します。
mPlayerPtr->setCacheConfig(&mCacheConfig);setCacheConfig を設定した場合、ビデオが正常にキャッシュされた後、次の状況でキャッシュファイルが使用されます。
ループ再生が有効な場合、2回目のループからキャッシュファイルが自動的に再生に使用されます。
ビデオが正常にキャッシュされた後、新しいプレーヤーを作成して同じリソースを再生する場合も、キャッシュファイルが自動的に使用されます。
重要VID ベースの再生の場合、プレーヤーはオンラインリクエストからビデオ ID (VID) などの情報を使用してキャッシュファイルを特定します。したがって、プレーヤーはネットワークリクエストから情報を受信した後にのみ、使用するキャッシュファイルを決定できます。
再生中のキャッシュ機能には、次の条件が適用されます:
UrlSource を使用した再生の場合、HLS (M3U8) ストリームはキャッシュされません。その他のサポートされている形式は、キャッシュ設定に従ってキャッシュされます。
VidAuth または VidSts を使用した再生の場合、ビデオはキャッシュ設定に従ってキャッシュされます。
キャッシュは、プレーヤーがすべてのデータを読み取った後にのみ成功と見なされます。ダウンロードが完了する前に
stopメソッドを呼び出すか、onErrorイベントが発生した場合、キャッシュ処理は失敗します。キャッシュされたコンテンツ内でのシークは、キャッシュ結果に影響しません。キャッシュされたコンテンツ外へのシークは、キャッシュ処理の失敗を引き起こします。
セキュリティファイルがアプリ情報と一致しない場合、キャッシュ処理は失敗します。
キャッシュの結果は
onPlayerEventコールバックで返されます。コールバックにはEVENT_PLAYER_CACHE_SUCCESSとEVENT_PLAYER_CACHE_ERRORが含まれます。
ビデオダウンロード
ApsaraVideo Player SDK for Windows は、ApsaraVideo VOD ビデオのダウンロード機能を提供します。この機能により、ユーザーはビデオをローカルにキャッシュして、ApsaraVideo Player でオフライン視聴できます。通常ダウンロードとセキュアダウンロードの2つのダウンロードモードが利用可能です。
通常ダウンロード
通常ダウンロードモードでダウンロードされたビデオは、Alibaba Cloud によって暗号化されず、サードパーティ製プレーヤーで再生できます。
セキュアダウンロード
セキュアダウンロードモードでダウンロードされたビデオは、Alibaba Cloud によって暗号化されます。これらのビデオは ApsaraVideo Player でのみ再生できます。
注意事項
ビデオダウンロード機能は、VidSts および VidAuth を使用した再生でのみサポートされます。
プレーヤーのビデオダウンロード機能を使用するには、ApsaraVideo VOD コンソールでダウンロードモードを有効にして設定する必要があります。詳細については、「オフラインダウンロード」をご参照ください。
ダウンロードの再開に対応しています。
手順
任意: 暗号化検証用のセキュリティファイルを設定します。セキュリティファイルの設定は、セキュアダウンロードモードを使用する場合にのみ必要です。
説明設定された暗号化および検証ファイルがアプリ情報と一致していることを確認してください。一致しない場合、ビデオのダウンロードは失敗します。
セキュアダウンロードモードを使用する場合、ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定する必要があります。キーファイルは、ダウンロードおよび再生するビデオの復号化と検証に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロードの有効化」をご参照ください。
この設定は一度だけ行う必要があります。サンプルコード:
InitPrivateService(fileContentBuffer, fileLength);ダウンローダーを作成して設定します。
例:
mMediaDownloader = AliMediaDownloader::CreateMediaDownloader(); mMediaDownloader->setListener(new AVDListenerImpl); mMediaDownloader->setSaveDirectory("saveDir");ダウンロードソースを準備します。
prepareメソッドを呼び出してダウンロードソースを準備します。VidAuth (推奨) および VidSts のダウンロードソースのみがサポートされています。次のサンプルコードは、VidSts ダウンロードソースの例です:AVPVidStsSource vidSource; vidSource.initWithVid("ビデオ ID", "アクセスキー ID", "アクセスキーシークレット", "セキュリティトークン", "リージョン", nullptr); mMediaDownloader->prepareWithVid(&vidSource);準備されたダウンロードソースからダウンロードしたいコンテンツを選択します。
ソースが準備されると、
onPreparedメソッドがトリガーされます。返される TrackInfo には、解像度など、各ビデオストリームに関する情報が含まれています。ダウンロードするトラックを選択します。サンプルコード:void YourClass::onPrepared(AliMediaDownloader *downloader, AVPMediaInfo *mediaInfo) { AVPTrackInfo *track = mediaInfo->tracks[0]; mMediaDownloader->selectTrack(track->trackIndex); }ダウンロードソースを更新し、ダウンロードを開始します。
VidSts と VidAuth の有効期限が切れるのを防ぐため、ダウンロードを開始する前にダウンロードソース情報を更新します。サンプルコード:
mMediaDownloader->updateWithVid(&vidSource); mMediaDownloader->start();ダウンロードが成功または失敗した後、ダウンロードオブジェクトを解放します。
ダウンロードが成功した後、ダウンローダーを解放します。サンプルコード:
delete mMediaDownloader; mMediaDownloader = nullptr;