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

ApsaraVideo VOD:基本機能

最終更新日:Oct 25, 2024

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

プレーヤーを作成する

このセクションでは、ApsaraVideo Player SDK for iOSを使用してビデオを再生する方法について説明します。 手動再生と自動再生がサポートされています。

  1. プレイヤーを作成します。

    ApsaraVideoプレーヤーを作成します。

    説明

    ApsaraVideo VODは、イベント追跡ログに基づいて、再生品質モニタリング、シングルポイントトレース、および統計分析機能をサポートしています。 再生品質モニタリング機能を使用して、全体的な再生品質に関する統計を照会し、シングルポイントトレース機能を使用して、特定のユーザーまたはデバイスを特定し、再生動作を分析し、エラーを効率的に特定できます。 詳細については、「再生品質モニタリング」、「シングルポイントトレース」、および「統計分析」をご参照ください。

    機能を使用するようにsetTraceIdパラメーターを設定できます。 次の内容は、設定について説明します。

    • setTraceIdパラメーターを空のままにすると、イベント追跡ログが自動的にアップロードされます。 再生品質のモニタリング機能と統計分析機能のみを使用できます。 デフォルトでは、このパラメータは空のままです。

    • setTraceIdパラメーターにデバイスまたはユーザーの一意の識別子を指定すると、イベント追跡ログが自動的にアップロードされます。 再生品質モニタリング、シングルポイントトレース、および統計分析機能を使用できます。 たとえば、このパラメーターには、IMEI (International Mobile Equipment Identity) やIDFA (Identifier For Advertiser) などのユーザーIDまたはデバイスIDを指定できます。

    • setTraceIdパラメーターにDisableAnalyticsを指定した場合、イベント追跡ログはアップロードされません。 再生品質モニタリング、シングルポイントトレース、または統計分析機能は使用できません。

    // Create a player.
    self.player = [[AliPlayer alloc] init];
    // We recommend that you specify the traceId parameter.
    [play setTraceID:@"xxxxxx"];
    説明

    イベント追跡ログは、中国 (上海) リージョンのノードにアップロードされます。 シンガポールリージョンはまもなく利用可能になります。

  2. リスナーを設定します。

    プレーヤーに複数のリスナーを設定できます。

    • 手動再生を開始するには、prepareコールバックでstartメソッドを呼び出す必要があるため、prepareコールバックを設定する必要があります。

    • onPlayerEventおよびonErrorコールバックを設定することを推奨します。

    @interface SimplePlayerViewController ()<AVPDelegate>
    @end
    - (void)viewDidLoad {
        self.player = [[AliPlayer alloc] init];
        self.player.playerView = self.avpPlayerView.playerView;
        self.player.delegate = self;
        //...
    }
    /**
     @brief The callback for an invalid delegate.
     @param player The pointer of the player.
     @param errorModel The description of player errors. For more information, see the definition of AliVcPlayerErrorModel.
     */
    - (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
        // Indicates that an error occurred and the playback stopped.
    }
    /**
     @brief The callback for player events.
     @param player The pointer of the player.
     @param eventType The event type of the player. For more information, see the definition of AVPEventType.
     */
    -(void)onPlayerEvent:(AliPlayer*)playereventType:(AVPEventType)eventType{
        switch(eventType){
            caseAVPEventPrepareDone:{
                // The player is prepared.
                // If you set autoPlay to NO for the player, we recommend that you call start in the AVPEventPrepareDone callback. 
                [self.playerstart];
            }
                break;
            case AVPEventAutoPlayStart:
                // The autoplay starts.
                break;
            case AVPEventFirstRenderedStart:
                // The appearance of the first frame.
                break;
            case AVPEventCompletion:
                // The completion of playback.
                break;
            case AVPEventLoadingStart:
                // The buffering starts.
                break;
            case AVPEventLoadingEnd:
                // The buffering is complete.
                break;
            case AVPEventSeekEnd:
                // The seeking is complete.
                break;
            case AVPEventLoopingStart:
                // The start of loop playback.
                break;
            default:
                break;
        }
    }
    /**
     @brief The callback for the current playback position.
     @param player The pointer of the player.
     @param position The current playback position.
     */
    - (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // Updates the playback progress.
    }
    /**
     @brief The callback for the buffer position.
     @param player The pointer of the player.
     @ param position The current buffer position.
     */
    - (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // Updates the buffering progress.
    }
    /**
     @brief The callback for obtaining the track information.
     @param player The pointer of the player.
     @param info track The array of track information. For more information, see AVPTrackInfo.
     */
    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // Obtain the information about different bitrates.
    }
    /**
     @brief The callback to display the subtitle.
     @param player The pointer of the player.
     @param index The index number for the subtitle.
     @param subtitle The string of the subtitle.
     */
    - (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
        // Obtain the subtitle for display.
    }
    /**
     @brief The callback to hide the subtitle.
     @param player The pointer of the player.
     @param index The index number for the subtitle.
     */
    - (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
        // Hide the subtitles.
    }
    /**
     @brief The callback for snapshot capture.
     @param player The pointer of the player.
     @param image The image.
     */
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // Preview and save the snapshot.
    }
    /**
     @brief The callback that indicates that the track is switched.
     @param player The pointer of the player.
     @param info The information about the switching after the switching is complete. For more information, see AVPTrackInfo.
     */
    - (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
        // Send a notification about the result of switching the bitrate.
    }
  3. 再生ソースを設定します。

    • ApsaraVideo Player SDK for iOSは、UrlSource、VidAuth、およびVidStsに基づくビデオオンデマンド (VOD) 再生をサポートしています。 暗号化VOD再生もサポートされています。 ApsaraVideo VODでVidAuthに基づいてビデオを再生することを推奨します。

    • ApsaraVideo Player SDK for iOSは、UrlSourceベースの暗号化ライブストリーミングをサポートしています。

    説明
    • UrlSourceはURLベースの再生に使用され、VidStsとVidAuthはVidベースの再生に使用されます。

    • リージョンの詳細については、「ApsaraVideo VODのリージョンID」をご参照ください。

    ビデオをオンデマンドで再生する

    UrlSourceベースの再生

    UrlSourceに基づいてオンデマンドビデオを再生する場合は、プレーヤーのソースをビデオの再生URLに設定します。

    • GetPlayInfo操作を呼び出して、ApsaraVideo VODで再生URLを取得できます。 ApsaraVideo VOD SDKを統合して、ApsaraVideo VODでメディア再生URLを取得することを推奨します。 これにより、複雑な署名計算から解放されます。 GetPlayInfo操作の詳細については、「 OpenAPI Explorer」をご参照ください。

    • ローカルビデオを再生する場合は、ローカルファイルのフルパスを取得するためのAPI操作を呼び出す権限があることを確認してください。 例: /sdcard/xxx/xxx/xxx.mp4またはcontent:// xxx/xxx/xx.mp4

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // Required. The playback URL of the video. The URL can be generated by ApsaraVideo VOD or a third-party service. You can also use the path of a local video. 
    [self.player setUrlSource:urlSource]; 

    (推奨) VidAuthベースの再生

    VidAuthをVOD再生に使用するには、vidパラメーターをオーディオまたはビデオファイルのIDに設定し、playAuthパラメーターを再生資格情報に設定する必要があります。

    • オーディオまたはビデオファイルをアップロードした後、ApsaraVideo VODコンソールにログインし、[メディアファイル] > [オーディオ /ビデオ] を選択して、オーディオまたはビデオファイルのIDを表示します。 または、メソッドを呼び出すこともできます。 IDを取得するためにApsaraVideo VOD SDKによって提供されるSearchMedia操作を呼び出します。

    • GetVideoPlayAuth操作を呼び出して、再生資格情報を取得できます。 ApsaraVideo VOD SDKを統合して、メディア再生用の資格情報を取得することを推奨します。 これにより、複雑な署名計算から解放されます。 GetVideoPlayAuth操作の詳細については、 「OpenAPI Explorer」をご参照ください。

    ApsaraVideo VODユーザーがこの方法を使用することを推奨します。 STSベースの再生と比較して、VidAuthベースの再生は使いやすく、より安全です。 2つの再生方法の比較の詳細については、「資格情報とSTSの比較」をご参照ください。

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid"; // Required. The video ID. 
    authSource.playAuth = @"<yourPlayAuth>"; // Required. The playback credential. To obtain a 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. 
    // authSource.authTimeout=3600; // The validity period of the playback URL. Unit: seconds. Default value: 3600. This setting overwrites the validity period that you configured in the ApsaraVideo VOD console. If you leave this parameter empty, the default value is used. The validity period must be longer than the actual duration of the video. Otherwise, the playback URL expires before the playback is complete. 
    [self.player setAuthSource:authSource];

    VidStsベースの再生

    VOD再生にVidStsを使用する場合、再生資格情報の代わりに一時的なSTSトークンが使用されます。 この場合、オンデマンドで動画を再生する前に、STSトークンとAccessKeyのペア (AccessKey IDとAccessKey secret) を取得する必要があります。 STSトークンを取得する方法の詳細については、「RAMロールを作成し、STSを使用してロールに一時的なアクセス許可を付与する」をご参照ください。

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.vid = @"Vid"; // Required. The ID of the video. 
    source.region = @"Access region"; // Required. The region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. 
    source.securityToken = @"<yourSecurityToken>"; // Required. The STS token. To generate an STS token, call the AssumeRole operation in STS. 
    source.accessKeySecret = @"<yourAccessKeySecret>"; // Required. The AccessKey secret that is generated when the temporary STS token is issued. To generate the AccessKey secret, call the AssumeRole operation in STS. 
    source.accessKeyId = @"<yourAccessKeyId>"; // Required. The AccessKey ID that is generated when the temporary STS token is issued. To generate the AccessKey ID, call the AssumeRole operation in STS. 
    // source.authTimeout = 3600; // The validity period of the playback URL. Unit: seconds. Default value: 3600. This setting overwrites the validity period that you configured in the ApsaraVideo VOD console. If you leave this parameter empty, the default value is used. The validity period must be longer than the actual duration of the video. Otherwise, the playback URL expires before the playback is complete. 
    // Configure the playback source.
    [self.player setStsSource:source]

    暗号化再生

    ApsaraVideo VODは、HTTPライブストリーミング (HLS) 暗号化、Alibaba Cloud独自の暗号化、およびデジタル著作権管理 (DRM) 暗号化をサポートしています。 詳細については、「暗号化ビデオの再生」をご参照ください。

    ライブストリーム

    UrlSourceベースのライブストリーミング

    UrlSourceに基づいてライブストリームを再生する場合は、プレーヤーのソースをライブストリームのストリーミングURLに設定します。 ストリーミングURLは、サードパーティのストリーミングURL、またはApsaraVideo Liveで生成されたストリーミングURLです。

    ApsaraVideo liveコンソールのURLジェネレーターを使用して、ライブストリームのストリーミングURLを生成できます。 詳細については、「URLジェネレーター」をご参照ください。

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // Required. The streaming URL. The URL is generated by ApsaraVideo Live or a third-party service. 
    [self.player setUrlSource:urlSource];

    DRM暗号化されたライブストリーミング

    DRM暗号化されたライブストリーミングの詳細については、「暗号化されたビデオの再生」をご参照ください。

  4. ビューを設定します。

    再生ソースにビデオ画像が含まれている場合は、プレーヤーにビデオ画像を表示するようにUIビューを設定する必要があります。 サンプルコード:

    self.player.playerView = self.avpPlayerView.playerView;// The displayed view.
  5. オプションです。 自動再生機能を有効にします。 デフォルトでは、自動再生機能は無効になっています。

    self.player.autoPlay = YES;
  6. プレイヤーを準備します。

    [self.player prepare] メソッドを呼び出して、データを読み取り、解析します。

    [self.player prepare];
  7. 再生を開始します。

    • 自動再生機能が有効になっていない場合は、AVPEventPrepareDoneコールバックでstartメソッドを呼び出して再生を開始する必要があります。

    • 自動再生機能が有効になっている場合は、startメソッドを呼び出す必要はありません。 データが解析されると、ビデオは自動的に再生されます。

    重要

    ビデオが自動的に再生されると、AVPEventPrepareDoneコールバックの代わりにAVPEventAutoPlayStartコールバックが返されます。

    [self.player start];

