すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:基本機能

最終更新日:Feb 11, 2026

このトピックでは、ApsaraVideo Player SDK for iOS を使用したプレーヤーインスタンスの作成方法および、ボリューム設定、ビデオ・シーク再生、再生ステータスの監視、ループ再生の有効化、再生速度の設定、音声トラックの切り替えなど、基本的な再生機能の使い方について説明します。

重要

デモの実行およびテストを行うには、ダウンロードしてから、「デモの実行」の手順に従ってコンパイルおよび実行してください。

再生ソースの設定

  • ApsaraVideo Player SDK for iOS は、オンデマンド再生のための以下の 4 つの方式をサポートしています:VidAuth(ApsaraVideo VOD ユーザー向けに推奨)、VidSts、UrlSource、および暗号化再生です。

  • ApsaraVideo Player SDK for iOS は、ライブストリーミングのための以下の 2 つの方式をサポートしています:UrlSource および暗号化再生です。

オンデマンド動画の再生

VidAuth を使用した再生(推奨)

VidAuth を使用してオンデマンド動画を再生するには、vid プロパティに動画または音声の ID を設定し、playAuth プロパティに再生認証情報を設定します。

  • 動画または音声ファイルをアップロードした後、ApsaraVideo VOD コンソールにログインし、[メディアファイル] > [音声/動画] の順に選択して ID を確認します。あるいは、ApsaraVideo VOD SDK が提供する SearchMedia 操作を呼び出して ID を取得します。

  • GetVideoPlayAuth 操作を呼び出して再生認証情報を取得します。再生認証情報の取得には、ApsaraVideo VOD サーバーサイド SDK を統合することを推奨します。これにより、複雑な署名計算を回避できます。GetVideoPlayAuth 操作の詳細については、「OpenAPI Explorer」をご参照ください。

ApsaraVideo VOD ユーザーには、この方式の利用を推奨します。STS を使用した再生と比較して、VidAuth を使用した再生は使いやすく、セキュリティも高いです。両方式の比較については、「認証情報と STS の比較」をご参照ください。

ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターパススルーを有効にした場合、デフォルトのパラメーター名は MtsHIsUriToken です。詳細については、「HLS 暗号化のパラメーターパススルー」をご参照ください。次のコードを使用して、MtsHIsUriToken の値を VOD ソースに追加します。

AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
authSource.vid = @"Vid"; // 必須。動画 ID。
authSource.playAuth = @"<yourPlayAuth>"; // 必須。再生認証情報。再生認証情報を取得するには、ApsaraVideo VOD の GetVideoPlayAuth 操作を呼び出します。
authSource.region = @"Access region"; // このパラメーターは、ApsaraVideo Player SDK V5.5.5.0 以降では非推奨です。ApsaraVideo Player SDK V5.5.5.0 以降を使用する場合、プレーヤーが自動的にリージョン情報を解析します。ApsaraVideo Player SDK V5.5.5.0 より前のバージョンを使用する場合は、このパラメーターを指定する必要があります。このパラメーターには、ApsaraVideo VOD を有効化したリージョンの ID を指定します。デフォルト値: cn-shanghai。
// authSource.authTimeout = 3600; // 再生 URL の有効期間。単位: 秒。デフォルト値: 3600。ApsaraVideo VOD コンソールで署名付き URL の有効期間を設定している場合、このパラメーターの設定が優先されます。このパラメーターを空のままにした場合、デフォルト値の 3600 が使用されます。有効期間は、動画の実際の再生時間より長くする必要があります。そうでない場合、再生が完了する前に再生 URL の有効期限が切れます。

// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターのパススルーを有効化し、デフォルトのパラメーター名が MtsHlsUriToken の場合、config パラメーターを設定して VID に渡す必要があります。詳細については、以下のコードをご参照ください。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターのパススルーを有効化していない場合は、以下のコードを統合する必要はありません。
VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
[vp setHlsUriToken:yourMtsHlsUriToken];
authSource.playConfig = [vp generatePlayerConfig];

