このトピックでは、ApsaraVideo Player SDK for Windowsの高度な機能について説明し、サンプルコードを提供します。
ビデオ再生の設定
外部字幕の設定
ApsaraVideo Player SDK for Windowsでは、外部字幕を追加および切り替えできます。 .srt形式の字幕ファイルのみがサポートされています。 サンプルコード:
字幕を表示するコントロールを作成します。
異なる形式の字幕に対して異なるビューを作成する必要があります。
mSubtitleLabelPtr = new QLabel(QString(""), this); mSubtitleLabelPtr->setParent(this);
字幕のリスナーを設定します。
// Listens to the callback for adding an external subtitle. void AlivcLivePlayerMainDlg::onSubtitleExtAdded(AliPlayer *player, int64_t trackIndex, const char *URL) { emit SgnAddExtSubtitle((qint64) trackIndex); } // Listens to the callback for displaying the subtitle. void AlivcLivePlayerMainDlg::onSubtitleShow(AliPlayer *player, int64_t trackIndex, int64_t subtitleId, const char *subtitle) { emit SgnUpdateSubtitle(QString::fromStdString(subtitle), true); } // Listens to the callback for hiding the subtitle. 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);
適応ビットレートストリーミング
ApsaraVideo Player SDK for Windowsは、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コンソールにログインし、左側のナビゲーションウィンドウで ビデオパッケージテンプレートの設定」をご参照ください。
を選択します。 詳細については、「再生中に、selectTrack
を呼び出して、必要なビットレートに切り替えることができます。 メソッドでSELECT_AVPTRACK_TYPE_VIDEO_AUTOを指定すると、適応ビットレートストリーミングが有効になります。 サンプルコード:
// Switch the bitrate.
mPlayerPtr->selectTrack(trackIndex);
// Switch to the adaptive bitrate.
mPlayerPtr->selectTrack(SELECT_AVPTRACK_TYPE_VIDEO_AUTO);
onTrackChanged
メソッドによって呼び出されるコールバックは、切り替え結果を返します。 サンプルコード:
void AlivcLivePlayerMainDlg::onTrackChanged(AliPlayer *player, AVPTrackInfo *info)
{
if (info->trackType == AVPTRACK_TYPE_VIDEO) {
// video changed
}
// etc
}
スナップショットの取得
snapShot
操作を呼び出して、ビデオスナップショットをキャプチャできます。 プレイヤーはキャプチャしたスナップショットをARGB32形式で保存します。 onSnapshotImageBuffer
コールバックが呼び出された後、キャプチャされたスナップショットに関する情報を取得できます。 サンプルコード:
// Capture a snapshot of the current video image.
mPlayerPtr->snapshot();
// Configure the callback for snapshot capture.
void AlivcLivePlayerMainDlg::onSnapshotImageBuffer(AliPlayer *player, int width, int height, unsigned char *pARGBBuffer)
{
QString savePath = "save path";
QImage snapshot(pARGBBuffer, width, height, QImage::Format_ARGB32);
snapshot.save(savePath);
}
スナップショットにはUIが含まれていません。
ビデオプレビューの設定
ApsaraVideo Player SDK for Windowsでは、ApsaraVideo VODでプレビュー機能を設定できます。 この機能は、VidAuthおよびVidStsソースをサポートします。 再生にはVidAuthを使用することを推奨します。 プレビュー機能を設定および使用する方法の詳細については、「プレビュー機能の設定」をご参照ください。
プレビュー機能を有効にした後、VidPlayerConfigGenerator
でsetPreviewTime
操作を呼び出して、プレビュー期間を指定できます。 プレビュー期間を指定すると、ApsaraVideo Player SDK for Windowsでは、ビデオ全体ではなく、指定した期間のビデオをプレビューできます。 次のサンプルコードに例を示します。 この例では、VidStsが使用されます。
VidPlayerConfigGenerator playConfigGen;
playConfigGen.setPreviewTime(10);
AVPVidStsSource vidSource;
vidSource.initWithVid(Video ID,
"accessKeyId",
"accessKeySecret",
"Security token",
"Access region ID",
playConfigGen.generatePlayerConfig());
mPlayerPtr->setSource(vidSource);
リファラーの設定
ApsaraVideo Player SDK for Windowsには、リクエストリファラーを設定するためのAVPConfig
クラスが用意されています。 ApsaraVideo VODコンソールで設定されたリファラーホワイトリストまたはブラックリストと一緒にリファラーを使用して、アクセス制御を実装できます。 サンプルコード:
// Obtain the configuration information.
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Set the referer.
pConfig->referer = referer;
....// Configure other settings.
// Configure the settings for the player.
mPlayerPtr->setConfig(pConfig);
ユーザーエージェントの指定
ApsaraVideo Player SDK for Windowsには、リクエストユーザーエージェントを指定するためのAVPConfigクラスが用意されています。 ユーザーエージェントを指定すると、プレイヤーはリクエストにユーザーエージェント情報を含めます。 サンプルコード:
// Obtain the configuration information.
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Specify the user agent.
pConfig->userAgent = userAgent;
....// Configure other settings.
// Configure the settings for the player.
mPlayerPtr->setConfig(pConfig);
ネットワークのタイムアウト時間とリトライ回数の指定
ApsaraVideo Player SDK for Windowsには、ネットワークタイムアウト期間と再試行回数を設定するためのAVPConfig
クラスが用意されています。 サンプルコード:
// Obtain the configuration information.
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Set the network timeout period. Unit: milliseconds.
pConfig->networkTimeout = 5000;
// Specify the maximum number of retries upon a network timeout. The retry interval equals the timeout period specified by the NetworkTimeout parameter. The networkRetryCount parameter specifies the maximum number of retries. A value of 0 indicates zero retry. The application determines the maximum number of retries. Default value: 2.
pConfig->networkRetryCount = 2;
....// Configure other settings.
// Configure the settings for the player.
mPlayerPtr->setConfig(pConfig);
networkRetryCountパラメーターを0以外の値に設定した場合、ネットワークエラーによりプレーヤーがデータの読み込みを開始したときに、プレーヤーは再生を再試行します。 再試行の最大数は、networkRetryCountパラメーターの値に等しくなります。 再試行間隔は、networkTimeoutパラメーターの値に等しくなります。
再試行の最大数に達しても読み込みが続く場合、onErrorイベントによってコールバックが呼び出されます。 この場合、AVPErrrorModel. codeはERROR_LOADING_TIMEOUTを返します。
networkRetryCountパラメーターを0に設定すると、ネットワークタイムアウトが発生したときに、onPlayerEventイベントによってコールバックが呼び出されます。 この場合、eventWithStringはEVENT_PLAYER_NETWORK_RETRYを返します。 この問題を解決するには、ApsaraVideo Player SDKが提供するreloadメソッドを呼び出して、ネットワークパケットをリロードしたり、ビジネス要件に基づいて他の操作を実行したりできます。
バッファとレイテンシの制御
バッファ制御は、プレーヤーにとって重要です。 適切な設定を使用することで、スタートアップの読み込み時間を短縮し、再生のスムーズさを向上できます。 ApsaraVideo Player SDK for Windowsには、バッファ設定とレイテンシ設定を構成できるAVPConfig
クラスが用意されています。 サンプルコード:
// Obtain the configuration information.
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Set the maximum latency. This parameter is valid only for live streaming. If the latency exceeds the maximum limit, ApsaraVideo Player SDK synchronizes frames to ensure that the latency does not exceed the limit.
pConfig->maxDelayTime = 5000;
// Set the maximum buffer duration. Unit: milliseconds. This parameter specifies the maximum buffer duration for the player to load data at a time.
pConfig->maxBufferDuration = 50000;
// Set the peak buffer duration. Unit: milliseconds. This parameter specifies the peak buffer duration. After the peak buffer duration elapses, the player stops loading data when the network conditions are poor.
pConfig->highBufferDuration = 3000;
// Set the startup buffer duration Unit: milliseconds. A smaller value indicates a shorter startup buffer duration. In this case, the player starts to load data sooner after the playback starts.
pConfig->startBufferDuration = 500;
// Configure other settings.
// Configure the settings for the player.
mPlayerPtr->setConfig(pConfig);
startBufferDurationパラメーターの値がhighBufferDurationパラメーターの値より大きくないことを確認してください。 highBufferDurationパラメーターの値がmaxBufferDurationパラメーターの値より大きくないことを確認してください。
HTTP ヘッダーの設定
ApsaraVideo Player SDKは、プレーヤーのHTTPヘッダーを設定するためのAVPConfig
クラスを提供します。 サンプルコード:
// Obtain the configuration information.
AVPConfig *pConfig = mPlayerPtr->getConfig();
// Configure the header.
pConfig->headerCount = 1;
pConfig->httpHeaders = new char *[pConfig->headerCount];
// Configure a host when you use Alibaba Cloud HTTPDNS.
pConfig->httpHeaders[0] = strdup("Host:example.com");
....// Configure other settings.
// Configure the settings for the player.
mPlayerPtr->setConfig(pConfig);
パフォーマンスの設定
ローカルキャッシュの設定
ApsaraVideo Player SDK for Windowsでは、再生中にビデオをキャッシュできます。 これにより、ループ再生中のトラフィックが節約されます。 ローカルキャッシュ機能を設定するには、prepareメソッドを呼び出す前にAVPCacheConfigを呼び出します。 サンプルコード:
AVPCacheConfig mCacheConfig;
// Enable the local caching feature.
mCacheConfig.enable = true;
// Specify the maximum duration of a single cached file. Files whose duration exceeds the upper limit are not cached.
mCacheConfig.maxDuration = 100;
// Specify the maximum size of the cache directory. If the total size of cached files in the cache directory exceeds the upper limit, the earliest cached files are overwritten.
mCacheConfig.maxSizeMB = 200;
// Set the cache directory to the directory required by your application.
mCacheConfig.path = strdup("please use your cache path here");
// Configure the cache settings for the player.
mPlayerPtr->setCacheConfig(&mCacheConfig);
キャッシュファイルを使用するには、setCacheConfigを呼び出す必要があります。 キャッシュファイルは、次のシナリオで使用されます。
ループ再生機能を有効にすると、プレーヤーは、再生が完了するたびに、キャッシュされたビデオファイルを使用してビデオを自動的に再生します。
ビデオをキャッシュし、ビデオを再生するプレーヤーを作成すると、新しいプレーヤーはキャッシュされたビデオファイルを使用してビデオを再生します。
重要プレーヤーは、オンライン要求からのビデオIDなどの情報を使用して、ビデオIDベースの再生のためにキャッシュされたファイルを見つけます。
次の情報は、再生およびキャッシュ機能の制限について説明しています。
ビデオの再生にUrlSourceを使用し、再生URLがHLS形式の場合、プレーヤーは再生中にビデオをキャッシュしません。 再生URLが他の形式の場合、プレーヤーは設定に基づいて再生中にビデオをキャッシュします。
再生にVidAuthまたはVidStsを使用する場合、プレーヤーは設定に基づいて再生中にビデオをキャッシュします。
ビデオは、プレーヤーがすべてのビデオデータを読み取った後にキャッシュされます。 プレーヤーがすべてのビデオデータを読み取る前に、
stop
メソッドが呼び出されるか、onError
コールバックが呼び出されると、キャッシュは失敗します。バッファ内シークはキャッシュ結果に影響しません。 バッファ外の位置へのシークは、キャッシング失敗を引き起こす可能性があります。
セキュリティファイルがアプリケーション情報と一致しない場合、ビデオキャッシュは失敗します。
onPlayerEvent
コールバックからキャッシュ結果を確認できます。EVENT_PLAYER_CACHE_SUCCESS
はビデオがキャッシュされていることを示し、EVENT_PLAYER_CACHE_ERROR
はビデオがキャッシュされていないことを示します。
ビデオダウンロードの設定
ApsaraVideo Player SDK for Windowsでは、ローカルデバイスにビデオをダウンロードして、ApsaraVideo Playerでオフライン再生できます。 通常のダウンロードモードと安全なダウンロードモードがサポートされています。
通常のダウンロード
通常のダウンロードモードでダウンロードされたビデオは、Alibaba Cloudによって暗号化されず、サードパーティのプレーヤーで再生できます。
安全なダウンロード
セキュアダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されます。 これらのビデオを再生するには、ApsaraVideo Playerのみを使用できます。
使用上の注意
VidStsまたはVidAuthに基づいて再生されるビデオのみをダウンロードできます。
ビデオダウンロード機能を使用するには、ApsaraVideo VODコンソールでこの機能を有効にし、ダウンロードモードを設定する必要があります。 詳細については、「ダウンロード設定の構成」をご参照ください。
再開可能なダウンロードがサポートされています。
手順
オプション: 暗号化検証用のセキュリティファイルを設定します。 安全なダウンロードモードを使用する場合にのみ、セキュリティファイルを設定する必要があります。
説明暗号化検証用セキュリティファイルの情報がアプリケーション情報と一致していることを確認してください。 それ以外の場合、ビデオのダウンロードは失敗します。
セキュアダウンロードモードを使用する場合、ApsaraVideo VODコンソールで生成されるキーファイルをApsaraVideo Player SDKで設定する必要があります。 キーファイルは、ダウンロードと再生のためにビデオを解読して検証するために使用されます。 キーファイルの生成方法の詳細については、「セキュアなダウンロードの有効化」をご参照ください。
キーファイルを1回だけ設定する必要があります。 サンプルコード:
InitPrivateService(fileContentBuffer, fileLength);
ダウンローダーを作成して設定します。
サンプルコード:
mMediaDownloader = AliMediaDownloader::CreateMediaDownloader(); mMediaDownloader->setListener(new AVDListenerImpl); mMediaDownloader->setSaveDirectory("saveDir");
ダウンロードソースを準備します。
prepare
メソッドを呼び出して、ダウンロードソースを準備できます。 VidStsとVidAuthはダウンロードソースとしてサポートされています。 VidAuthソースの使用を推奨します。 この例では、VidStsが使用されています。AVPVidStsSource vidSource; vidSource.initWithVid("Video ID", "accessKeyId", "accessKeySecret", "Security token", "Access region 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;