再生の管理

ApsaraVideo Player SDK for iOSでは、メディアの再生を管理できます。 たとえば、再生を開始または一時停止したり、特定の時点から再生を開始したりできます。

再生を開始する

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

 [self.player start];

特定の時点から再生を開始する

seekToTime操作を呼び出して、指定した時点からビデオを再生できます。 この機能は、ユーザーがプログレスバーのスライダーをドラッグするとき、または特定の時点からビデオを再開するときに使用されます。 サンプルコード:

// position indicates the point in time from which you want to play the video. Unit: milliseconds. Use seekMode to specify the accurate seeking mode or the inaccurate seeking mode. 
// Use the accurate seeking mode.
[self.player seekToTime:position seekMode:AVP_SEEKMODE_ACCURATE];
// Use the inaccurate seeking mode.
[self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];

再生を一時停止する

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

[self.player pause];

再生を停止する

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

[self.player stop];

ビデオ表示モードを設定する

ApsaraVideo Player SDK for iOSを使用すると、再生の表示設定を設定できます。 たとえば、ビデオ画像のスケーリング、回転、またはミラーリングの方法を指定できます。

スケーリング

scalingModeを呼び出して、元のアスペクト比を変更せずにビデオをスケールインまたはスケールアウトしたり、ビデオをストレッチしたりできます。 サンプルコード:

// Scale in the video to fit the view. The aspect ratio of the video is maintained.
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
// Scale out the video to fill the view. The aspect ratio of the video is maintained.
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFILL;
// Stretch the video to fill the view. The aspect ratio of the video is not maintained. If the aspect ratios of the video and the view are different, image distortion may occur.
self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
説明

スケーリング設定は、ピクチャ・イン・ピクチャ (PiP) モードで再生されるビデオに対しては有効ではない。

回転

rotateModeメソッドを呼び出して、ビデオ画像の回転角度を指定できます。 サンプルコード:

// Set the rotation angle to 0° in the clockwise direction.
self.player.rotateMode = AVP_ROTATE_0;
// Set the rotation angle to 90° in the clockwise direction.
self.player.rotateMode = AVP_ROTATE_90;
// Set the rotation angle to 180° in the clockwise direction.
self.player.rotateMode = AVP_ROTATE_180;
// Set the rotation angle to 270° in the clockwise direction.
self.player.rotateMode = AVP_ROTATE_270;

ミラーリング

mirrorModeメソッドを呼び出して、ミラーリングモードを指定できます。 水平ミラーリング、垂直ミラーリング、およびミラーリングなしがサポートされています。 サンプルコード:

// Specify no mirroring for the video images.
self.player.mirrorMode = AVP_MIRRORMODE_NONE;
// Specify horizontal mirroring for the video images.
self.player.mirrorMode = AVP_MIRRORMODE_HORIZONTAL;
// Specify vertical mirroring for the video images.
self.player.mirrorMode = AVP_MIRRORMODE_VERTICAL;