[self.player setAuthSource:authSource];

VOD VidSts 再生

VidSts を使用した再生では、再生認証情報の代わりに一時的な STS トークンを使用します。オンデマンド動画を再生する前に、STS トークンおよび AccessKey ペア(AccessKey ID および AccessKey Secret)を取得する必要があります。STS トークンの取得方法については、「STS トークンの取得」をご参照ください。

ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター パススルーを有効にした場合、デフォルトのパラメーター名は MtsHIsUriToken です。詳細については、「HLS 暗号化のパラメーター パススルー」をご参照ください。次のコードを使用して、MtsHIsUriToken の値を VOD ソースに追加します。

AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
source.vid = @"Vid"; // 必須。動画 ID。
source.region = @"Access region"; // 必須。ApsaraVideo VOD が有効化されているリージョン。デフォルト値:cn-shanghai。
source.securityToken = @"<yourSecurityToken>"; // 必須。STS トークン。STS で AssumeRole 操作を呼び出して、STS トークンを生成します。
source.accessKeySecret = @"<yourAccessKeySecret>"; // 必須。一時的な STS トークン発行時に生成される AccessKey Secret。AccessKey Secret を生成するには、STS で AssumeRole 操作を呼び出します。
source.accessKeyId = @"<yourAccessKeyId>"; // 必須。一時的な STS トークン発行時に生成される AccessKey ID。AccessKey ID を生成するには、STS で AssumeRole 操作を呼び出します。
// source.authTimeout = 3600; // 再生 URL の有効期間(単位:秒)。デフォルト値:3600。ApsaraVideo VOD コンソールで署名付き URL の有効期間を設定済みの場合、このパラメーターの設定が優先されます。このパラメーターを空欄にした場合、デフォルト値の 3600 が使用されます。有効期間は、動画の実際の再生時間より長く設定する必要があります。そうでない場合、再生が完了する前に再生 URL が有効期限切れになります。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターのパススルーを有効化しており、デフォルトのパラメーター名が MtsHlsUriToken の場合、config パラメーターを設定して VID に渡す必要があります。詳細については、以下のコードをご参照ください。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーターのパススルーを有効化していない場合は、以下のコードを統合する必要はありません。
VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
[vp setHlsUriToken:yourMtsHlsUriToken];
source.playConfig = [vp generatePlayerConfig];
// 再生ソースを設定します。
[self.player setStsSource:source]

UrlSource を使用した再生

UrlSource を使用してオンデマンド動画を再生するには、プレーヤーの source プロパティに再生 URL を設定します。

  • ApsaraVideo VOD の再生 URL: [GetPlayInfo] 操作を呼び出して再生 URL を取得します。再生 URL の取得には、ApsaraVideo VOD サーバーサイド SDK を統合することを推奨します。これにより、複雑な署名計算を回避できます。GetPlayInfo 操作の詳細については、「OpenAPI Explorer」をご参照ください。

  • ローカル動画パス:アプリケーションがアクセス権限を持っていることを確認してください。システム API を使用して、ローカル動画ファイルの完全なパスを取得します。例:/sdcard/xxx/xxx/xxx.mp4 または content://xxx/xxx/xx.mp4

AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必須。再生 URL。ApsaraVideo VOD またはサードパーティサービスによって生成された URL を使用できます。また、ローカル動画のパスも使用可能です。
[self.player setUrlSource:urlSource]; 

暗号化オンデマンド再生

ApsaraVideo VOD は、HTTP Live Streaming (HLS) 暗号化、Alibaba Cloud 専用の暗号化、およびデジタル著作権管理 (DRM) 暗号化の 3 種類の暗号化方式をサポートしています。詳細については、「暗号化動画の再生」をご参照ください。

ライブストリーミング

詳細については、「標準ライブストリーミング再生」をご参照ください。

