このトピックでは、ApsaraVideo Player SDK for iOSの高度な機能について説明し、サンプルコードを提供します。 機能の詳細については、「ApsaraVideo Player SDK For iOSのAPI操作」をご参照ください。
再生の設定
短いビデオのリスト再生を有効にする
ApsaraVideo Player SDK for iOSは、ショートビデオの本格的なリスト再生機能を提供します。 SDKは、プリロードなどの機能を使用して、短いビデオの起動時間を最小限に抑えます。 長い動画ではこの機能を有効にしないことをお勧めします。
透明度設定のビデオを再生する
説明
ApsaraVideo Player SDKは、アルファチャンネルを使用した動画のレンダリングをサポートし、背景が透明な動的ギフト動画を再生します。 このようにして、誰かがストリーミングしているときにライブビデオコンテンツをブロックすることなく、ギフトの動的効果を表示できます。 これにより、視聴とインタラクティブな体験が大幅に向上します。
制限事項
ApsaraVideo MediaBox SDK V6.8.0以降およびApsaraVideo Player SDK V6.9.0以降を使用して、ビデオを透明にレンダリングできます。
メリット
透明度のあるMP4ビデオをギフト効果として使用できます。 これにより、動的エフェクトとビデオ互換性のパフォーマンスが向上し、ビデオサイズが縮小され、開発が簡素化されます。 これはまた、ギフト効果の視聴体験を最適化し、ユーザ体験を改善します。 透明度のあるMP4ビデオをギフト効果として使用すると、次の利点があります。
より高いビデオ品質: MP4ビデオを使用して、元の画像の詳細や色など、元の品質で動的なギフト効果を表示できます。 APNやIXDなどの他のビデオフォーマットと比較して、MP4はデザイナーが意図した元の品質で動的効果を表示できます。
ビデオサイズが小さい: APNGやIXDなどの他のビデオフォーマットと比較して、MP4はより効率的な方法でファイルサイズを縮小します。 これにより、負荷が加速され、ネットワーク帯域幅の消費が削減されます。
より良い互换性: MP4は、さまざまなデバイスやブラウザで広くサポートされている一般的なビデオフォーマットです。 主流のデバイスでギフトエフェクトとして使用されるMP4ビデオを再生できます。
開発効率の向上: MP4ビデオをギフト効果として使用するソリューションには、簡単な開発が必要です。 複雑な解析およびレンダリングロジックを研究および開発する代わりに、開発者は他の機能の実装に集中して開発効率を向上させることができます。
レンダリングにMetalフレームワークを使用する
ApsaraVideo Player SDK for iOSでは、Metalフレームワークを使用してビデオをレンダリングできます。
Metalフレームワークを使用して、背景色、スケーリングモード、およびピクチャーインピクチャー (PiP) 機能を設定できます。
サンプルコード
/**
@ brief The video rendering type. 0 specifies the default renderer and 1 specifies the mixed renderer. Default value: 0.
*/
/****
@brief video renderType, 0 means default render; 1 means mixed render.
*/
@property(nonatomic, assign) int videoRenderType;
例
AVPConfig *config = [self.player getConfig];
// Use the Metal framework to render videos.
config.videoRenderType = 1;
[self.player setConfig:config];
[self.player prepare];
外部字幕の設定
ApsaraVideo Player SDK for iOSでは、SubRip字幕 (SRT) 形式、SubStation Alpha (SSA) 形式、Advanced SubStation Alpha (ASS) 形式、またはWeb Video Text Track (WebVTT) 形式の外部字幕を追加、オン、オフにすることができます。 サンプルコード:
字幕を表示するビューを作成します。
異なる形式の字幕に対して異なるビューを作成する必要があります。
// Initialize the custom subTitleLabel view. UILabel *subTitleLabel = [[UILabel alloc] initWithFrame:frame]; // Add the subTitleLabel view to a custom superView, which is the parent view of the custom user interface. [superView addSubview:subTitleLabel];
字幕のリスナーを設定します。
// The callback is invoked when an external subtitle is added. - (void)onSubtitleExtAdded:(AliPlayer*)player trackIndex:(int)trackIndex URL:(NSString *)URL {} // The callback is invoked when the subtitle header information is obtained. - (void)onSubtitleHeader:(AliPlayer *)player trackIndex:(int)trackIndex Header:(NSString *)header{} // The callback is invoked when the subtitle is displayed. - (void)onSubtitleShow:(AliPlayer*)player trackIndex:(int)trackIndex subtitleID:(long)subtitleID subtitle:(NSString *)subtitle { subTitleLabel.text =subtitle; subTitleLabel.tag =subtitleID; } // The callback is invoked when the subtitle is hid. - (void)onSubtitleHide:(AliPlayer*)player trackIndex:(int)trackIndex subtitleID:(long)subtitleID{ [subTitleLabel removeFromSuperview]; }
字幕を追加します。
[self.player addExtSubtitle:URL];
字幕を切り替えます。
[self.player selectExtSubtitle:trackIndexenable:YES];
オーディオのみの再生を有効にする
ビデオ画像の表示を無効にして、オーディオのみの再生を有効にすることができます。 prepareメソッドを呼び出す前に、PlayerConfigクラスを設定します。
AVPConfig *config = [self.player getConfig];
config.disableVideo = YES;
[self.player setConfig:config];
ハードウェアデコードとソフトウェアデコードの切り替え
ApsaraVideo Player SDK for iOSは、H.264標準およびH.265標準に基づくハードウェアデコードをサポートしています。 enableHardwareDecoder
を呼び出して、ハードウェアデコード機能を有効または無効にすることができます。 デフォルトでは、ハードウェアデコードが有効になっています。 ハードウェアデコードの初期化に失敗した場合、ソフトウェアデコードが自動的に使用されてビデオ再生が保証されます。 サンプルコード:
// Enable hardware decoding. By default, hardware decoding is enabled.
self.player.enableHardwareDecoder = YES;
ハードウェアのデコードをソフトウェアのデコードに切り替えると、onPlayerEvent
コールバックが呼び出されます。 サンプルコード:
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
if (eventWithString == EVENT_SWITCH_TO_SOFTWARE_DECODER) {
// Switch to software decoding.
}
}
H.265アダプティブ再生
セカンダリH.264ストリームを設定し、H.265ストリームのハードウェアデコードに失敗すると、システムは自動的にセカンダリH.264ストリームを再生します。 セカンダリストリームを設定しない場合、ハードウェアのデコードが失敗すると、ソフトデコードがH.265再生に自動的に使用されます。
この機能は、アダプティブ再生を有効にした後にのみ使用できます。 アダプティブ再生は付加価値サービスです。 付加価値サービスを有効にするには、Yidaでリクエストを送信してください。
アダプティブプレイバックサービスは、ハードウェアデコードされたデータの動的データ発行とH.264の自動切り替えの機能を提供します。
アダプティブ再生サービスを有効にしない場合でも、ハードウェアのデコードに失敗しても、プレーヤーSDKはソフトウェアのデコードを自動的に使用できます。
次のサンプルコードでは、セカンダリストリームを設定する方法について説明します。
// Create a map on the application layer to store the primary stream URLs and secondary stream URLs as key-value pairs. The system queries the corresponding secondary URL based on the primary stream URL during switching.
NSString* getBackupUrlCallback(AVPBizScene scene, AVPCodecType codecType, NSString* oriurl){
NSMutableDictionary *globalMap = [AliPlayerViewController getGlobalBackupUrlMap];
NSString *backupUrl = globalMap[oriurl];
return backupUrl;
}
[AliPlayerGlobalSettings setAdaptiveDecoderGetBackupURLCallback:getBackupUrlCallback];
適応ビットレートストリーミング
ApsaraVideo VODトランスコードテンプレートグループを使用して、ビデオをHTTP Live Streaming (HLS) アダプティブビットレートストリームにトランスコードできます。 詳細については、「ApsaraVideo VODでのアダプティブビットレートストリーミングの実装」をご参照ください。
ApsaraVideo VODによってトランスコードされるアダプティブビットレートストリームにVidベースの再生を使用する場合、デフォルトの再生定義として
AUTO
を指定する必要があります。 このようにして、プレーヤーは適応ビットレートストリームを取得して再生できます。 デフォルトの再生定義としてAUTOを指定しない場合、プレーヤーは自動的にビデオストリームを低解像度で再生します。 ビデオ定義に基づく再生順序の詳細については、「ビデオ解像度に関するよくある質問」をご参照ください。 次のサンプルコードは、VidAuthベースの再生の既定の再生定義を指定する方法の例を示しています。AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.definitions = @"AUTO";
ApsaraVideo Player SDK for iOSは、HLSビデオストリームおよびDynamic adaptive streaming over HTTP (DASH) ビデオストリームのアダプティブビットレートストリーミングをサポートしています。 prepare
メソッドが呼び出された後、getMediaInfo
を呼び出して、TrackInfo
で示されるビットレート情報を取得します。 サンプルコード:
AVPMediaInfo *info = [self.player getMediaInfo];
NSArray<AVPTrackInfo*>* tracks = info.tracks;
再生中に、selectTrack
メソッドを呼び出して、必要なビットレートに切り替えることができます。 メソッドでSELECT_AVPTRACK_TYPE_VIDEO_AUTOを指定すると、適応ビットレートストリーミングが有効になります。 サンプルコード:
// Switch to the required bitrate.
[self.player selectTrack:track.trackIndex];
// Enable adaptive bitrate streaming.
[self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO];
onTrackChanged
コールバックは、切り替え結果を返します。 サンプルコード:
// Switch to the required bitrate.
[self.player selectTrack:track.trackIndex];
// Enable adaptive bitrate streaming.
[self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO];
スナップショットジョブの管理
ApsaraVideo Player SDK for iOSは、ビデオからスナップショットをキャプチャできるsnapshot
メソッドを提供します。 スナップショットをキャプチャすると、プレーヤーはキャプチャするビデオイメージのソースデータを保存し、ソースデータをビットマップ
に変換します。 スナップショットがキャプチャされたら、onCaptureScreen
コールバックを呼び出してビットマップを取得できます。 サンプルコード:
// Configure the callback for snapshot capture.
- (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
// Process the snapshot.
}
// Capture a snapshot of the current video image.
aliyunVodPlayer.snapshot();
スナップショットにはUIが含まれていません。
ビデオプレビューの設定
ApsaraVideo Player SDK for iOSは、ApsaraVideo VODの特定の設定を統合して、ビデオのプレビューをサポートします。 VidStsソースとVidAuthソースのみをプレビューできます。 ApsaraVideo VODでVidAuthソースのみをプレビューすることを推奨します。 プレビュー機能を設定および使用する方法の詳細については、「プレビュー機能の設定」をご参照ください。
プレビュー機能を有効にした後、VidPlayerConfigGen
クラスでsetPreviewTime
を呼び出して、プレビュー期間を指定できます。 次のサンプルコードでは、VidStsベースの例を示します。
AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
....
VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
[vp setPreviewTime:20];// Set the preview duration to 20s.
source.playConfig = [vp generatePlayerConfig];// Configure the settings for the player.
...
プレビュー期間を指定すると、ApsaraVideo Player SDK for iOSでは、ビデオ全体ではなく、指定された期間のビデオをプレビューできます。
VidPlayerConfigGenを使用して、サーバーでサポートされているリクエストパラメーターを設定できます。 詳細は、「リクエストパラメーター」をご参照ください。
リファラーの設定
ApsaraVideo Player SDK for iOSには、リクエストリファラーを設定するためのAVPConfig
クラスが用意されています。 ApsaraVideo VODコンソールで設定されたリファラーホワイトリストまたはブラックリストと一緒にリファラーを使用して、アクセス制御を実装できます。 サンプルコード:
// Obtain the configuration information.
AVPConfig *config = [self.player getConfig];
// Set the referer.
config.referer = referer;
....// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
ユーザーエージェントの指定
ApsaraVideo Player SDK for iOSには、User-Agentヘッダーを指定できるAVPConfig
クラスが用意されています。 User-Agentヘッダーを指定すると、リクエストにユーザーエージェント情報が含まれます。 サンプルコード:
// Obtain the configuration information.
AVPConfig *config = [self.player getConfig];
// Specify the User-Agent header.
config.userAgent = userAgent;
....// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
ネットワークのタイムアウト時間とリトライ回数の指定
ApsaraVideo Player SDK for iOSには、ネットワークタイムアウト期間とリトライ回数を指定するためのAVPConfig
クラスが用意されています。 サンプルコード:
// Obtain the configuration information.
AVPConfig *config = [self.player getConfig];
// Set the network timeout period. Unit: milliseconds.
config.networkTimeout = 5000;
// Specify the maximum number of retries that can be performed after a network timeout occurs. The retry interval is equal to the timeout period that is specified for the NetworkTimeout parameter. The NetworkRetryCount parameter specifies the number of retries. A value of 0 indicates no retry. The application determines the number of retries. Default value: 2.
config.networkRetryCount = 2;
....// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
networkRetryCountパラメーターを0以外の値に設定した場合、ネットワークエラーによりプレーヤーがデータの読み込みを開始したときに、プレーヤーは再生を再試行します。 再試行の最大数は、networkRetryCountパラメーターの値に等しくなります。 再試行間隔は、networkTimeoutパラメーターの値に等しくなります。
再試行の最大数に達しても読み込みが続く場合、
onError
メソッドによってコールバックが呼び出されます。 この場合、AVPErrrorModel. codeに対してERROR_LOADING_TIMEOUTが返されます。networkRetryCountパラメーターを0に設定すると、ネットワークタイムアウトが発生すると、onPlayerEventメソッドによってコールバックが呼び出されます。 この場合、eventWithStringに対してEVENT_PLAYER_NETWORK_RETRYが返されます。 この問題を解決するには、ApsaraVideo Player SDK for iOSの
reload
メソッドを呼び出して、ネットワークパケットをリロードしたり、必要に応じて他の操作を実行したりできます。
バッファとレイテンシを制御します。
バッファ制御は、プレーヤーにとって重要です。 適切な設定を使用することで、スタートアップの読み込み時間を短縮し、再生のスムーズさを向上できます。 ApsaraVideo Player SDK for iOSには、バッファーとレイテンシの設定を行うためのAVPConfig
クラスが用意されています。 サンプルコード:
// Query the configuration information.
AVPConfig *config = [self.player getConfig];
// Specify the maximum latency. Note: 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.
config.maxDelayTime = 5000;
// Specify the maximum buffer duration. Unit: milliseconds. This parameter specifies the maximum buffer duration for the player to load data at a time.
config.maxBufferDuration = 50000;
// Specify the peak buffer duration. Unit: milliseconds. This parameter specifies the peak buffer duration. After the peak buffer duration elapses, the player stops loading data if the network conditions are poor.
config.highBufferDuration = 3000;
// Set the startup buffer duration Unit: milliseconds. A smaller value indicates a shorter startup loading duration. In this case, the player may enter the loading status soon after the playback starts.
config.startBufferDuration = 500;
// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
startBufferDurationパラメーターの値がhighBufferDurationパラメーターの値より大きくないことを確認してください。 highBufferDurationパラメーターの値がmaxBufferDurationパラメーターの値より大きくないことを確認してください。
mMaxBufferDurationが5分を超える場合、ピークバッファ期間は5分に設定され、過剰なバッファサイズによるメモリ例外の発生を防ぎます。 mMaxBufferDurationが50,000 ms (50秒) を超える場合、大容量キャッシュを有効にしてメモリ使用量を減らし、再生パフォーマンスを向上させることができます。 詳細については、「ラージキャッシュの設定」をご参照ください。
HTTP ヘッダーの設定
ApsaraVideo Player SDK for iOSには、リクエストにHTTPヘッダーを追加できるAVPConfig
クラスが用意されています。 サンプルコード:
// Obtain the configuration information.
AVPConfig *config = [self.player getConfig];
// Define a header.
NSMutableArray *httpHeaders = [[NSMutableArray alloc] init];
// Configure a host when you use Alibaba Cloud HTTPDNS.
[httpHeaders addObject:@"Host:example.com"];
// Configure the headers.
config.httpHeaders = httpHeaders;
....// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
PiPの設定
iOS 15以降を実行するデバイスでApsaraVideo Player V5.4.9.0以降を使用する場合にのみ、ピクチャインピクチャ (PiP) 機能を使用できます。
V5.5.2.0より前のバージョンのApsaraVideo Player SDK for iOSを使用して、特定のメソッドを呼び出してPiP機能を有効または無効にし、アプリケーションをバックグラウンドに切り替えたときにフローティングウィンドウでビデオを再生するかどうかを指定できます。 ApsaraVideo Player SDK for iOS V5.5.2.0以降は、PiP機能のデリゲート設定をサポートしています。 これにより、PiP機能のカスタム設定を構成できます。
PiP設定を有効にするには、iPhoneでPiP機能を有効にする必要があります。 PiP機能を有効にするには、
を選択します。
PiP機能の有効化
PiP機能が有効になった後、アプリケーションがバックグラウンドに切り替えられると、ビデオはフローティングウィンドウで再生されます。 アプリケーションがフォアグラウンドに切り替えられると、ビデオはアプリケーションウィンドウで再生されます。 setPictureInPictureEnable
を呼び出して、PiP機能を有効にします。 PiP機能を有効にする前に、プレーヤーが準備されていることを確認してください。 AVPEventPrepareDone
は、プレイヤーが準備されていることを示します。 サンプルコード:
- (void)onPlayerEvent:(AliPlayer *)player eventType:(AVPEventType)eventType {
switch (eventType) {
case AVPEventPrepareDone:
{
[self.player setPictureInPictureEnable:YES];
}
break;
default:
break;
}
}
再生を停止
する場合は、setPictureInPictureEnable
を呼び出してPiP機能を無効にし、stop
を呼び出します。
PiPデリゲートの設定
次のサンプルコードでは、PiPモードでビデオを一時停止、再生、早送り、早送り、再生する方法と、フローティングウィンドウとプレーヤービュー間のインタラクションの例を示します。 PiPデリゲートを設定する方法の詳細については、ApsaraVideo Player SDK For iOSのデモのディレクトリにあるAliyunPlayer.frameworkのヘッダーファイルAliPlayerPictureInPictureDelegate.h
を参照してください。 デモのダウンロード方法の詳細については、「SDKの概要とダウンロード」をご参照ください。
イベントコールバックを受け取るようにPiPデリゲートを設定します。
[self.player setPictureinPictureDelegate:self];
PiPデリゲートを設定します。
プレイヤーのステータス変更を管理するグローバル変数を追加します。
// Listen for the PiP pause event. @property (nonatomic, assign) BOOL isPipPaused; // Listen for newStatus to determine whether the playback status of the player is changed. @property (nonatomic, assign) AVPStatus currentPlayerStatus; // Configure the PiP controller in the callback that indicates the PiP feature is enabled. Set the controller to nil before you end the playback in PiP mode. We recommend that you configure the PiP controller. @property (nonatomic, weak) AVPictureInPictureController *pipController; // Listen for the playback progress event. Set currentPosition to the position that is returned in the callback of the current playback progress. @property(nonatomic, assign) int64_t currentPosition;
説明pipControllerにはweakまたはassign修飾子を使用する必要があります。 assign修飾子を使用する場合は、必ず正しい変数をnullに設定してください。
onPlayerStatusChangedイベントをリッスンするときに、PiPコントローラのステータスを更新します。
- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus { self.currentPlayerStatus = newStatus; if (_pipController) { [self.pipController invalidatePlaybackState]; } }
onPlayerEventイベントをリッスンするときに、PiPコントローラのステータスを更新します。
- (void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType { if (eventType == AVPEventCompletion) { if (_pipController) { self.isPipPaused = YES; // Pause the playback in PiP mode after the playback ends. [self.pipController invalidatePlaybackState]; } } else if (eventType == AVPEventSeekEnd) { // The seeking is complete. if (_pipController) { [self.pipController invalidatePlaybackState]; } } }
リスナーを設定します。
PiPモードでの再生が開始されようとしているときに返されるコールバックをリッスンします。
/** @ brief The callback returned when the playback in PiP mode starts. @param pictureInPictureController indicates the PiP controller. */ - (void)pictureInPictureControllerWillStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController { if (!_pipController) { self.pipController = pictureInPictureController; } self.isPipPaused = !(self.currentPlayerStatus == AVPStatusStarted); [pictureInPictureController invalidatePlaybackState]; }
PiPモードでの再生が停止しようとしているときに返されるコールバックをリッスンします。
/** @ brief The callback returned when the playback in PiP mode is about to stop. @param pictureInPictureController indicates the PiP controller. */ - (void)pictureInPictureControllerWillStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController { self.isPipPaused = NO; [pictureInPictureController invalidatePlaybackState]; }
PiPモードでの再生が停止した後に返されるコールバックをリッスンし、デリゲートを使用してプレーヤーUIを有効にします。
/** @ brief The callback returned after the playback in PiP mode stops. @param pictureInPictureController indicates the PiP controller. @ param Set completionHandler to YES to stop playback in PiP mode and enable the player UI. */ - (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler { if (_pipController) { _pipController = nil; } completionHandler(YES); }
PiPモードで再生できるビデオの期間制限のコールバックを聞きます。
/** @ brief The callback of the duration limits of videos that can be played in PiP mode. @param pictureInPictureController indicates the PiP controller. @ return The duration limits of videos that can be played in PiP mode. */ - (CMTimeRange)pictureInPictureControllerTimeRangeForPlayback:(nonnull AVPictureInPictureController *)pictureInPictureController layerTime:(CMTime)layerTime{ Float64 current64 = CMTimeGetSeconds(layerTime); Float64 start; Float64 end; if (currentPosition <= self.player.duration) { double curPostion = self.currentPosition / 1000.0; double duration = self.player.duration / 1000.0; double interval = duration - curPostion; start = current64 - curPostion; end = current64 + interval; CMTime t1 = CMTimeMakeWithSeconds(start, layerTime.timescale); CMTime t2 = CMTimeMakeWithSeconds(end, layerTime.timescale); return CMTimeRangeFromTimeToTime(t1, t2); } else { return CMTimeRangeMake(kCMTimeNegativeInfinity, kCMTimePositiveInfinity); } }
PiPモードでの再生のステータスが変更されたときに返されるコールバックをリッスンします。
/** @ brief The callback returned when the status of playback in PiP mode is changed. The UI changes when the playback status changes. @param pictureInPictureController indicates the PiP controller. @ return The playback status in PiP mode. */ - (BOOL)pictureInPictureControllerIsPlaybackPaused:(nonnull AVPictureInPictureController *)pictureInPictureController{ return self.isPipPaused; }
説明このコールバックは、ビデオがPiPモードに入る前に呼び出されます。 コールバックでfalseが返された場合にのみ、ビデオはPiPモードになります。
PiPモードでの再生中に早送りまたは早戻し操作が実行されたときに返されるコールバックをリッスンし、再生の進行状況をプレーヤーに同期させます。
/** @ brief The callback returned when a fast forward or fast backward operation is performed during playback in PiP mode. @param pictureInPictureController indicates the PiP controller. @ param skipInterval indicates the interval by which the video is skipped forward or backward. @ param Call completionHandler to end the fast forward or fast backward operation. */ - (void)pictureInPictureController:(nonnull AVPictureInPictureController *)pictureInPictureController skipByInterval:(CMTime)skipInterval completionHandler:(nonnull void (^)(void))completionHandler { int64_t skipTime = skipInterval.value / skipInterval.timescale; int64_t skipPosition = self.currentPosition + skipTime * 1000; if (skipPosition < 0) { skipPosition = 0; } else if (skipPosition > self.player.duration) { skipPosition = self.player.duration; } [self.player seekToTime:skipPosition seekMode:AVP_SEEKMODE_INACCURATE]; [pictureInPictureController invalidatePlaybackState]; }
PiPモードでの再生が一時停止または開始されたときに返されるコールバックをリッスンします。
/** @ brief The callback that is returned when the playback in PiP mode is paused or started. @param pictureInPictureController indicates the PiP controller. @ param playing indicates whether the video is being played in PiP mode. */ - (void)pictureInPictureController:(nonnull AVPictureInPictureController *)pictureInPictureController setPlaying:(BOOL)playing { if (!playing){ [self.player pause]; self.isPipPaused = YES; } else { // If you want to replay a video after the playback ends, run the following code that starts with if. if (self.currentPlayerStatus == AVPStatusCompletion) { [self.player seekToTime:0 seekMode:AVP_SEEKMODE_ACCURATE]; } [self.player start]; self.isPipPaused = NO; } [pictureInPictureController invalidatePlaybackState]; }
代替RTS URLの設定
再生劣化は、リアルタイムストリーミング (RTS) によってサポートされる。 HLSまたはFLV形式の再生URLなど、代替のRTS URLを指定できます。 RTS経由のストリームプルが失敗すると、このURLで指定されたビデオが自動的に再生されます。
// Specify downgradeUrl.
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downgradeUrl];
// Optional. Configure playback degradation.
AVPConfig *config = [self.player getConfig];
// Specify an alternative RTS URL.
[self.player enableDowngrade:urlSource config:config];
RTS再生の劣化を有効にする
RTS再生劣化機能を有効にしても、ブラウザがRTSをサポートしていない場合、またはRTSを介したストリームのプルが失敗した場合、システムはデフォルトのHLS URLを使用してストリームを自動的に再生します。 サンプルコード:
// 1 indicates that the RTS playback degradation feature is enabled and 0 indicates that the RTS playback degradation feature is disabled. Hardware decoding is enabled by default.
[AliPlayerGlobalSettings setOption:ALLOW_PRE_RENDER valueInt:1];
左右のオーディオチャンネルを切り替える
outputAudioChannel
は、出力オーディオチャネルを指定します。 入力ファイルに2つのオーディオチャンネルが含まれている場合にのみ、左右のオーディオチャンネルを切り替えることができます。 入力ファイルにオーディオチャネルが1つしか含まれていない場合、outputAudioChannel設定は無効です。
次の出力オーディオチャネル設定は、オーディオレンダリングとPCM (Pulse-Code Modulation) データコールバックに影響します。
// Specify AVPOutputAudioChannel to switch the audio channel. Default value: AVP_AUDIO_CHANNEL_NONE.
// Specify AVP_AUDIO_CHANNEL_NONE to use the audio channel settings of the input file.
// Specify AVP_AUDIO_CHANNEL_LEFT to use the left audio channel for playback.
// Specify AVP_AUDIO_CHANNEL_RIGHT to use the right audio channel for playback.
self.aliplayer.outputAudioChannel = AVP_AUDIO_CHANNEL_NONE;
プレーヤーの背景色を設定する
ApsaraVideo player SDK for iOSを使用すると、プレーヤーの背景色を設定できます。 次の内容は、プレーヤーの背景色を設定する方法とサンプルコードを示しています。
方法
/**
@ brief Set the background color of the video.
@param color the color
*/
/****
@brief Set video background color
@param color the color
*/
-(void) setVideoBackgroundColor:(UIColor *)color;
サンプルコード
// The value must be an 8-bit hexadecimal string, in which every 2 characters indicate a factor in the following sequence: R (red), G (green), B (blue), and A (alpha transparency).
// For example, 0x00ff00ff indicates green.
[aliPlayer setVideoBackgroundColor:0x00ff00ff]
vidAuthベースの再生のドメイン名の指定
再生にvidAuthを使用する場合は、ドメイン名などのパラメーターを指定できます。 パラメーターの詳細については、「GetPlayInfo」をご参照ください。 次のコンテンツでは、vidAuthベースの再生のドメイン名を指定する方法とサンプルコードを示します。
方法
/**
@brief Play videos based on the VID and playAuth. For more information, visit https://www.alibabacloud.com/help/en/vod/user-guide/use-playback-credentials-to-play-videos.
@param source The playback source type is AVPVidAuthSource.
@see AVPVidAuthSource
*/
- (void)setAuthSource:(AVPVidAuthSource*)source;
サンプルコード
VidPlayerConfigGeneratorでaddVidPlayerConfigByStringValueを呼び出すときにplayDomainパラメーターを指定します。
VidPlayerConfigGenerator* gen = [[VidPlayerConfigGenerator alloc]init];
// Specify the playDomain parameter. For more information, visit https://www.alibabacloud.com/help/en/vod/developer-reference/api-vod-2017-03-21-getplayinfo.
//https://www.alibabacloud.com/help/zh/vod/developer-reference/api-vod-2017-03-21-getplayinfo
[gen addVidPlayerConfigByStringValue:@"playDomain" value: @"com.xxx.xxx"];
[source setPlayConfig:[gen generatePlayerConfig]];
[self.player setAuthSource:source]:
バックエンドデコード
バックエンドデコード機能は、ApsaraVideo Player SDK V6.12.0以降でサポートされています。 この機能を有効にすると、システムはビデオをデコードして再生し、バックエンドでコールバックを送信できます。 サンプルコード:
// 1 indicates that backend decoding is enabled and 0 indicates that backend decoding is not enabled. Default value: 0.
[self.player setOption:ALLOW_DECODE_BACKGROUND valueInt:1];
パフォーマンス
事前レンダリングの設定
ApsaraVideo Player SDK for iOSは、再生開始前の最初のフレームのプリレンダリングをサポートしています。 サンプルコード:
[player setOption:ALLOW_PRE_RENDER valueInt:1];
ローカルキャッシュの設定
ApsaraVideo Player SDK for iOSを使用すると、再生中にビデオをキャッシュできます。 これにより、起動時間が短縮され、シークプロセスが高速化され、再生待ち時間が短縮され、ループ再生中のトラフィックが節約されます。
ローカルキャッシュの有効化
デフォルトでは、ビデオプリロード機能は無効になっています。 この機能を使用するには、有効にする必要があります。 AliPlayerGlobalSettings
クラスでenableLocalCache
を呼び出して、ローカルキャッシュを有効にします。 サンプルコード:
/**
* Enable local caching. After this feature is enabled, a media file is cached on your device.
* @param enable: specifies whether to enable the video preload feature. Valid values: true and false. true indicates that the local caching feature is enabled and false indicates that the local caching feature is disabled. Default value: false.
* @param maxBufferMemoryKB: This parameter is deprecated in V5.4.7.1 and later.
* @param localCacheDir: Required. The directory of the cached file, which is an absolute path.
*/
[AliPlayerGlobalSettings enableLocalCache:true maxBufferMemoryKB:1024 localCacheDir:@""];
/**
@brief Configure settings for clearing cached files.
@ param expireMin: This parameter is deprecated in V5.4.7.1 and later.
@param maxCapacityMB: the maximum cache size. Unit: MB. By default, the maximum size of cached data is 20 GB. If the specified maximum size is exceeded, the system deletes cached files based on the point in time when the file is cached until the size of the cached data is less than or equal to the specified maximum size. During this process, the system preferentially deletes the earliest files that are cached.
@param freeStorageMB: the minimum idle space of the disk. Unit: MB. Default value: 0. If the idle space of the disk is less than the specified minimum space, the system deletes cached files based on the point in time when the file is cached until the idle space of the disk is greater than or equal to the specified minimum space. During this process, the system preferentially deletes the earliest files that are cached.
*/
[AliPlayerGlobalSettings setCacheFileClearConfig:0 maxCapacityMB:0 freeStorageMB:0];
/**
* Obtain the callback for the URL hash value of the video file and use it as the unique ID of the URL.
*/
// You must run the function and set the function pointer to setCacheUrlHashCallback.
static NSString *CaheUrlHashHandle(NSString *url) {
return @"xxx";
}
[AliPlayerGlobalSettings setCacheUrlHashCallback:&CaheUrlHashHandle];
ビデオファイルの再生URLに認証パラメータが含まれている場合、認証パラメータの値は、ビデオファイルのローカルキャッシュおよび再生中に変更されます。 認証パラメーターを削除した後、
setCacheUrlHashCallback
操作を呼び出してMD5ハッシュ値を計算できます。 たとえば、http:// ****.mp4?aaa
は、認証パラメーターを含むビデオファイルの再生URLです。 この場合、URLhttp:// ****.mp4
は、ビデオファイルがロードされるときにMD5ハッシュ値を計算するために使用されます。 ただし、暗号化されたM3U8ビデオのキーURLの認証パラメーターを削除した後にMD5ハッシュ値を計算すると、同じキーURLが異なるビデオにヒットするため、再生は失敗します。 解決策:setCacheUrlHashCallback
コールバックのキーURLhttp(s):// yyyy?bbbb
ではなく、再生URLhttp(s):// xxxxx.m3u8?aaaa
からのみ認証パラメーターを削除します。サーバーがHTTPとHTTPSをサポートしており、同じ要素で異なるプロトコルの2つのURLを使用してビデオファイルを指定できる場合は、URLのプロトコルヘッダーを削除するか、HTTPプロトコルのURLを使用してMD5ハッシュ値を計算できます。 例:
ビデオファイルの再生URLが
https:// ****.mp4
およびhttp:// ****.mp4
の場合、MD5ハッシュ値は、ビデオファイルのロード時に****.mp4
を使用して計算されます。ビデオファイルの再生URLが
https:// ****.mp4
の場合、MD5ハッシュ値は、ビデオファイルのロード時にURLhttp:// ****.mp4
を使用して計算されます。
ApsaraVideo Player SDK V5.5.4.0以降の場合、再生URLに認証パラメーターが含まれているHLSストリームを再生する場合は、
AVPConfig.enableStrictAuthMode
を設定して認証モードを指定します。 デフォルトでは、AVPConfig.enableStrictAuthModeはfalseに設定されています。 AVPConfig.enableStrictAuthModeの有効値:false: 認証情報をキャッシュします。 ビデオが完全にキャッシュされていない場合、プレーヤーは、キャッシュされていないビデオコンテンツを再生するときに、キャッシュされた認証情報を使用してURL署名リクエストを送信します。 署名付きURLの有効期間が短い場合、再生エラーが発生します。
true: 認証を実行し、ビデオコンテンツをキャッシュしません。 再生ごとにURL署名が必要です。 ネットワーク接続が再生の失敗につながることはありません。
単一URLのローカルキャッシュの有効化または無効化
player config
では、単一のURLのローカルキャッシングを無効にできます。サンプルコード:
// Obtain the configuration information.
AVPConfig *config = [self.player getConfig];
// Configure whether to enable local caching for the playback URL. Default value: true. When local caching is enabled in AliPlayerGlobalSettings and the value of this parameter is true, the local caching for the URL takes effect. If the value of this parameter is false, the local caching for the URL is disabled.
config.enableLocalCache = false;
....// Configure other settings.
// Configure the settings for the player.
[self.player setConfig:config];
デフォルトのキャッシュパスを使用
次のサンプルコードでは、デフォルトのキャッシュパスを使用するようにAliPlayerGlobalSettings
を設定する方法について説明します。
[AliPlayerGlobalSettings enableLocalCache:true];
大容量キャッシュの設定
再生中にビデオデータをメモリにキャッシュする最大バッファ時間を設定できます。これにより、再生パフォーマンスとエクスペリエンスが向上します。 最大バッファ持続時間が大きすぎると、バッファは過剰なメモリを消費する。 大容量キャッシュ機能を使用してファイル内のビデオをキャッシュできます。これにより、メモリ使用量が削減され、プレーヤーのパフォーマンスがさらに向上します。
mMaxBufferDurationが50,000ミリ秒を超える場合、ローカルキャッシュを有効にして、大きなキャッシュを自動的にトリガーできます。 以下の手順を実行します。
グローバルローカルキャッシュ機能を有効にします。
デフォルトでは、ビデオプリロード機能は無効になっています。 この機能を使用するには、有効にする必要があります。
AliPlayerGlobalSettings
クラスでenableLocalCache
を呼び出して、ローカルキャッシュを有効にします。 サンプルコードの詳細については、高度な機能のローカルキャッシュの有効化セクションを参照してください。URLのローカルキャッシュを有効にします。
サンプルコードの詳細については、「ローカルキャッシュの設定」の「単一URLのローカルキャッシュの有効化または無効化」をご参照ください。
大容量キャッシュを有効にします。 サンプルコード:
[AliPlayerGlobalSettings enableBufferToLocalCache:true];
ビデオプリロードの設定
ApsaraVideo Player SDK for iOSは、ローカルキャッシング機能のアップグレードであるビデオプリロードをサポートしています。 ビデオプリロード機能を使用すると、キャッシュされたビデオが占有できるメモリの最大サイズを指定できます。 これにより、起動時間を短縮できます。
ビデオのプリロード機能には、次の制限があります。
一度にプリロードできるMP4、MP3、FLV、またはHLSファイルは1つだけです。
URLに基づいて再生されるファイルを1つだけプリロードできます。 VidAuthまたはVidStsソースをプリロードすることはできません。
デフォルトでは、ApsaraVideo Player SDK for iOSを使用してビデオをプリロードすると、ネットワークリソースのスケジューリングが有効になります。 これにより、再生中のビデオの品質が保証されます。 ネットワークリソースのスケジューリングが有効になっている場合、プリロード要求は、再生されているビデオのバッファリングされたコンテンツが特定の制限に達した後にのみ送信されます。 リアルタイムのプリロードリクエストを管理する場合は、ネットワークリソースのスケジューリングを無効にできます。 サンプルコード:
[AliPlayerGlobalSettings enableNetworkBalance:false];
ローカルキャッシュ機能を有効にします。 詳細については、このトピックの「ローカルキャッシュの構成」をご参照ください。
AliMediaLoaderインスタンスを取得します。
AliMediaLoaderインスタンスはシングルトンオブジェクトです。 インスタンスの取得回数に関係なく、作成できるAliMediaLoaderインスタンスは1つだけです。
[AliMediaLoader shareInstance];
AliMediaLoaderインスタンスを設定します。
説明prepare
inplayer
とmediaLoader.load
を同時に呼び出すと、Application Not Responding (ANR) エラーが発生することがあります。 これは、システムが両方の操作ですべてのローカルファイルをトラバースする必要があるためです。player
でonPrepared
コールバックが起動された後、読み込みを開始することを推奨します。// Configure listeners and start to load video files. // url: the URL of the video file. duration: the loading duration. Unit: milliseconds. [[AliMediaLoader shareInstance] load:obj.url duration:1000]; // Configure a callback delegate. [[AliMediaLoader shareInstance] setAliMediaLoaderStatusDelegate:self]; @protocol AliMediaLoaderStatusDelegate <NSObject> @optional /** @brief The callback that is invoked when an error occurs. @ param url The URL. @param code The error code. @ param msg The error description. */ - (void)onError:(NSString *)url code:(int64_t)code msg:(NSString *)msg; /** @ brief The callback that is invoked when the loading is complete. @ param url The URL. */ - (void)onCompleted:(NSString *)url; /** @ brief The callback that is invoked when the loading is canceled. @ param url The URL. */ - (void)onCanceled:(NSString *)url; @end
オプション: ロードしたビデオファイルを削除します。
ロードしたビデオファイルを削除して、占有スペースを減らすことができます。 ApsaraVideo Player SDK for iOSは、ロードしたビデオファイルを削除する方法を提供していません。 アプリケーションの対応するディレクトリにあるビデオファイルを削除する必要があります。
動的プリロード
動的プリロード機能を使用すると、再生中のビデオとプリロードされたビデオのキャッシュを管理できます。 プリロードできるビデオの数を制御することもできます。 これは、再生経験とコストのバランスを維持するのに役立ちます。
マルチビットレートHLSビデオのプリロード
マルチビットレートのHLSビデオの再生中にlistPlayer
メソッドを呼び出すと、現在のビデオストリームと同じ定義でビデオをプリロードできます。 ビジネス要件に基づいて、さまざまなプリロードモードを使用できます。
ダウンロード速度の照会
ApsaraVideo Player SDK for iOSでは、指定したビデオのダウンロード速度を照会できます。 onCurrentDownloadSpeedメソッドによって呼び出されるコールバックは、ダウンロード速度を返します。 サンプルコード:
- (void)onCurrentDownloadSpeed:(AliPlayer *)player speed:(int64_t)speed{
intspeed_=speed;
}
ネットワークの設定
HTTPDNS
HTTPDNS機能は、DNS解決テクノロジを使用して、特定のHTTPDNSサーバーにドメイン名解決要求を送信し、迅速かつ安定した方法で解決結果を取得します。 これにより、DNSハイジャックが防止されます。
ApsaraVideo Player SDKは、Alibaba Cloud CDNによって高速化されるドメイン名のHTTPDNSサービスを提供します。 強化されたHTTPDNS機能を使用して、正確なスケジューリングを実装し、リアルタイムドメイン解決の結果がすぐに有効になるようにすることができます。 これにより、ネットワークのパフォーマンスが向上します。
拡張されたHTTPDNS機能は、ApsaraVideo Player SDK V6.7.0以降でサポートされています。 ApsaraVideo Player SDK V6.7.0 ~ V6.11.0で拡張HTTPDNS機能を使用するには、チケットを起票するか、Alibaba Cloudアカウントマネージャーに連絡します。 ApsaraVideo Player SDK V6.12.0以降を使用する場合、拡張HTTPDNS機能はデフォルトで有効になっており、アプリケーションは必要ありません。
強化されたHTTPDNS機能を使用するためのサンプルコード
強化されたHTTPDNS機能は、高速化ドメイン名にのみ使用できます。 この機能を使用する前に、高速化ドメイン名が追加および構成されていることを確認してください。 CDNのドメイン名をApsaraVideo VODに追加および設定する方法の詳細については、「CDNのドメイン名の追加」をご参照ください。 高速化ドメイン名の詳細については、「Alibaba Cloud CDNとは」をご参照ください。
// Enable the enhanced HTTPDNS feature.
[AliPlayerGlobalSettings enableEnhancedHttpDns:YES];
// Optional. Add an HTTPDNS pre-resolved domain name.
[[AliDomainProcessor shareInstance] addPreResolveDomain:@"player.***alicdn.com"];
HTTP/2
デフォルトでは、ApsaraVideo Player SDK for iOS V5.5.0.0以降でHTTP/2が有効になっています。
ApsaraVideo Player SDK for iOSはHTTP/2をサポートしています。 HTTP/2を有効にして、リクエストの多重化を実装できます。 これにより、HOL (head-of-line) ブロッキングが防止され、再生性能が向上します。 サンプルコード:
[AliPlayerGlobalSettings setUseHttp2:true];
HTTPで再生リクエストを開始する前にTCP接続を作成
再生要求がHTTP経由で開始される前に、伝送制御プロトコル (TCP) 接続を作成できます。 これにより、待ち時間が短縮され、ビデオ再生の適時性と一貫性が保証され、ユーザーエクスペリエンスが向上し、ネットワークとシステムリソースの使用が最適化されます。 サンプルコード:
// Specify the domain parameter in the host[:port] format. Separate multiple domain names with semicolons (;). The port parameter is optional.
// Specify global settings.
// Add or delete TCP connections. If you specify an empty string, no TCP connections are created.
[AliPlayerGlobalSettings setOption:SET_PRE_CONNECT_DOMAIN value: @"domain1;domain2"];
ビデオダウンロードの設定
ApsaraVideo Player SDK for iOSを使用すると、オフラインで再生するためにビデオをローカルデバイスにダウンロードできます。 通常のダウンロードモードと安全なダウンロードモードがサポートされています。
通常のダウンロード: 通常のダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されず、サードパーティのプレーヤーで再生できます。
安全なダウンロード: 安全なダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されます。 サードパーティのプレーヤーを使用してダウンロードしたビデオを再生することはできません。 ApsaraVideo Playerのみを使用して再生できます。
使用上の注意
VidStsまたはVidAuthに基づいて再生されるビデオのみをダウンロードできます。
ビデオダウンロード機能を使用するには、ApsaraVideo VODコンソールでこの機能を有効にし、ダウンロードモードを設定する必要があります。 詳細については、「ダウンロード設定の構成」をご参照ください。
再開可能なダウンロードがサポートされています。
手順
(オプション) 暗号化検証用のセキュリティファイルを設定します。 安全なダウンロードモードを使用する場合にのみ、セキュリティファイルを設定する必要があります。
説明暗号化検証用セキュリティファイルの情報がアプリケーション情報と一致していることを確認してください。 それ以外の場合、ビデオのダウンロードは失敗します。
セキュアダウンロードモードを使用する場合、ApsaraVideo VODコンソールで生成されるキーファイルをApsaraVideo Player SDKで設定する必要があります。 キーファイルは、ダウンロードと再生のためにビデオを解読して検証するために使用されます。 キーファイルの生成方法の詳細については、「安全なダウンロード」をご参照ください。
キーファイルを1回だけ設定することを推奨します。 サンプルコード:
NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"]; [AliPrivateService initKey:encrptyFilePath];
ビデオダウンローダーを作成して設定します。
サンプルコード:
AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init]; [downloader setSaveDirectory:self.downLoadPath]; [downloader setDelegate:self];
リスナーを設定します。
ダウンロードオブジェクトは複数のリスナーを提供します。 サンプルコード:
-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { // The listener for the preparation of the content to be downloaded. } -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel { // The listener for a download error. } -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // The listener for the download progress in percentage. } -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // The listener for the processing progress in percentage. } -(void)onCompletion:(AliMediaDownloader *)downloader { // The listener for a successful download. }
ダウンロードソースを準備します。
prepare
メソッドを呼び出して、ダウンロードソースを準備できます。 AVPVidStsSourceとAVPVidAuthSourceがサポートされています。 サンプルコード:VidSts
// Create the VidSts download source. AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init]; stsSource.region = @"Access region"; // The region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. stsSource.vid = @"Video ID"; // The ID of the video. stsSource.securityToken = @"<Your security token>"; // The STS token. To generate an STS token, call the AssumeRole operation in STS. stsSource.accessKeySecret = @"<Your AccessKey secret>"; // The AccessKey secret that is generated when the temporary STS token is issued. To generate the AccessKey secret, call the AssumeRole operation in STS. stsSource.accessKeyId = @"<Your AccessKey ID>"; // The AccessKey ID that is generated when the temporary STS token is issued. To generate the AccessKey ID, call the AssumeRole operation in STS. // Prepare the download source. [downloader prepareWithVid:stsSource];
VidAuth
// Add the VidAuth download source. AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"Video ID";// The ID of the video. authSource.playAuth = @"<Your playback credential>"; // The playback credential. To obtain the playback credential, call the GetVideoPlayAuth operation in ApsaraVideo VOD. authSource.region = @"Access region"; // This parameter is deprecated in ApsaraVideo Player SDK V5.5.5.0 or later. If you use ApsaraVideo Player SDK V5.5.5.0 or later, the player automatically parses the region information. If you use ApsaraVideo Player SDK V5.5.5.0 or earlier, this parameter is required. Specify the ID of the region in which ApsaraVideo VOD is activated for this parameter. Default value: cn-shanghai. // Prepare the download source. [downloader prepareWithVid:authSource];
準備したダウンロードソースからダウンロードするコンテンツを選択します。
ダウンロードソースが準備された後、
onPrepared
メソッドによってコールバックが呼び出されます。 TrackInfoパラメーターの値は、ビデオ定義などのビデオトラックに関する情報を示します。 ダウンロードするトラックを選択します。 サンプルコード:-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; // In this example, download the content of the first track. [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; }
ダウンロードソースを更新し、ダウンロードを開始します。
VidStsまたはVidAuthは、ダウンロード前に期限切れになる場合があります。 したがって、ダウンロードを開始する前にダウンロードソースを更新することをお勧めします。 サンプルコード:
// Update the download source. [downloader updateWithVid:vidSource] // Start the download. [downloader start];
ダウンロードが成功または失敗した後、ダウンローダーをリリースします。
ダウンロードが成功したら、
destroy
メソッドを呼び出してダウンローダーをリリースします。[self.downloader destroy]; self.downloader = nil;
暗号化されたビデオを再生する
ApsaraVideo Player SDK for Androidでは、HLS暗号化、Alibaba Cloud独自の暗号化、またはデジタル著作権管理 (DRM) 暗号化に基づいて暗号化されたオンデマンドビデオを再生できます。 SDKを使用すると、DRM暗号化のみに基づいて暗号化されたライブストリームを再生できます。 暗号化ビデオの再生方法の詳細については、「暗号化ビデオの再生」をご参照ください。
ネイティブRTS SDKの設定
iOS用ApsaraVideo Player SDKをネイティブRTS SDKと統合して、リアルタイムストリーミング (RTS) 機能を使用できます。 詳細については、「ネイティブRTS SDK For iOS」をご参照ください。