再生情報の取得

ApsaraVideo Player SDK for iOSでは、現在の再生の進行状況、ビデオの継続時間、バッファリングの進行状況などの再生情報を取得できます。

現在の再生の進行状況を取得する

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

- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
// The position parameter indicates the current playback position. Unit: milliseconds.
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;
  }
}

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

onBufferedPositionUpdateコールバックから、現在のバッファリングの進行状況を照会できます。 サンプルコード:

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

レンダリングのフレームレート、オーディオとビデオのビットレート、およびネットワークのダウンリンクのビットレートをリアルタイムで取得

サンプルコード:

// Obtain the current frame rate for video rendering. The returned data is of the FLOAT data type. 
[self.playergetOption:AVP_OPTION_RENDER_FPS]
// Obtain the current video bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
[self.playergetOption:AVP_OPTION_VIDEO_BITRATE]
// Obtain the current audio bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
[self.playergetOption:AVP_OPTION_AUDIO_BITRATE]
// Obtain the current network downlink bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
[self.playergetOption:AVP_OPTION_DOWNLOAD_BITRATE]

再生ステータスの取得

onPlayerStatusChangedコールバックでプレーヤーのステータスを聞くことができます。 サンプルコード:

- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
    switch (newStatus) {
    case AVPStatusIdle:{
           // The player is idle.
        }
 break;
        case AVPStatusInitialzed:{
           // The player is initialized.
        }
 break;
        case AVPStatusPrepared:{
           // The player is prepared.
        }
 break;
        case AVPStatusStarted:{
           // The player is playing a media stream.
        }
 break;
case AVPStatusPaused:{
           // The playback is paused.
        }
 break;
case AVPStatusStopped:{
           // The playback is stopped.
        }
 break;
case AVPStatusCompletion:{
           // The completion of playback.
        }
 break;
case AVPStatusError:{
           // A playback error occurs.
        }
 break;
        default:
            break;
    }
}