説明
  • UrlSource 方式は URL をベースとした再生に使用され、VidSts および VidAuth 方式は動画 ID をベースとした再生に使用されます。

  • ApsaraVideo VOD をサポートするリージョンについては、「ApsaraVideo VOD のリージョン ID」をご参照ください。

再生の制御

ApsaraVideo Player SDK for iOS を使用すると、メディア再生を管理できます。たとえば、再生の開始または一時停止、特定の時刻からの再生開始などが可能です。

プレーヤーの準備

再生を開始する前に、prepare メソッドを呼び出してプレーヤーを準備します。サンプルコード:

[self.player prepare];

再生の開始

start メソッドを呼び出して再生を開始します。サンプルコード:

[self.player start];

特定の時刻からの再生開始

seekToTime メソッドを呼び出して、特定の時刻から再生を開始します。この機能は、ユーザーがプログレスバーのスライダーをドラッグした場合や、特定の時刻から再生を再開する場合に使用されます。サンプルコード:

// position は再生を開始する時刻(単位:ミリ秒)を示します。seekMode を使用して、正確なシークモードまたは不正確なシークモードを指定します。
// 正確なシークモードを使用します。
[self.player seekToTime:position seekMode:AVP_SEEKMODE_ACCURATE];
// 不正確なシークモードを使用します。
[self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];

setStartTime メソッドを呼び出して、動画の開始時刻を設定します。この設定は、各 prepare 呼び出しに対して 1 回のみ有効です。特定の時刻から動画の再生を開始する場合にこの機能を使用します。サンプルコード:

// 次の prepare 呼び出しで使用される開始時刻(単位:ミリ秒)を設定します。この設定は、次の prepare 呼び出しに対してのみ有効です。
// prepare が呼び出されると、この値は自動的にクリアされます。次の prepare 呼び出しの前に再度このメソッドを呼び出さない場合、動画は最初から再生されます。
// seekMode には、正確モードまたは不正確モードを指定できます。
[self.player setStartTime:time seekMode:seekMode];

再生の一時停止

pause メソッドを呼び出して再生を一時停止します。サンプルコード:

[self.player pause];

再生の再開

start メソッドを呼び出して再生を再開します。サンプルコード:

[self.player start];

再生の停止

stop メソッドを呼び出して再生を停止します。サンプルコード:

[self.player stop];

プレーヤーの破棄

プレーヤーを同期的または非同期的に破棄できます。サンプルコード:

// 同期的にプレーヤーを破棄します。システムが自動的に stop 操作を呼び出します。
[self.player destroy];
// 非同期的にプレーヤーを破棄します。システムが自動的に stop 操作を呼び出します。
[self.player destroyAsync];
説明

同期的な破棄操作は、プレーヤーのリソースが解放された後に結果を返します。UI の応答速度に厳しい要件がある場合は、非同期的な破棄メソッドの呼び出しを推奨します。使用上の注意点:

  1. 非同期破棄中は、プレーヤーオブジェクトに対して他の操作を行わないでください。

  2. 非同期破棄メソッドには非同期の stop 処理が含まれています。そのため、非同期破棄メソッドを呼び出す前に手動でプレーヤーを停止する必要はありません。

プレーヤーのステータス監視

ApsaraVideo Player SDK for iOS を使用すると、リスナーを構成してプレーヤーのステータスを監視できます。

リスナーの構成

プレーヤーに対して複数のリスナーを構成できます。

  • onPlayerEvent および onError コールバックの構成を推奨します。

@interface SimplePlayerViewController ()<AVPDelegate>
@end
- (void)viewDidLoad {
    self.player = [[AliPlayer alloc] init];
    self.player.playerView = self.avpPlayerView.playerView;
    self.player.delegate = self;
    //...
}
/**
 @brief 無効なデリゲートに対するコールバック。
 @param player プレーヤーのポインター。
 @param errorModel プレーヤーエラーの説明。AliVcPlayerErrorModel の定義をご参照ください。
 */
