このトピックでは、ApsaraVideo Player SDK for iOSのさまざまな機能を実装する方法について説明します。 このトピックでは、機能を簡単に実装できるようにするサンプルコードも提供します。

Playback

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

    次のプレイヤーオブジェクトを作成できます。

    • AliPlayer
    • AliListPlayer
    AliListPlayerとAliPlayerは同じ機能を提供しますが、AliListPlayerはリスト再生機能を提供します。 例:
    self.player = [[AliPlayer alloc] init];
    self.listPlayer = [[AliListPlayer alloc] init];
    セキュアダウンロードモードでダウンロードされるオンプレミスビデオは、Alibaba Cloudによって暗号化およびトランスコードされます。 このようなオンプレミスのビデオを再生するには、暗号化検証用のセキュリティファイルを設定する必要があります。 アプリケーションでセキュリティファイルを構成することをお勧めします。 例:
    NSString * encrptyFilePath = [[NSBundle mainBundle] pathForResource:@ "encryptedApp" ofType:@ "dat"];
    [AliPrivateService initKey:encrptyFilePath];
    重要 暗号化検証用に正しいセキュリティファイルを設定しない場合、セキュアダウンロードモードでダウンロードされたビデオを再生すると、ERROR_DEMUXER_OPENSTREAMエラーメッセージが表示されます。
  2. プレイヤーの委任を設定します。
    ApsaraVideo Player SDK for iOSには、onPlayerEventonErrorなどの複数のデリゲートメソッドがあります。 詳細については、「API リファレンス」をご参照ください。 例:
    @ interface SimplePlayerViewController ()<AVPDelegate>
    @ end
    - (void)viewDidLoad {
        self.player = [[AliPlayer alloc] init];
        self.player.playerView = self.avpPlayerView.playerView;
        self.player.de legate = 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;
            ケースAVPEventAutoPlayStart:
                // 自動再生の開始。
                break;
            ケースAVPEventFirstRenderedStart:
                // 最初のフレームの外観。
                break;
            ケースAVPEventCompletion:
                // 再生の完了。
                break;
            ケースAVPEventLoadingStart:
                // バッファリングの開始。
                break;
            ケースAVPEventLoadingEnd:
                // バッファリングの終わり。
                break;
            ケースAVPEventSeekEnd:
                // シークの終わり。
                break;
            ケースAVPEventLoopingStart:
                // The start of loop playback.
                break;
            default:
                break;
        }
    }
    /**
     @ brief現在の再生位置のコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @ param position現在の再生位置。
     * /
    - (void)onCurrentPositionUpdate :( AliPlayer *)player position :( int64_t)position {
        // 進行状況バーを更新します。
    }
    /**
     @ briefバッファ位置のコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @ param position The current buffer position.
     */
    - (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // バッファの進行状況を更新します。
    }
    /**
     @ briefトラック情報を取得するためのコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @param info track The array of track information. このパラメーターは、AVPTrackInfoパラメーターに似ています。
     * /
    - (void)onTrackReady :( AliPlayer *) プレーヤー情報 :( NSArray<AVPTrackInfo *>*)info {
        // 異なるビットレートの情報を取得します。
    }
    /**
     @ briefサブタイトルを表示するためのコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @ param indexサブタイトルのインデックス番号。
     @param subtitle The string of the subtitle.
     * /
    - (void)onSubtitleShow :( AliPlayer *) プレーヤーインデックス :( int) インデックスサブタイトル :( NSString *) サブタイトル {
        // Obtain the subtitle to display it.
    }
    /**
     @ briefサブタイトルを隠すためのコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @ param indexサブタイトルのインデックス番号。
     * /
    - (void)onSubtitleHide :( AliPlayer *) プレーヤーインデックス :( int)index {
        // 字幕が非表示であることを示します。
    }
    /**
     @ briefスナップショットキャプチャのコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @param image The image.
     */
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // スナップショットをプレビューして保存します。
    }
    /**
     @ brief track切り替え完了のコールバック。
     @ param playerプレーヤーのメソッドポインター。
     @ param info切り替え後の情報。 このパラメーターは、AVPTrackInfoパラメーターに似ています。
     * /
    - (void)onTrackChanged :( AliPlayer *) プレーヤー情報 :( AVPTrackInfo *) 情報 {
        // ビットレートの切り替え結果を示します。
    }
    //...
  3. 再生ソースを設定し、再生の準備をします。
    ApsaraVideo Player SDK for iOSは、次の再生ソースをサポートしています。
    • AVPVidStsSource
    • AVPVidAuthSource
    • AVPVidMpsSource
    • AVPUrlSource
    URLベースの再生にはAVPUrlSourceを使用でき、ビデオID (VID) ベースの再生には他の3つの再生ソースを使用できます。 ApsaraVideo VODユーザーがAVPVidAuthSourceを選択することを推奨します。 AVPVidMpsSourceは、ApsaraVideo for Media Processingユーザーのみが利用できます。
    次のコードは、例としてAVPVidStsSourceを使用します。
        // AVPVidStsSource再生ソースを作成します。
        AVPVidStsSource * source = [[AVPVidStsSource alloc] init];
        source.region = selfです。 アクセス地域;
        source.vid = self。 VID;
        source.securityToken = selfです。 セキュリティトークン;
        source.accessKeySecret = selfです。 一時的なAccessKeyシークレット。
        source.accessKeyId = selfです。 一時的なAccessKey ID;
         // 再生ソースを設定します。
        [self.player setStsSource: ソース];
         // 再生の準備をします。
        [self.player准备];

    再生に再生資格情報を使用するプロセスの詳細については、「再生資格情報の使用」をご参照ください。

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

  4. UIビューを設定します。
    再生ソースにビデオ画像が含まれている場合は、プレーヤーにビデオ画像を表示するようにUIビューを設定する必要があります。 例:
        self.player.playerView = self.avpPlayerView.playerView;// 表示されるUIビュー。
  5. 再生コントロールを設定します。

    再生コントロールボタンを作成し、クリックイベントを再生コントロールメソッドに関連付けて、再生コントロールを実装できます。

    基本的な制御機能には、再生、停止、一時停止、およびシークが含まれます。 シーク機能はApsaraVideo VODでのみ有効です。 ライブストリームを一時停止すると、ライブストリームは現在の位置で停止します。 ライブストリームの再生を再開すると、一時停止した位置からライブストリームが開始されます。 例:
        // 再生を開始します。
        [self.playerスタート];
        // 再生を一時停止します。
        [self.player一时停止];
        // 再生を停止します。
        [self.player停止];
        // シーク。 この動作は、ビデオを正確な時点に向けることができない。
        [self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];
         // プレイヤーをリセットします。
        [self.playerリセット];
        // プレーヤーを解放します。 プレイヤーはリリース後は使用できません。
        [self.player destroy];
        self.player = nil;
  6. マルチビットレートの切り替えを設定します。
    ApsaraVideo Player SDK for iOSでは、異なるビットレートでHTTPライブストリーミング (HLS) ストリームを再生できます。 prepareメソッドを呼び出してプレーヤーを準備した後、getMediaInfoメソッドを呼び出して、TrackInfoパラメーターの値で示されるビットレート情報を取得できます。
    AVPMediaInfo * info = [self.player getMediaInfo];
    NSArray<AVPTrackInfo *>* tracks = info.tracks;
    再生中に、selectTrackメソッドを呼び出してビットレートを切り替えることができます。
    [self.player selectTrack:track.trackIndex];
    onTrackChangedコールバックを呼び出して、切り替え結果を表示できます。
    - (void)onTrackChanged :( AliPlayer *) プレーヤー情報 :( AVPTrackInfo *) 情報 {
        if (info.trackType == AVPTRACK_TYPE_VIDEO) {
            // ビデオ変更
        }
        // etc
    }
  7. 自動再生機能を設定します。
    ApsaraVideo Player SDK for iOSは自動再生機能をサポートしています。 prepareメソッドを呼び出す前に、自動再生機能を設定します。
    self.player.autoPlay = YES;
    自動再生機能を設定してプレーヤーを準備すると、ビデオが自動的に再生されます。 例:
    -(void)onPlayerEvent :( AliPlayer *)player eventType :( AVPEventType)eventType {
        switch (eventType) {
            ケースAVPEventPrepareDone: {
                break;
            ケースAVPEventAutoPlayStart:
                break;
        }
    }
    重要 自動再生が開始されると、AVPEventPrepareDoneコールバックの代わりにAVPEventAutoPlayStartコールバックが発生します。
  8. ループ再生機能を設定します。
    ApsaraVideo Player SDK for iOSはループ再生機能をサポートしています。 ループ再生機能を設定するには、loopメソッドを呼び出します。 ループ再生機能は、プレーヤーがビデオを終了位置まで再生するときに、プレーヤーがビデオを再び再生することを可能にする。 例:
    self.player.loop = YES;

    ループ再生開始のコールバックは、AVPEventLoopingStartコールバックによって起動されます。

  9. ビデオ画像の回転、スケーリング、ミラーリングを設定します。
    ApsaraVideo Player SDK for iOSには、ビデオ画像を正確に制御するための複数の方法があります。 ビデオ画像の回転角度、スケーリングモード、およびミラーリングモードを設定できます。 例:
    // ビデオ画像のミラーリングモードを水平ミラーリング、垂直ミラーリング、またはミラーリングなしに設定します。
    self.player.mirrorMode = AVP_MIRRORMODE_NONE;
    // ビデオ画像の回転角度を0 ° 、90 ° 、180 ° 、または270 ° に設定します。
    self.player.rotateMode = AVP_ROTATE_0;
    // 元のアスペクト比を維持すること、元のアスペクト比を維持すること、またはストレッチすることによって、ビデオ画像のスケーリングモードをパディングに設定します。
    self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;

    次の表に、ビデオ画像でサポートされる回転角度を示します。

    利点 説明
    AVP_ROTATE_0 回転角度が時計回りの0 ° であることを示します。
    AVP_ROTATE_90 回転角度が時計回りに90 ° であることを示します。
    AVP_ROTATE_180 回転角度が時計回りに180 ° であることを示します。
    AVP_ROTATE_270 回転角度が時計回りに270 ° であることを示します。

    次の表に、ビデオ画像でサポートされているスケーリングモードを示します。

    利点 説明
    AVP_SCALINGMODE_SCALEASPECTFIT アスペクト比を変更せずにビデオイメージがUIビューに縮小されることを示します。 これにより、画像の歪みが防止される。
    AVP_SCALINGMODE_SCALEASPECTFILL アスペクト比を変更せずに、ビデオイメージがUIビュー全体に拡大されることを示します。 これにより、画像の歪みが防止される。
    AVP_SCALINGMODE_SCALETOFILL ビデオイメージがUIビュー全体に引き伸ばされていることを示します。 これは、ビデオ画像とUIビューのアスペクト比が一致しない場合、画像歪みを引き起こす可能性がある。

    次の表に、ビデオ画像でサポートされているミラーリングモードを示します。

    利点 説明
    AVP_MIRRORMODE_NONE ミラーリングなしを示します。
    AVP_MIRRORMODE_HORIZONTAL 水平ミラーリングを示します。
    AVP_MIRRORMODE_VERTICAL 垂直ミラーリングを示します。
  10. ミュートモードと音量コントロールを設定します。
    ApsaraVideo Player SDK for iOSを使用すると、ビデオボリュームを制御できます。 mutedメソッドを呼び出して、プレーヤーのミュートモードを設定できます。 さらに、ボリュームメソッドを呼び出して、[0,1] の範囲でプレーヤーのボリュームを設定できます。 例:
    // プレイヤーをミュートします。
    self.player.muted = YES;
    // プレーヤーの音量を設定します。 値の範囲: 0〜1。
    self.player.volume = 1.0f;
  11. 再生速度を設定します。
    ApsaraVideo Player SDK for iOSでは、再生速度を設定できます。 rateメソッドを呼び出して、再生速度を0.5xから2xに変更できます。 オーディオピッチは、異なる速度で変化しないままである。 例:
    // 再生速度を設定します。 再生速度を0.5xから2xに変更できます。
    self.player.rate = 1.0f;
  12. スナップショット機能を設定します。
    ApsaraVideo Player SDK for iOSは、ビデオスナップショットのキャプチャに使用できるスナップショット機能を提供します。 スナップショットをキャプチャすると、プレーヤーはキャプチャするビデオイメージのソースデータを保存し、ソースデータをビットマップに変換します。 次に、onCaptureScreenメソッドを呼び出してビットマップを取得します。 例:
    // スナップショットキャプチャのコールバック。
    - (void)onCaptureScreen :( AliPlayer *) プレーヤーイメージ :( UIImage *) イメージ {
        // スナップショットを処理します。
    }
    // 現在のビデオ画像のスナップショットをキャプチャします。
    aliyunVodPlayer.snapshot();
    スナップショットにはUIが含まれていません。
  13. キャッシュ再生機能を設定します。
    ApsaraVideo Player SDK for iOSは、再生およびキャッシュ機能をサポートしています。 この機能は、ループ再生中のデータトラフィックを節約します。 キャッシュ再生機能を設定するには、prepareメソッドを呼び出す前にAVPCacheConfigメソッドを呼び出します。 例:
        AVPCacheConfig * config = [[AVPCacheConfig alloc] init];
        // キャッシュ再生機能を有効にします。
        config.enable = YES;
        // 1つのキャッシュファイルの最大長を指定します。 ファイルが最大長を超えた場合、キャッシュされません。
        config.maxDuration = 100;
        // キャッシュディレクトリを指定します。 アプリケーションの必要に応じて指定します。
        config.path = @ "ここでキャッシュパスを使用してください";
        // Specify the maximum size of the cache directory. キャッシュディレクトリのサイズが最大値を超えた場合は, キャッシュされたファイルが削除されます。
        config.maxSizeMB = 200;
        // プレーヤーのキャッシュ設定を指定します。
        [self.player setCacheConfig:config];
    キャッシュされたファイルは、setCacheConfigメソッドを呼び出した後にのみ使用できます。 ビデオがキャッシュされた後、キャッシュされたファイルは次のシナリオで使用されます。
    • ループ再生を有効にすると、プレーヤーがビデオを再生するときにキャッシュされたファイルが使用されます。
    • キャッシュされたファイルは、同じビデオを再生する別のプレーヤーを作成するときに使用されます。
      VIDベースの再生では、キャッシュされたファイルを見つけるためにVIDなどの情報が必要です。 VIDベースの再生に必要なキャッシュファイルを決定する必要な情報を取得するには、オンラインリクエストを送信する必要があります。
    キャッシュされたファイルのパスを照会する方法を次の表に示します。
    メソッド 説明 パラメーター 戻り値
    (NSString *) getCacheFilePath :( NSString *)URL ビデオURLに基づいて、キャッシュされたファイルのパスを照会します。 パスを取得するには、setCacheConfigメソッドを呼び出していることを確認します。 URL キャッシュされたファイルの絶対パス。
    (NSString *) getCacheFilePath :( NSString *)vidフォーマット :( NSString *) フォーマット定義 :( NSString *) 定義 VIDに基づいて、キャッシュされたファイルのパスを照会します。
    • vid: ビデオID。
    • format: ビデオフォーマット。
    • definition: ビデオ解像度。
    • previewTime: プレビュー期間。
    キャッシュされたファイルの絶対パス。
    再生とキャッシュ機能は、再生中にすべてのビデオがキャッシュされるわけではありません。 一部のシナリオでは、ビデオはキャッシュされません。 例:
    • AVPUrlSource再生ソースがURLベースの再生に使用される場合、プレーヤーがHLSプロトコルを使用してビデオURLに基づいてビデオを再生する場合、ビデオはキャッシュされません。m3u8ファイル。 URLベースの再生の他のサポートされている形式の場合、プレーヤーは設定されたとおりに再生中にビデオをキャッシュします。
    • プレーヤがVIDに基づいてビデオを再生するとき、プレーヤは、構成されるように、再生中にビデオをキャッシュする。
    • プレーヤーがすべてのビデオデータを読み取ると、ビデオがキャッシュされます。 プレーヤーがすべてのビデオデータを読み取る前にstopまたはonErrorメソッドを呼び出すと、キャッシュが失敗します。
    • ビデオのキャッシュされた部分内で検索しても、キャッシュ結果には影響しません。 キャッシュされた部分の外部を探すと、キャッシュ失敗が発生します。
    • 暗号化検証用セキュリティファイルの検証情報がアプリケーション情報と一致しない場合、キャッシュは失敗します。
    • onPlayerEventInfoコールバックは、キャッシュ結果を返します。
    -(void)onPlayerEvent :( AliPlayer *)player eventWithString :( AVPEventWithString)eventWithStringの説明 :( NSString *)description {
        if (eventWithString == EVENT_PLAYER_CACHE_SUCCESS) {
            // キャッシュが成功したことを示します。
        } else if (eventWithString == EVENT_PLAYER_CACHE_ERROR) {
            // キャッシュが失敗したことを示します。
        }
    }
  14. プレビュー機能を設定します。

    プレビュー期間を設定すると、ApsaraVideo Player SDK for iOSを使用してビデオを再生すると、サーバーはビデオ全体ではなくプレビュービデオを返します。

    ApsaraVideo Player SDK for iOSとApsaraVideo VODを使用して、プレビュー機能を使用できます。 プレビュー機能をサポートする再生ソースは、AVPVidStsSourceとAVPVidAuthSourceです。 プレビュー機能の設定方法と使用方法の詳細については、「プレビュー機能の設定」をご参照ください。 プレビュー機能を有効にした後、VidPlayerConfigGenでsetPreviewTimeメソッドを呼び出して、プレビュー期間を設定できます。 次のコードは、例としてAVPVidStsSourceを使用します。
    AVPVidStsSource * source = [[AVPVidStsSource alloc] init];
    ....
    VidPlayerConfigGenerator * vp = [[VidPlayerConfigGenerator alloc] init];
    [vp setPreviewTime:20];// プレビュー期間を20秒に設定します。
    source.playConfig = [vp generatePlayerConfig];// プレーヤーの設定を指定します。
    ...
    VidPlayerConfigGenメソッドを呼び出して、サーバーでサポートされているリクエストパラメーターを設定できます。 詳細は、「リクエストパラメーター」をご参照ください。
  15. ハードウェアデコードを有効または無効にします。
    ApsaraVideo Player SDK for iOSは、H.264およびH.265標準に基づくハードウェアデコードをサポートしています。 enableHardwareDecoderメソッドを呼び出して、ハードウェアのデコード機能を有効または無効にできます。 デフォルトでは、ハードウェアデコード機能は有効になっています。 ハードウェアデコードの初期化に失敗した場合、プレーヤーはソフトウェアデコードに切り替わり、通常のビデオ再生を保証します。 例:
    // ハードウェアのデコードを有効にします。 デフォルトでは、ハードウェアデコードが有効になっています。
    self.player.enableHardwareDecoder = YES;
    ハードウェアのデコードをソフトウェアのデコードに切り替えると、onPlayerEventメソッドによってコールバックが発生します。 例:
    -(void)onPlayerEvent :( AliPlayer *)player eventWithString :( AVPEventWithString)eventWithStringの説明 :( NSString *)description {
        if (eventWithString == EVENT_SWITCH_TO_SOFTWARE_DECODER) {
            // ソフトウェアデコードに切り替えます。
        }
    }
  16. リファラーを設定します。
    ApsaraVideo Player SDK for iOSには、リクエストリファラーを設定するためのAVPConfigクラスが用意されています。 ApsaraVideo VODコンソールのブラックリストまたはホワイトリストにリファラーを設定することで、アクセス制御を実装できます。 以下のコードを例として使用します。
    // 設定を照会します。
    AVPConfig * config = [self.player getConfig];
    // リファラーを設定します。
    config.referer = referer;
    .... // その他のパラメーターを設定します。
    // プレーヤーの設定を指定します。
    [self.player setConfig:config];
  17. UserAgentを設定します。
    ApsaraVideo Player SDK for iOSは、リクエストUserAgentを設定するためのAVPConfigクラスを提供します。 UserAgentを設定すると、プレーヤーからのリクエストにUserAgent情報が含まれます。 以下のコードを例として使用します。
    // 設定を照会します。
    AVPConfig * config = [self.player getConfig];
    // UserAgentを設定します。
    config.us erAgent = userAgent;
    .... // その他のパラメーターを設定します。
    // プレーヤーの設定を指定します。
    [self.player setConfig:config];
  18. ネットワークのタイムアウト時間とリトライ回数を設定します。
    AVPConfigクラスを使用して、ネットワークのタイムアウト時間とプレーヤーの再試行回数を設定できます。 以下のコードを例として使用します。
    // 設定を照会します。
    AVPConfig * config = [self.player getConfig];
    // ネットワークのタイムアウト期間をミリ秒単位で指定します。
    config.net workTimeout = 5000;
    // タイムアウト発生時のリトライ回数を設定します。 networkTimeoutパラメーターは、リトライ間隔を示します。 デフォルトでは、networkRetryCountパラメーターは2に設定されています。 networkRetryCountパラメーターが0に設定されている場合、再試行は禁止されます。 アプリケーションが再試行ポリシーを決定します。
    config.net workRetryCount = 2;
    .... // その他のパラメーターを設定します。
    // プレーヤーの設定を指定します。
    [self.player setConfig:config];
    • networkRetryCountパラメーターを0以外の値に設定した場合、プレーヤーはネットワークエラーのために読み込みステータスになったときに再生を再試行します。 リトライ回数はnetworkRetryCountパラメーターの値、リトライ間隔はnetworkTimeoutパラメーターの値です。
    • リトライの最大数に達した後も読み込みステータスが維持される場合、onErrorコールバックが発生します。 この場合、AVPErrorModel.codeメソッドはERROR_LOADING_TIMEOUTを返します。
    • networkRetryCountパラメーターが0に設定されている場合、ネットワークタイムアウトが発生したときにonPlayerEventコールバックが発生します。 この場合、eventWithStringメソッドはEVENT_PLAYER_NETWORK_RETRYを返します。 この問題を解決するには、ApsaraVideo Player SDK for iOSのreloadメソッドを呼び出して、ネットワークパケットをリロードしたり、必要に応じて他の操作を実行したりできます。
  19. バッファーと遅延の設定を行います。
    バッファ制御は、プレーヤーにとって重要である。 適切な設定により、起動時の読み込み時間を大幅に短縮し、再生のスムーズさを向上できます。 ApsaraVideo Player SDK for iOSには、バッファーと遅延の設定を行うためのAVPConfigクラスが用意されています。 例:
    // 設定を照会します。
    AVPConfig * config = [self.player getConfig];
    // 最大バッファ遅延を設定します。 注: このパラメーターはライブストリーミングでのみ有効です。 遅延時間が上限を超えた場合、ApsaraVideo Player SDK for iOSはフレームを同期して、遅延を最大遅延時間未満に保ちます。
    config.maxDelayTime = 5000;
    // 最大バッファ期間を設定します。 単位:ミリ秒。 このパラメーターは、プレーヤーがロードできる最大ビデオ長を示します。
    config.maxBufferDuration = 50000;
    // ピークバッファ期間を設定します。 単位:ミリ秒。 ネットワーク接続が悪いと、プレーヤーはデータの読み込みを開始します。 このパラメーターは、プレーヤーがロードを停止するまでのバッファー期間を示します。
    config.highBufferDuration = 3000;
    // 起動読み込み時間を設定します。 単位:ミリ秒。 スタートアップロード時間が短いほど、再生が早く開始されます。 短いスタートアップロード時間は、再生開始後すぐにプレーヤをバッファリングさせることができる。
    config.startBufferDuration = 500;
    // その他のパラメーターを設定します。
    // プレーヤーの設定を指定します。
    [self.player setConfig:config];
    重要 startBufferDurationパラメーターの値がhighBufferDurationパラメーターの値より大きくないこと、およびhighBufferDurationパラメーターの値がmaxBufferDurationパラメーターの値より大きくないことを確認してください。
  20. HTTPヘッダーを設定します。
    ApsaraVideo Player SDK for iOSは、リクエストにHTTPヘッダーを追加するためのAVPConfigクラスを提供します。 例:
    // 設定を照会します。
    AVPConfig * config = [self.player getConfig];
    // ヘッダーを定義します。
    NSMutableArray * httpHeaders = [[NSMutableArray alloc] init];
    // たとえば、Alibaba Cloud HTTPDNSを使用する場合は、ホストを設定する必要があります。
    [httpHeaders addObject:@ "Hos t:example.com"];
    // ヘッダーを設定します。
    config.httpHeaders = httpHeaders;
    .... // その他のパラメーターを設定します。
    // プレーヤーの設定を指定します。
    [self.player setConfig:config];

リスト再生

今日、短いビデオコンテンツのリスト再生が普及している。 ApsaraVideo Player SDK for iOSは、組み込みのプリロードメカニズムを備えた完全なリスト再生機能を提供します。 リスト再生機能により、起動時の読み込み時間が大幅に短縮されます。

  1. プレイヤーを作成します。
    AliListPlayerAliPlayerは同じ機能を提供しますが、AliListPlayerはリスト再生機能を提供します。 リスト再生機能を使用するには、AliListPlayerオブジェクトを作成します。 例:
    self.listPlayer = [[AliListPlayer alloc] init];
  2. プリロードするビデオの数を設定します。
    プリロードするビデオの数を適切に設定することで、起動時の読み込み時間を大幅に短縮できます。 例:
        // プリロードするビデオの数を設定します。 ロードされたビデオの総数は、1にカウントの2倍を加えたものです。
        self.listplyer.preloadCount = 2;
  3. 複数の再生ソースを追加または削除します。
    リスト再生は、AVPVidStsSourceおよびAVPUrlSource再生ソースをサポートします。 URLベースの再生にはAVPUrlSourceを使用でき、VIDベースの再生にはAVPVidStsSourceを使用できます。 例:
    // AVPVidStsSource再生ソースを追加します。
    [self.listPlayer addVidSource:videoId uid:UUIDString];
    // AVPUrlSource再生ソースを追加します。
    [self.listPlayer addUrlSource:URL uid:UUIDString];
    // 再生ソースを削除します。
    [self.listPlayer removeSource:UUIDString];
    重要
    • AVPVidAuthSourceおよびAVPVidMpsSourceは、リスト再生ではサポートされません。
    • uidパラメータは、ビデオの一意のIDを示す。 ビデオを区別するために使用されます。 同じ一意のIDを持つビデオは同じと見なされます。 プレーヤーが指定したビデオ以外のビデオを再生する場合は、複数のビデオに一意のIDを指定しているかどうかを確認します。
  4. 再生ソースを再生します。
    1つ以上の再生ソースを追加すると、指定した再生ソースからコンテンツを再生できます。 次のメソッドを呼び出して、ソースを再生できます。
        // URLベースの再生では、次のメソッドを呼び出します。
        - (BOOL) moveTo :( NSString *)uid;
          // VIDベースの再生のために次のメソッドを呼び出します。 stsInfoパラメーターにSecurity Token Service (STS) トークンを指定する必要があります。 STSトークンが有効であることを確認してください。
        - (BOOL) moveTo :( NSString *)uid accId :( NSString *)accId accKey:(NSString *)accKeyトークン :( NSString *) トークンリージョン :( NSString *) リージョン;
  5. リスト内の前または次のビデオを再生します。
    moveToPrevメソッドを呼び出して前のビデオを再生するか、moveToNextメソッドを呼び出して次のビデオを再生することができます。 例:
        // 次のビデオを再生します。 注: このメソッドは、URLベースの再生にのみ有効です。 このメソッドは、VIDベースの再生には無効です。
        - (BOOL) moveToNext;
        // 前のビデオを再生します。 注: このメソッドは、URLベースの再生にのみ有効です。 このメソッドは、VIDベースの再生には無効です。
        - (BOOL) moveToPre;
          // 次のビデオを再生します。 注: このメソッドは、VIDベースの再生にのみ有効です。
        - (BOOL) moveToNext :( NSString *)accId accKey :( NSString *)accKeyトークン :( NSString *) トークンリージョン :( NSString *) リージョン;
        // 前のビデオを再生します。 注: このメソッドは、VIDベースの再生にのみ有効です。
        - (BOOL) moveToPre :( NSString *)accId accKey :( NSString *)accKeyトークン :( NSString *) トークンリージョン :( NSString *) リージョン;

動画ダウンロード

ApsaraVideo Player SDK for iOSでは、AVPVidStsSourceおよびAVPVidAuthSourceを使用して、ApsaraVideo VODからビデオをダウンロードできます。 ApsaraVideo VODは、セキュアなダウンロードモードと通常のダウンロードモードをサポートしています。 ApsaraVideo VODコンソールでダウンロードモードを設定できます。
  • 通常のダウンロード: 通常のダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されず、サードパーティのプレーヤーで再生できます。
  • 安全なダウンロード: 安全なダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されます。 サードパーティのプレーヤーを使用してダウンロードしたビデオを再生することはできません。 ApsaraVideo Playerのみを使用して再生できます。
  1. ダウンローダーを作成して設定します。
    ダウンローダーを作成します。 例:
    AliMediaDownloader * downloader = [[AliMediaDownloader alloc] init];
    [downloader setSaveDirectory:self.downLoadPath];
    [ダウンローダーsetDelegate:self];
    ApsaraVideo Player SDK for iOSでは、Alibaba Cloud独自の暗号化を使用して暗号化されたビデオをダウンロードできます。 セキュリティ上の理由から、SDKで暗号化検証用のセキュリティファイルを設定する必要があります。 アプリケーションでセキュリティファイルを構成することをお勧めします。 例:
    NSString * encrptyFilePath = [[NSBundle mainBundle] pathForResource:@ "encryptedApp" ofType:@ "dat"];
    [AliPrivateService initKey:encrptyFilePath];
    重要 セキュアダウンロードモードでビデオをダウンロードし、暗号化検証用のセキュリティファイルの情報がアプリケーション情報と一致しない場合、ビデオのダウンロードは失敗します。
  2. リスナーを設定します。
    ダウンローダは複数のリスナーを提供します。 例:
    -(void)onPrepared :( AliMediaDownloader *) ダウンローダーmediaInfo :( AVPMediaInfo *)info {
        // ダウンロードするコンテンツが準備されていることを示します。
    }
    -(void)onError :( AliMediaDownloader *) ダウンローダーerrorModel :( AVPErrorModel *)errorModel {
        // ダウンロードエラーが発生したことを示します。
    }
    -(void)onDownloadingProgress :( AliMediaDownloader *) ダウンローダーの割合 :( int) パーセント {
        // ダウンロードの進行状況の割合を示します。
    }
    -(void)onProcessingProgress :( AliMediaDownloader *) ダウンローダーの割合 :( int) パーセント {
        // 処理の進行状況の割合を示します。
    }
    -(void)onCompletion :( AliMediaDownloader *) ダウンローダー {
        // ダウンロードが成功したことを示します。
    }
  3. ダウンロードソースを準備します。
    prepareメソッドを呼び出して、ダウンロードソースを準備できます。 AVPVidStsSourceとAVPVidAuthSourceはダウンロードソースとしてサポートされています。 次のコードは、例としてAVPVidStsSourceを使用します。
    // AVPVidStsSourceダウンロードソースを作成します。
    AVPVidStsSource * stsSource = [[AVPVidStsSource alloc] init];
    stsSource.vid = source.vid;// ビデオID。
    stsSource.region = DEFAULT_SERVER.region;// アクセスリージョン。
    stsSource.securityToken = DEFAULT_SERVER.securityToken;// セキュリティトークン。
    stsSource.accessKeySecret = DEFAULT_SERVER.accessKeySecret;// 一時的なAccessKeyシークレット。
    stsSource.accessKeyId = DEFAULT_SERVER.accessKeyId;// 一時的なAccessKey ID。
    // ダウンロードソースを準備します。
    [ダウンローダーprepareWithVid:stsSource];
  4. 準備したダウンロードソースからダウンロードするコンテンツを選択します。
    ダウンロードソースの準備が完了すると、onPreparedコールバックが発生します。 ダウンロードするトラックを選択します。
    -(void)onPrepared :( AliMediaDownloader *) ダウンローダーmediaInfo :( AVPMediaInfo *)info {
        NSArray<AVPTrackInfo *>* tracks = info.tracks;
        // この例では、最初のトラックのコンテンツをダウンロードします。
        [ダウンローダーselectTrack:[tracks objectAtIndex:0].trackIndex];
    }
  5. ダウンロードソースを更新し、ダウンロードを開始します。
    AVPVidStsSourceまたはAVPVidAuthSourceは、ダウンロード前に期限切れになる場合があります。 したがって、ダウンロードを開始する前にダウンロードソースを更新することをお勧めします。 例:
    // ダウンロードソースを更新します。
    [ダウンローダーupdateWithVid:vidSource]
    // ダウンロードを開始します。
    [ダウンローダー開始];
  6. ダウンロードが成功または失敗した後、ダウンローダーをリリースします。
    ダウンロードが成功したら、destroyメソッドを呼び出してダウンローダーをリリースします。
    [self.downloader destroy];
    self.downloader = nil;

暗号化されたライブストリームの再生

ApsaraVideo Player SDK for iOSは、暗号化されたライブストリームの再生をサポートします。 プレーヤーの作成方法と使用方法の詳細については、「再生」セクションを参照してください。

  1. 再生ソースを設定します。
    再生ソースとしてAVPLiveStsSourceを指定する必要があります。 例:
    // AVPLiveStsSource再生ソースを作成します。
    AVPLiveStsSource * liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@ "暗号化されたライブストリームのURL。" accessKeyId:@ "一時的なAccessKey ID。" accessKeySecret:@ "一時的なAccessKey secret." securityToken:@ "セキュリティトークン。" リージョン: @ "アプリの名前:" @ "ライブストリームが属するアプリケーションの名前。" stream:@ "ライブストリームの名前。"];
     // 再生ソースを設定します。
     [self.aliPlayer setLiveStsSource:liveStsSource];
     ......
     // 再生の準備をします。
     [self.aliPlayerの準備];
  2. STSトークンが有効かどうかを監視します。
    暗号鍵は、暗号化ライブストリームの再生中に変化してもよい。 キーが変更されると、プレーヤーはSTSから最新のキーを要求します。 STSトークンが有効かどうかを監視する必要があります。 トークンが無効な場合、暗号化されたライブストリームの再生が影響を受けます。 以下のコードを例として使用します。
     __weak typeof(self) weakSelf = self;
    [self.aliPlayer setVerifyStsCallback:^ AVPStsStatus(AVPStsInfo info) {
        if (情報を使用できます) {
            有効を返します。
        }
        if (有効なSTSトークンを取得できます) {
            STS() を取得する; // この操作は同期または非同期で実行できます。
            戻り保留中;
        }
        [weakSelf.aliPlayer停止];
        無効を返します。}];
    有効なSTSトークンを取得したら、updateLiveStsInfoメソッドを呼び出してSTSトークンを更新する必要があります。 トークンの取得に失敗した場合は、再生を停止することを推奨します。
    [self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecretトークン: self.liveStsSource.securityToken region:self.liveStsSource.region];
    updateLiveStsInfoメソッドを呼び出さない場合、プレーヤーは期限切れのSTSトークンを使用して暗号化キーを取得します。 STSトークンが無効になると、画面のちらつきが発生するか、再生が失敗する可能性があります。