ボリュームを設定する

プレーヤーの音量を調整したり、再生のミュートモードを設定したりできます。

音量を調整する

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

// Set the volume to a real number from 0 to 2. 
self.player.volume = 1.0f;
// Obtain the volume. 
self.player.volume

ミュートモードの設定

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

self.player.muted = YES;

再生速度を設定する

ApsaraVideo Player SDK for iOSでは、rateメソッドを呼び出して再生速度を変更できます。 0.5xから5xまでの再生速度がサポートされています。 オーディオピッチは、異なる速度で変化しないままです。 サンプルコード:

// Playback speeds ranging from 0.5x to 5x are supported. Common playback speeds are multiples of 0.5x, such as 0.5x, 1x, and 1.5x.
self.player.rate = 1.0f;

マルチ定義設定の構成

UrlSourceベースのライブストリーミングの設定

説明
  • ApsaraVideo liveのURLまたはトランスコードされたライブストリームのURLに基づいてライブストリームを再生できます。 デフォルトのトランスコードとカスタムトランスコードがサポートされています。 ライブストリームをトランスコードする方法の詳細については、「トランスコード管理」をご参照ください。 ストリーミングURLの取得方法の詳細については、「取り込みURLとストリーミングURL」をご参照ください。

  • さまざまな定義でライブストリームを切り替えることができます。 リアルタイムメッセージングプロトコル (RTMP) およびフラッシュビデオ (FLV) ストリームのみがサポートされています。

  • GOP (group of pictures) サイズを2秒に設定し、タイムスタンプをソースビデオがプッシュされた時刻に設定する必要があります。

  • 上記の要件を満たさないURLにストリーミングURLを変更すると、切り替えは失敗します。

Switch between definitions

switchStreamを呼び出して、異なる定義のライブストリームを切り替えます。 再生するライブストリームのURLを指定します。

[self.player switchStream:newUrl];

定義切り替えのコールバックの設定

定義切り替えの成功と失敗のコールバックを設定します。

// The callback that is fired when the definition switching is successful.
- (void)onStreamSwitchedSuccess:(AliPlayer*)player URL:(NSString*)URL;

// The callback that is fired when the definition switching fails.
- (void)onStreamSwitchedFail:(AliPlayer*)player URL:(NSString*)URL errorModel:(AVPErrorModel *)errorModel;

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;
        }
    }
}

Switch between definitions

selectTrackメソッドを呼び出して、ビデオを再生する定義に対応するトラックインデックスを指定できます。