- (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
    // エラーが発生し、再生が停止したことを示します。
}
/**
 @brief プレーヤーイベントに対するコールバック。
 @param player プレーヤーのポインター。
 @param eventType プレーヤーのイベントタイプ。AVPEventType の定義をご参照ください。
 */
-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType{
    switch(eventType){
        case AVPEventPrepareDone:{
            // プレーヤーの準備が完了しました。
        }
            break;
        case AVPEventAutoPlayStart:
            // 自動再生が開始されました。
            break;
        case AVPEventFirstRenderedStart:
            // 最初のフレームが表示されました。
            break;
        case AVPEventCompletion:
            // 再生が完了しました。
            break;
        case AVPEventLoadingStart:
            // バッファリングが開始されました。
            break;
        case AVPEventLoadingEnd:
            // バッファリングが完了しました。
            break;
        case AVPEventSeekEnd:
            // シークが完了しました。
            break;
        case AVPEventLoopingStart:
            // ループ再生が開始されました。
            break;
        default:
            break;
    }
}
/**
 @brief 現在の再生位置に対するコールバック。
 @param player プレーヤーのポインター。
 @param position 現在の再生位置。
 */
- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    // 再生の進行状況を更新します。
}
/**
 @brief バッファー位置に対するコールバック。
 @param player プレーヤーのポインター。
 @param position 現在のバッファー位置。
 */
- (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    // バッファリングの進行状況を更新します。
}
/**
 @brief トラック情報の取得に対するコールバック。
 @param player プレーヤーのポインター。
 @param info トラック情報の配列。AVPTrackInfo の定義をご参照ください。
 */
- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
    // 異なるビットレートに関する情報を取得します。
}
/**
 @brief 字幕の表示に対するコールバック。
 @param player プレーヤーのポインター。
 @param index 字幕のインデックス番号。
 @param subtitle 字幕の文字列。
 */
- (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
    // 表示用の字幕を取得します。
}
/**
 @brief 字幕の非表示に対するコールバック。
 @param player プレーヤーのポインター。
 @param index 字幕のインデックス番号。
 */
- (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
    // 字幕を非表示にします。
}
/**
 @brief スナップショットのキャプチャに対するコールバック。
 @param player プレーヤーのポインター。
 @param image 画像。
 */
- (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
    // スナップショットのプレビューおよび保存を行います。
}
/**
 @brief トラックの切り替え完了に対するコールバック。
 @param player プレーヤーのポインター。
 @param info トラック切り替え後の情報。AVPTrackInfo の定義をご参照ください。
 */
- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
    // ビットレートの切り替え結果を通知します。
}

再生ステータスの監視

プレーヤーのステータスをリッスンできます。onPlayerStatusChanged コールバックのパラメーターは、プレーヤーの現在のステータスを示します。サンプルコード:

- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
    switch (newStatus) {
    case AVPStatusIdle:{
           // プレーヤーはアイドル状態です。
        }
 break;
        case AVPStatusInitialzed:{
           // プレーヤーは初期化されています。
        }
 break;
        case AVPStatusPrepared:{
           // プレーヤーは準備完了です。
        }
 break;
        case AVPStatusStarted:{
           // プレーヤーはメディアストリームの再生中です。
        }
 break;
case AVPStatusPaused:{
           // 再生は一時停止されています。
        }
 break;
case AVPStatusStopped:{
           // 再生は停止されています。
        }
 break;
case AVPStatusCompletion:{
           // 再生が完了しました。
        }
 break;
case AVPStatusError:{
           // 再生エラーが発生しました。
        }
 break;
        default:
            break;
    }
}

表示モードの指定

ApsaraVideo Player SDK for iOS を使用すると、再生時の表示設定を構成できます。たとえば、動画イメージの拡大縮小、回転、ミラー表示などを指定できます。

パディング

scalingMode インターフェイスを介して実装される、縦横比に合わせたフィット、縦横比に合わせたフィル、およびストレッチの 3 つの表示フィルモードをサポートしています。例:

// ビューに収まるように動画を縮小します。動画の縦横比は維持されます。
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
// ビューを埋めるように動画を拡大します。動画の縦横比は維持されます。
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFILL;
// ビューを埋めるように動画をストレッチします。動画の縦横比は維持されません。動画とビューの縦横比が異なる場合、画像の歪みが発生する可能性があります。
self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
説明

スケーリング設定は、ピクチャー・イン・ピクチャー (PiP) モードで再生される動画には適用されません。

回転

rotateMode メソッドを呼び出して、動画の回転を調整します。サンプルコード:

// 時計回りに 0° の回転角度を設定します。
self.player.rotateMode = AVP_ROTATE_0;
// 時計回りに 90° の回転角度を設定します。
self.player.rotateMode = AVP_ROTATE_90;
// 時計回りに 180° の回転角度を設定します。
self.player.rotateMode = AVP_ROTATE_180;
// 時計回りに 270° の回転角度を設定します。
self.player.rotateMode = AVP_ROTATE_270;

ミラー表示

mirrorMode メソッドを呼び出して、ミラー表示モードを指定します。水平方向のミラー表示、垂直方向のミラー表示、およびミラー表示なしの 3 つがサポートされています。サンプルコード:

// 動画イメージに対してミラー表示を行いません。
self.player.mirrorMode = AVP_MIRRORMODE_NONE;
// 動画イメージに対して水平方向のミラー表示を行います。
self.player.mirrorMode = AVP_MIRRORMODE_HORIZONTAL;
// 動画イメージに対して垂直方向のミラー表示を行います。
self.player.mirrorMode = AVP_MIRRORMODE_VERTICAL;

再生情報の取得

ApsaraVideo Player SDK for iOS を使用すると、現在の再生進行状況、動画の再生時間、バッファリングの進行状況などの再生情報を取得できます。

現在の再生進行状況の取得

onCurrentPositionUpdate コールバックで現在の再生位置を照会できます。サンプルコード:

- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
// position パラメーターは現在の再生位置(単位:ミリ秒)を示します。
NSString *position = [NSString stringWithFormat:@"%lld, position"];
}

動画の再生時間の取得

動画の総再生時間を照会できます。動画が読み込まれた後のみ、再生時間を照会できます。たとえば、onPrepared コールバックが呼び出された後に再生時間を照会できます。(単位:ミリ秒)サンプルコード:

-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
  switch (eventType) {
    case AVPEventPrepareDone: {
      if (self.player.duration >= 0) {
       NSString *duration  = self.player.duration;
      }
    }
      break;
    default:
      break;
  }
}

実際の再生時間の取得

再生が一時停止または固まった時間を含まない、リアルタイムでの実際の再生時間を取得できます。サンプルコード:

 NSString *duration = [player getPlayedDuration];

バッファリングの進行状況の取得

onBufferedPositionUpdate コールバックで現在のバッファー位置を照会できます。サンプルコード:

- (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    NSString *bufferPosition = position;
}

レンダリングフレームレート、音声および動画ビットレート、ネットワークダウンリンクビットレートのリアルタイム取得

例:

// 現在の動画レンダリングフレームレートを取得します。戻り値のデータ型は FLOAT です。
[self.player getOption:AVP_OPTION_RENDER_FPS]
// 現在の動画ビットレートを取得します。戻り値のデータ型は FLOAT です。(単位:bit/s)
[self.player getOption:AVP_OPTION_VIDEO_BITRATE]
// 現在の音声ビットレートを取得します。戻り値のデータ型は FLOAT です。(単位:bit/s)
[self.player getOption:AVP_OPTION_AUDIO_BITRATE]
// 現在のネットワークダウンリンクビットレートを取得します。戻り値のデータ型は FLOAT です。(単位:bit/s)
[self.player getOption:AVP_OPTION_DOWNLOAD_BITRATE]

ボリュームの指定

プレーヤーのボリュームを調整したり、再生時のミュートモードを構成したりできます。

ボリュームの調整