[self.playerselectTrack:index];

定義切り替えのコールバックの設定

onTrackChangedコールバックは、ビデオ定義が切り替えられた後に呼び出されます。

- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
 // The definition is switched.
}

クイック切り替え

クイックスイッチングモードを有効にした後、selectTrackを呼び出してトラックをすばやく切り替えることができます。

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;
    }
}

オーディオトラックの切り替え

ApsaraVideo Player SDK for iOSは、オーディオトラックの切り替えをサポートしています。 これにより、ビデオの再生中に異なる言語のオーディオトラックを切り替えることができます。

使用上の注意

MP4ストリーム、シングルビットレート混合HLSストリーム、シングルビットレートHLSストリームのオーディオトラック、マルチビットレート混合HLSストリームのサブストリームなど、リスト再生に使用されないストリームのオーディオトラックを切り替えることができます。 次の表に、さまざまな種類のビデオストリームを示します。

タイプ

ビデオストリーム接尾辞

ビットレート量

M3U8ファイル量

サブストリームタイプ

説明

非リストストリーム (MP4ストリームなど)

. mp4

1

-

ビデオトラック、複数のオーディオトラック、および複数の字幕トラックを含むストリーム。

オーディオトラックを切り替えることができます。

単一ビットレート混合HLSストリーム

. m3u8

1

1

ビデオトラック、複数のオーディオトラック、および複数の字幕トラックを含むストリーム。

オーディオトラックを切り替えることができます。

単一ビットレートHLSストリーム

. m3u8

1

n

ビデオトラック、オーディオトラック、または字幕トラックのみを含むM3U8ストリーム。

オーディオトラックを切り替えることができます。

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

. m3u8

n

n

ビデオトラック、複数のオーディオトラック、および複数の字幕トラックを含むM3U8ストリーム。 サブストリームのビットレートは異なります。

異なるサブストリームを切り替えることができます。 サブストリームのオーディオトラックを切り替えることはできません。

手順

  1. コールバックを設定します。

      // Configure the onSubTrackReady callback. In most cases, the onSubTrackReady callback is fired before the prepare callback. 
    - (void)onSubTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // Call the getSubMediaInfo operation and obtain MediaInfo from the response. You must call the getSubMediaInfo operation after the onSubTrackReady is returned. Otherwise, an empty string is returned. 
        AVPMediaInfo* subMediaInfo = [player getSubMediaInfo];
        // Traverse all elements in the array.
        for (int i=0; i<subMediaInfo.tracks.count; i++) {
        	AVPTrackInfo* track = [mediaInfo.tracks objectAtIndex:i];
            // Obtain the audio track that you want to play.
        }
    }
  2. 目的のオーディオトラックに切り替えます。

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

SDKログの取得

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

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

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

  1. ロギング機能を有効にし、ログレベルを設定します。

    // Enable the logging feature.
    [AliPlayer setEnableLog:YES];
    // Set the log level. Default value: LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to LOG_LEVEL_TRACE.
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:nil];
  2. ログを収集します。

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

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

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

      1. ログ機能を有効にした後、プレイヤーインスタンスを作成する前に、エラーログが保存されるサンドボックスパスを指定します。

        NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        // logFilePath is a sample path. You can also create a .log file in the sandbox directory. For example, xxxx.log. 
        NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:@"xxxx.log"];
      2. ログデータを指定したファイルにインポートします。

        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout);
        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);
      3. エラーを再現し、. ログファイルを指定したパスに

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

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

  1. ロギング機能を有効にし、ログレベルを設定します。

    // Enable the logging feature.
    [AliPlayer setEnableLog:YES];
    // Set the log level. Default value: LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to LOG_LEVEL_TRACE.
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:^(AVPLogLevel logLevel, NSString *strLog) {
     NSLog(@"strLog:%@", strLog);
    }];
  2. ログを収集します。

    エラーが発生すると、システムはアプリケーションのログチャネルにエラーログを自動的にエクスポートします。