動画のボリュームを最大で元の 2 倍まで変更できます。1 より大きい値を設定するとノイズが発生する場合があります。volume メソッドを呼び出してボリュームを変更します。ボリュームを設定した後、ボリューム情報を照会できます。サンプルコード:

// ボリュームを 0 ~ 2 の実数に設定します。
self.player.volume = 1.0f;
// ボリュームを取得します。
self.player.volume

ミュートモードの構成

muted メソッドを呼び出して、再生中の動画をミュートします。サンプルコード:

self.player.muted = YES;

再生速度の設定

ApsaraVideo Player SDK for iOS を使用すると、rate メソッドを呼び出して再生速度を変更できます。0.5 倍~5 倍の再生速度がサポートされています。再生速度を変更しても、音声のピッチは変わりません。サンプルコード:

// 0.5 倍~5 倍の再生速度がサポートされています。一般的な再生速度は、0.5 倍、1 倍、1.5 倍など、0.5 倍単位の倍率です。
self.player.rate = 1.0f;

マルチ解像度設定

説明

詳細なコード例については、「API-Example」プロジェクトの マルチ解像度切り替え(MultiResolution) モジュールをご参照ください。このプロジェクトは、ApsaraVideo Player SDK for iOS の Objective-C サンプルプロジェクトであり、開発者がコア SDK 機能の統合を迅速に学習できるよう設計されています。

UrlSource を使用したライブストリーミングの構成

詳細については、「標準ライブストリーミング再生」をご参照ください。

VidAuth または VidSts を使用した再生の構成

VidAuth または VidSts を使用してオンデマンド動画を再生する場合、追加の設定は不要です。ApsaraVideo Player SDK for iOS が ApsaraVideo VOD から自動的に動画の解像度を取得します。SDK を使用すると、動画の解像度を取得して切り替えることができます。この機能は UrlSource を使用した再生ではサポートされていません。

定義の照会

動画が読み込まれた後、その解像度を照会できます。onTrackReady コールバックの info パラメーター内にネストされた trackBitrate パラメーターからビットレートを取得できます。

- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
    for (int i=0; i<info.count; i++) {
        AVPTrackInfo* track = [info objectAtIndex:i];
        switch (track.trackType) {
            case AVPTRACK_TYPE_VIDEO: {
                int trackBitrate = track.trackBitrate;
            }
                break;
        }
    }
}

解像度の切り替え

selectTrack メソッドを呼び出し、切り替えたい画質に対応するインデックスを指定します。インデックスは TrackInfo パラメーターから取得できます。

[self.player selectTrack:index];

解像度切り替え通知

動画の解像度が切り替えられた後に onTrackChanged コールバックが呼び出されます。

- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
 // 切り替えが完了しました
}

クイック切り替え

クイック切り替えモードを有効化すると、selectTrack へのすべての手動呼び出しでクイックな応答が得られます。

AVPConfig *config = [self.player getConfig];
config.selectTrackBufferMode = 1;
[self.player setConfig:config];

ループ再生の有効化

ApsaraVideo Player SDK for iOS はループ再生をサポートしています。loop メソッドを呼び出してループ再生を有効化します。この機能は、再生が終了した後に動画を最初から再度再生します。サンプルコード:

self.player.loop = YES;

ループ再生が開始されたときに AVPEventLoopingStart コールバックが返されます。サンプルコード:

- (void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
    switch (eventType) {
        case AVPEventLoopingStart:
            break;
    }
}

音声トラックの切り替え

iOS プレーヤー SDK を使用すると、多言語吹き替え付き動画の視聴中に音声トラックを切り替えることができ、お好みの吹き替え言語を選択できます。

使用上の注意点

MP4 ストリーム、シングルビットレート混合 HLS ストリーム、シングルビットレート HLS ストリーム内の音声トラック、マルチビットレート混合 HLS ストリーム内のサブストリームなど、リスト再生に使用されないストリームでは、音声トラックの切り替えが可能です。以下の表に、さまざまな種類の動画ストリームを示します。

動画ストリームの種類

ファイル拡張子

ビットレート数

サブ-M3U8 ファイル数

サブストリームの種類

切り替えに関する注意点

リスト再生に使用されないストリーム(例:MP4 ストリーム)

.mp4

1

-

1 つの動画トラック、複数の音声トラック、および複数の字幕トラックを含むストリーム。

音声トラック間の切り替えが可能です。

シングルビットレート混合 HLS ストリーム

.m3u8

1

1

1 つの動画トラック、複数の音声トラック、および複数の字幕トラックを含むストリーム。

音声トラック間の切り替えが可能です。

シングルビットレート HLS ストリーム

.m3u8

1

n

m3u8:各サブストリームは、動画ストリーム、音声ストリーム、またはキャプションストリームのいずれかである必要があります。

音声トラック間の切り替えが可能です。

マルチビットレート混合 HLS ストリーム

.m3u8

n

n

1 つの動画トラック、複数の音声トラック、および複数の字幕トラックを含む M3U8 ストリーム。サブストリームは異なるビットレートを持ちます。

サブストリーム間の切り替えが可能です。ただし、サブストリーム内の音声トラック間の切り替えはできません。

  1. コールバックを構成します。

      // onSubTrackReady コールバックは通常、prepare コールバックより前に呼び出されます。
    - (void)onSubTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // getSubMediaInfo を呼び出して、対応する MediaInfo を事前に取得します。このメソッドは、onSubTrackReady コールバックを受信した後でのみ呼び出すことができます。それ以外の場合、nil が返されます。
        AVPMediaInfo* subMediaInfo = [player getSubMediaInfo];
        // トラックを走査します。
        for (int i=0; i<subMediaInfo.tracks.count; i++) {
        	AVPTrackInfo* track = [mediaInfo.tracks objectAtIndex:i];
            // 対応するトラックを取得します。
        }
    }
  2. 目的の音声トラックに切り替えます。

    [self.player selectTrack:myTrack.trackIndex accurate:YES]

サムネイルの使用

説明

詳細なコード例については、「API-Example」プロジェクトの サムネイルプレビュー モジュールをご参照ください。このプロジェクトは、ApsaraVideo Player SDK for iOS の Objective-C サンプルプロジェクトであり、開発者がコア SDK 機能の統合を迅速に学習できるよう設計されています。

ApsaraVideo Player SDK でサムネイル機能を使用する前に、動画に対してサムネイルが構成されていることを確認してください。サムネイルを生成するには、ApsaraVideo VOD コンソールに移動してスナップショットテンプレートを作成し、「スナップショットの種類」で「Image Sprite」を選択します。スナップショットテンプレートに基づいて動画を処理するワークフローを作成します。その後、動画に対してスプライトスナップショットが作成されます。詳細については、「動画スナップショット」をご参照ください。以下のサンプルコードは、ApsaraVideo Player SDK でサムネイル機能を使用する方法の例です。

/**
 トラックに対してサムネイルが構成されているかどうかを指定します。サムネイルを構成しない場合、サムネイルは表示されません。
 */
@property (nonatomic,assign)BOOL trackHasThumbnai;

/**
 サムネイルを表示するカスタムビューを作成します。
 */
@property (nonatomic,strong)UIImageView *thumbnaiView;

/**
  onPrepare
 */
- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
  if(newStatus == AVPStatusPrepared){
       [self.player setThumbnailUrl:[URL]];// サムネイル URL を指定します。サムネイル URL は、ApsaraVideo VOD コンソールまたは API 操作の呼び出しによって取得できます。
       self.trackHasThumbnai = YES;
  }
}
/**
 プログレスバー上の再生位置の変更に対するコールバック。
 @param playerView playerView
 @param value: 再生位置。
 */
- (void)AVPPlayerView:(AVPPlayerView *)playerView progressSliderValueChanged:(CGFloat)value {
    if (self.trackHasThumbnai) {
        [self.player getThumbnail:self.player.duration*value];
    }
}

/**
 @brief: サムネイル取得時のコールバック。
 @param positionMs: 指定されたサムネイル位置。
 @param fromPos: サムネイルが使用される再生位置。
 @param toPos: サムネイルが使用されなくなる再生位置。
 @param image: サムネイル画像のポインター。macOS では NSImage、iOS では UIImage を使用します。
 */
- (void)onGetThumbnailSuc:(int64_t)positionMs fromPos:(int64_t)fromPos toPos:(int64_t)toPos image:(id)image {
    self.thumbnaiView.hidden = NO;
    [self.thumbnaiView setImage:(UIImage *)image];
}

/**
 @brief: サムネイル取得失敗時のコールバック。
 @param positionMs: 指定されたサムネイル位置。
 */
- (void)onGetThumbnailFailed:(int64_t)positionMs {
    self.thumbnaiView.hidden = YES;
}

SDK ログの取得

ApsaraVideo Player SDK を使用すると、SDK ログが生成されます。ログには、リクエストのステータス、呼び出し結果、権限申請結果などの詳細な情報が含まれます。SDK ログを表示することで、コードのデバッグおよび問題のトラブルシューティングを行い、開発を支援できます。SDK ログを取得するには、以下のいずれかの方法を使用できます。

方法 1:開発ツールのコンソールを使用

この方法では、ローカルデバイス上でログをキャプチャします。デバイス上でエラーを確実に再現できる場合に適しています。

  1. ログ記録機能を有効化し、ログレベルを設定します。

    // ログ記録機能を有効化します。
    [AliPlayer setEnableLog:YES];
    // ログレベルを設定します。デフォルト値:LOG_LEVEL_INFO。問題のトラブルシューティングを行う場合は、このパラメーターを LOG_LEVEL_TRACE に設定します。
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:nil];
  2. フレームレベルのログを構成します。

    // フレームレベルのログ出力を構成します。
    // value パラメーターの有効値:0 および 1。値が 0 の場合、無効化されます。値が 1 の場合、有効化されます。
    [AliPlayer setLogOption:FRAME_LEVEL_LOGGING_ENABLED value:value];
    説明

    この機能は、トラブルシューティングのシナリオで使用されます。

  3. ログを収集します。

    1. 方法 1:開発ツールのコンソールでログを表示

      エラーを再現し、Xcode などの開発ツールのコンソールでエラーログを取得します。

    2. 方法 2:ログを特定のパスにエクスポート

      1. ログ記録機能を有効化した後、プレーヤーインスタンスを作成する前に、エラーログを格納するサンドボックスパスを指定します。

        NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        // logFilePath はサンプルパスです。サンドボックスディレクトリに .log ファイル(例:xxxx.log)を作成することもできます。
        NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:@"xxxx.log"];
      2. 指定したファイルにログデータをインポートします。

        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout);
        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);
      3. エラーを再現し、指定したパスで .log ファイルを検索します。

方法 2:LogCallback を設定して ApsaraVideo Player SDK のログを受信

この方法では、LogCallback メソッドを使用します。クライアント側でエラーが発生するものの、デバイス上でエラーを確実に再現およびログをキャプチャできない場合に適しています。LogCallback を呼び出して、ApsaraVideo Player SDK のログ出力をリッスンし、エラーログをアプリケーションのログチャンネルに自動的にエクスポートします。

  1. ログ記録機能を有効化し、ログレベルを設定します。

    // ログ記録機能を有効化します。
    [AliPlayer setEnableLog:YES];
    // ログレベルを設定します。デフォルト値:LOG_LEVEL_INFO。問題のトラブルシューティングを行う場合は、このパラメーターを LOG_LEVEL_TRACE に設定します。
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:^(AVPLogLevel logLevel, NSString *strLog) {
     NSLog(@"strLog:%@", strLog);
    }];
  2. ログを収集します。

    問題を再現した後、ログはアプリケーションのログチャンネルを経由して自動的にログファイルに出力されます。