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

ApsaraVideo VOD:高度な機能

最終更新日:Dec 10, 2024

このトピックでは、ApsaraVideo Player SDK for Androidの高度な機能について説明し、サンプルコードを提供します。 その他の機能の詳細については、「ApsaraVideo Player SDK For AndroidのAPI操作」をご参照ください。

再生の設定

短いビデオのリスト再生を有効にする

ApsaraVideo Player SDK for Androidは、ショートビデオの本格的なリスト再生機能を提供します。 SDKは、プリロードなどの機能を使用して、短いビデオの起動時間を最小限に抑えます。 長い動画ではこの機能を有効にしないことをお勧めします。

制限事項

短い動画のリスト再生を有効にするには、複数のAliPlayerインスタンスを作成することを推奨します。 次の項目では、AliListPlayerの制限について説明します。 詳細については、「短いビデオリストプレーヤー」をご参照ください。

  • AliListPlayerは、V5.4.5.0より前のバージョンのApsaraVideo Player SDK for AndroidでのM3U8ファイルの再生をサポートしていません。 ApsaraVideo Player SDK for Android V5.4.5.0以降では、ローカルキャッシュ機能を有効にしてM3U8ファイルを再生する必要があります。

手順

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

    AliPlayerFactoryクラスを使用してAliListPlayerインスタンスを作成します。 サンプルコード:

    AliListPlayer aliyunListPlayer;
    .....
    aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());
    aliyunListPlayer.setTraceId("traceId"); // The trace ID is the unique identifier of the device or the user. In most cases, the value is the International Mobile Equipment Identity (IMEI) or the Identifier for Advertisers (IDFA) of the device.

  2. オプション: リスナーを設定します。

    短いビデオリストプレーヤーを作成する場合、リスナーはオプションです。 ただし、リスナーを設定しないと、プレーヤーに関連するイベント (再生の失敗や進行状況など) の通知を受け取ることができません。 OnPreparedListenerOnErrorListenerOnCompletionListenerOnLoadingStatusListener、およびOnInfoListenerのリスナーを設定することを推奨します。

    表示コード

    aliyunListPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
        @Override
        public void onCompletion() {
            // Listen for the end of playback.
        }
    });
    aliyunListPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        @Override
        public void onError(ErrorInfo errorInfo) {
            // Listen for the occurrence of errors.
        }
    });
    aliyunListPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
            // Listen for successful preparation.
        }
    });
    aliyunListPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
            // Listen for the change of video resolution.
        }
    });
    aliyunListPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
        @Override
        public void onRenderingStart() {
            // Listen for the display of the first frame.
        }
    });
    aliyunListPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(int type, long extra) {
            // Listen for other events. The type parameter contains multiple values that indicate various events, such as the start of loop playback, buffer position, current playback position, and the start of autoplay.
        }
    });
    aliyunListPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        @Override
        public void onLoadingBegin() {
            // Listen for the start of buffering. 
        }
        @Override
        public void onLoadingProgress(int percent, float kbps) {
            // Listen for the buffering progress.
        }
        @Override
        public void onLoadingEnd() {
            // Listen for the end of buffering.
        }
    });
    aliyunListPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {
        @Override
        public void onSeekComplete() {
            // Listen for the end of seeking.
        }
    });
    aliyunListPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleShow(long id, String data) {
            // Listen for the display of subtitles.
        }
        @Override
        public void onSubtitleHide(long id) {
            // Listen for the hiding of subtitles.
        }
    });
    aliyunListPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            // Listen for the successful switching between audio and video streams or between resolutions.
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            // Listen for the failed switching between audio and video streams or between resolutions.
        }
    });
    aliyunListPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
        @Override
        public void onStateChanged(int newState) {
            // Listen for the change of player status.
        }
    });
    aliyunListPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
        @Override
        public void onSnapShot(Bitmap bm, int with, int height) {
            // Listen for the capture of snapshots.
        }
    });
  3. プリロードするビデオの数を指定します。

    ビジネス要件に基づいて、プリロードするビデオの数を指定できます。 これにより、起動時間を短縮できます。 サンプルコード:

    // Specify the number of videos that you want to preload. The total number of loaded videos equals one plus twice the specified number. 
    aliyunListPlayer.setPreloadCount(int count);
  4. 複数の再生ソースを追加または削除します。

    リスト再生は、VidおよびUrlSourceに基づくビデオ再生をサポートします。 VidStsまたはVidPlayAuthを使用して、Vidに基づいてビデオを再生できます。 Urlはビデオの再生URLです。 サンプルコード:

    • Url: 再生URLは、ApsaraVideo VODまたはサードパーティのビデオオンデマンド (VOD) プラットフォームのオーディオファイルまたはビデオファイルのURLにすることができます。 GetPlayInfo操作を呼び出して、ApsaraVideo VODのオーディオファイルまたはビデオファイルの再生URLを取得できます。 ApsaraVideo VOD SDKを使用してこの操作を呼び出すことを推奨します。 これにより、複雑な署名計算から解放されます。 GetPlayInfo操作の詳細については、OpenAPI Explorerをご参照ください。

    • Vid: オーディオまたはビデオID。 IDを取得するには、ApsaraVideo VODコンソールにログインし、左側のナビゲーションウィンドウで [メディアファイル]> [オーディオ /ビデオ] を選択します。 または、SearchMedia操作を呼び出すこともできます。

    // Add a Vid playback source.
    aliyunListPlayer.addVid(String videoId, String uid);
    // Add a UrlSource playback source.
    aliyunListPlayer.addUrl(String url, String uid);
    // Remove a playback source.
    aliyunListPlayer.removeSource(String uid);
    説明

    uidパラメータは、ビデオの一意のIDを示す。 一意のIDを使用してビデオを識別できます。 同じ一意のIDを持つビデオは同じと見なされます。 プレーヤーが指定していないビデオを再生する場合は、複数のビデオに同じIDを指定しているかどうかを確認します。 一意のIDを任意の文字列に設定できます。

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

    SurfaceViewまたはTextureViewメソッドを呼び出して、ビューを設定できます。

    • 次のサンプルコードでは、SurfaceViewを使用してビューを構成する方法について説明します。

      表示コード

      SurfaceView surfaceView = findViewById(R.id.surface_view);
      surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
              aliyunListPlayer.setSurface(holder.getSurface());
          }
      
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
              aliyunListPlayer.surfaceChanged();
          }
      
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliyunListPlayer.setSurface(null);
          }
      });
    • 次のサンプルコードでは、TextureViewを使用してビューを構成する方法について説明します。

      表示コード

      TextureView textureView = findViewById(R.id.texture_view);
      textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
          @Override
          public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
              aliyunListPlayer.setSurface(new Surface(surface));
          }
      
          @Override
          public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
              aliyunListPlayer.surfaceChanged();
          }
      
          @Override
          public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
              aliyunListPlayer.setSurface(null);
              return false;
          }
      
          @Override
          public void onSurfaceTextureUpdated(SurfaceTexture surface) {
      
          }
      });
  6. ビデオソースを再生します。

    1つ以上の再生ソースを追加して自動再生を有効にしたら、moveToを呼び出して、指定した再生ソースからコンテンツを再生します。 サンプルコード:

    表示コード

    // Enable autoplay.
    aliyunListPlayer.setAutoPlay(true);
    
    // Call the following method for URL-based playback.
    aliyunVodPlayer.moveTo(String uid);
    // Call the following method for Vid-based playback. You must obtain the Security Token Service (STS) token and AccessKey pair before you call this method. For more information, see Create a RAM role and grant temporary access permissions to the role by using STS. 
    aliyunVodPlayer.moveTo(String uid, StsInfo info);
    // Call the following method for Vid-based playback. You must obtain a playback credential for the video before you call this method and specify the PlayAuthInfo parameter when you call this method. 
    aliyunVodPlayer.moveTo(String uid, PlayAuthInfo info);
  7. リスト内の前または次のビデオを再生します。

    • moveToを呼び出してビデオを再生した後、moveToPrevを呼び出して前のビデオを再生するか、moveToNextを呼び出して次のビデオを再生します。 サンプルコード:

      説明

      movetoまたはmoveToNextを呼び出して同じビューでビデオソースを切り替えると、画像が点滅し、画面が黒くなります。 この場合、PlayerConfigmClearFrameWhenStopfalseに設定し、listPlayerを呼び出してプレーヤーを初期化するときにsetConfigを呼び出して設定を適用することを推奨します。

      表示コード

      // Enable autoplay.
      aliyunListPlayer.setAutoPlay(true);
      
      // Play the next video.   You can call this method only for URL-based playback. The method is invalid for Vid-based playback. 
      aliyunVodPlayer.moveToNext();
      // Play the previous video. You can call this method only for URL-based playback. The method is invalid for Vid-based playback. 
      aliyunVodPlayer.moveToPrev();
      // Play the next video. You can call this method only for Vid-based playback. 
      aliyunVodPlayer.moveToNext(StsInfo info);
      // Play the previous video. You can call this method only for Vid-based playback. 
      aliyunVodPlayer.moveToPrev(StsInfo info);
      // Play the next video. You can call this method only when you use playback credentials for Vid-based playback. 
      aliyunVodPlayer.moveToNext(PlayAuthInfo info);
      // Play the previous video. You can call this method only when you use playback credentials for Vid-based playback. 
      aliyunVodPlayer.moveToPrev(PlayAuthInfo info);
    • MoveToまたはMoveToNextメソッドを呼び出す前に、再生資格情報を取得します。 ビデオIDを使用して再生資格情報を申請できます。

      説明

      VidPlayAuthに基づいてビデオを再生するには、ビデオIDを使用して再生資格情報を申請する必要があります。

      表示コード

      requestAuth(source.getVideoId(), new OnRequestAuthResultListener() {
          @Override
          public void onResult(VidAuth vidAuth) {
              mVideoListPlayer.moveToNext(createVidAuth(vidAuth));
          }
      });
      
      private PlayAuthInfo createVidAuth(VidAuth vidAuth) {
          if (vidAuth == null) {
              return new PlayAuthInfo();
          }
          PlayAuthInfo playAuthInfo = new PlayAuthInfo();
          playAuthInfo.setPlayAuth(vidAuth.getPlayAuth());
          return playAuthInfo;
      }
  8. オプション:プレレンダリング機能を有効にして、スムーズなビデオ切り替えを実現します。

    説明

    この機能は、ApsaraVideo Player SDK for Android V5.5.2.0以降でのみサポートされています。 この機能を使用するには、ローカルキャッシュを有効にする必要があります。 詳細については、「ローカルキャッシュの設定」をご参照ください。

    getPreRenderPlayerおよびmoveToNextWithPrerendered操作は、Android V5.5.2.0以降のApsaraVideo Player SDKで提供されています。 これにより、ビデオ切り替えの滑らかさを向上させることができます。 次のセクションでは、さまざまなバージョンのApsaraVideo Player SDK for Androidを統合するときの操作の使用方法について説明します。

    ApsaraVideo Player SDK for Android V5.5.2.0以降の統合

    getPreRenderPlayer操作を使用します。 サンプルコード:

    表示コード

    // You can use the getPreRenderPlayer operation only when you use the moveToNext operation. The local caching feature must be enabled. 
    IPlayer preRenderPlayer = listPlayer.getPreRenderPlayer();
    if (preRenderPlayer != null) {
        // Call the setSurface operation.
        preRenderPlayer.setSurface(surface);
      preRenderPlayer.start();
      listPlayer.setSurface(null);
      // Call the moveToNextWithPrerendered operation instead of the moveToNext operation if you use STS-based playback.
      listPlayer.moveToNextWithPrerendered(createStsInfo(source));
    }

    ApsaraVideo Player SDK for Androidが以前のバージョンからV5.5.2.0以降に更新されました

    以前のバージョンのApsaraVideo Player SDK for Androidでコードを変更する必要があります。 次の手順では、コードを変更する方法について説明します。

    1. レンダリングビューに関連するロジックを変更します。

      以前のバージョンのApsaraVideo Player SDK for Androidは、グローバルレンダービューを使用しています。 ビデオソースを切り替えると、以前のレンダリングビューがレイアウトから削除され、新しいレンダリングビューが追加されます。 ApsaraVideo Player SDK for Android V5.5.2.0以降は、複数のレンダリングビューをサポートしています。 RecyclerView.ViewHolderレイアウトに複数のビューを追加できます。 これにより、ビデオを切り替える前に次のビデオソースをプリロードできます。 これにより、スムーズなビデオ切り替えが保証されます。 以前のバージョンのApsaraVideo Player SDK for Androidからレンダリングビューのコードを削除し、新しいバージョンのApsaraVideo Player SDK for Androidに複数のレンダリングビューのコードを追加する必要があります。 サンプルコード:

      表示コード

      /*
      Delete the following code.
          The following lines of code of the earlier version of ApsaraVideo Player SDK for Android configure a render view. The following code adds a render view to FrameLayout and removes or adds mPlayerViewContainer when you switch the video source. 
      */
      private void initPlayer() {
          //...
          mPlayerViewContainer = View.inflate(getContext(), R.layout.layout_player_view, null);
          FrameLayout frameLayout = mPlayerViewContainer.findViewById(R.id.framelayout);
          FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
          FrameLayout.LayoutParams.MATCH_PARENT);
          View renderView = createRenderView(Common.RENDER_VIEW_NAME);
          frameLayout.addView(renderView, 0, params);
          //...
      }
      
      /*
      Add or modify the following code to add multiple render views.
          Modify the layout of items in RecyclerView and ViewHolder.
      */
      
      public final class MyHolder extends RecyclerView.ViewHolder {
          //...
          private Surface mSurface;
          MyHolder(@NonNull View itemView) {
              super(itemView);
              //...
              TextureView mTextureView = itemView.findViewById(R.id.texture_view);
              mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
                  @Override
                  public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
                      mSurface = new Surface(surface);
                  }
      
                  @Override
                  public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}
      
                  @Override
                  public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
                      mSurface = null;
                      return false;
                  }
      
                  @Override
                  public void onSurfaceTextureUpdated(SurfaceTexture surface) {}
              });
          }
          //...
      
          // Add the getSurface operation. This operation is publicly accessible.
          public Surface getSurface() {
              return mSurface;
          }
      }

      次のサンプルコードは、RecyclerViewのアイテムのレイアウトを変更する方法の例を示しています。

      表示コード

      <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/root_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@android:color/black">
      
          <TextureView
              android:id="@+id/texture_view"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      <!  -- Delete the thumbnail. If a black screen appears, you can retain the logic related to the thumbnail.   -->
      <!--    <FrameLayout-->
      <!--        android:id="@+id/player_view"-->
      <!--        android:layout_width="match_parent"-->
      <!--        android:layout_height="match_parent"-->
      <!--        android:clickable="false"-->
      <!--        android:clipChildren="false"-->
      <!--        android:focusable="false">-->
      
      <!--        <ImageView-->
      <!--            android:id="@+id/img_thumb"-->
      <!--            android:layout_width="match_parent"-->
      <!--            android:layout_height="match_parent"-->
      <!--            android:layout_gravity="center"-->
      <!--            android:adjustViewBounds="true"-->
      <!--            android:clickable="false"-->
      <!--            android:focusable="false"-->
      <!--            android:scaleType="fitXY" />-->
      
      <!--    </FrameLayout>-->
      
      </FrameLayout>
    2. ビデオソースを切り替えるロジックを変更します。

      ApsaraVideo Player SDK for Android V5.5.2.0以降では、moveToNextを呼び出すとpreRenderPlayerメソッドが呼び出されます。 レンダリングビューに対して個別のロジックを構成する必要があります。 moveToNextmoveToPre、およびmoveTo操作のロジックは異なります。 サンプルコード:

      表示コード

      /*
          Note: mQuickPlayer is an instance of the AlivcQuickPlayer class and AlivcQuickPlayer encapsulates the ListPlayer operation. 
      */
      private void startPlay(int position, boolean isInitComplete) {
          //...
          // Query the ViewHolder instance based on the value of the position parameter.
          LittleVideoListAdapter.MyHolder holder = (LittleVideoListAdapter.MyHolder) recycler.findViewHolderForLayoutPosition(position);
      
          //...
      
          // 1. Specify Surface before you call the moveToPre operation.
          if (holder != null) {
              mQuickPlayer.setSurface(holder.getSurface());
          }
          mQuickPlayer.moveToPrev(video, position, mVideoSourceType);
      
          // 2. Specify Surface before you call the moveTo operation.
          if (holder != null) {
              mQuickPlayer.setSurface(holder.getSurface());
          }
          // Use mQuickPlayer.startPlay to call the moveTo operation in ApsaraVideo Player SDK.
          mQuickPlayer.startPlay(video, position, mVideoSourceType);
      
          // 3. Add a parameter to pass the value of Surface when you call the moveToPre operation.
          mQuickPlayer.moveToNext(video, position, mVideoSourceType, holder.getSurface());
      
          //...
      }

      次のサンプルコードは、AlivcQuickPlayerクラスのロジックを変更する方法の例を示しています。

      表示コード

      // Modify the logic of the moveToPre operation.
      public void moveToPrev(AlivcVideoInfo.Video source, final int position, VideoSourceType videoSourceType) {
          //...
          // Add the following code to your SDK.
          mVideoListPlayer.clearScreen();
          if (videoSourceType == VideoSourceType.TYPE_STS) {
              mVideoListPlayer.moveToPrev(createStsInfo(source));
          } else {
              mVideoListPlayer.moveToPrev();
          }
      }
      
      // Add a reload method for the moveToNext operation.
      public void moveToNext(AlivcVideoInfo.Video source, int position, VideoSourceType videoSourceType, Surface surface) {
          //...
          // Obtain and use the preRenderPlayer instance for playback when you call the moveToNext operation.
          IPlayer preRenderPlayer = mVideoListPlayer.getPreRenderPlayer();
          if (preRenderPlayer != null) {
              preRenderPlayer.clearScreen();
              preRenderPlayer.setSurface(surface);
              preRenderPlayer.start();
              mVideoListPlayer.setSurface(null);
          } else {
              mVideoListPlayer.clearScreen();
              mVideoListPlayer.setSurface(surface);
          }
      
          // Configure the STS-based playback.
          if (videoSourceType == VideoSourceType.TYPE_STS) {
              // If preRenderPlayer exists, call moveToNextWithPrerendered to play videos.
              if (preRenderPlayer != null) {
                  mVideoListPlayer.moveToNextWithPrerendered(createStsInfo(source));
              } else {
                  mVideoListPlayer.moveToNext(createStsInfo(source));
              }
          } else {
              // Configure the URL-based playback.
              if (preRenderPlayer != null) {
                  mVideoListPlayer.moveToNextWithPrerendered();
              } else {
                  mVideoListPlayer.moveToNext();
              }
          }
      }
    3. オプション: プレイリスト再生のロジックを変更します。

      プレイリストの再生のロジックを変更して、次のビデオのビューの半分が表示されたときに、次のビデオの再生を開始することができます。 PagerLayoutManagerクラスのコードを変更して、次のビデオのビューの半分がRecyclerViewに表示されたときにビデオソースを切り替えます。 サンプルコード:

      表示コード

      recyclerView.addOnScrollListener(new OnScrollListener() {
          private int measuredHeight;
          private int mScrollDiff;
          @Override
          public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
              super.onScrollStateChanged(recyclerView, newState);
      
              if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                  measuredHeight = recyclerView.getMeasuredHeight();
                  mScrollDiff = 0;
              }
      
              if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                  mScrollDiff = 0;
                  View viewIdle = mPagerSnapHelper.findSnapView(PagerLayoutManager.this);
                  if (viewIdle == null) {
                      return;
                  }
                  int positionIdle = getPosition(viewIdle);
                  if (mOnViewPagerListener != null && getChildCount() == 1 && mOldPosition != positionIdle) {
                      mOnViewPagerListener.onPageSelected(positionIdle, positionIdle == getItemCount() - 1, viewIdle);
                      mOldPosition = positionIdle;
                  }
              }
          }
      
          @Override
          public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
              super.onScrolled(recyclerView, dx, dy);
              if (measuredHeight > 0 && mOnViewPagerListener != null) {
                  mScrollDiff += dy;
                  changeVideoAfterScrolled(recyclerView, dy >= 0);
              }
          }
      
          private void changeVideoAfterScrolled(RecyclerView recyclerView, boolean isNext) {
              if (Math.abs(mScrollDiff) >= measuredHeight / 2) {
                  View snapView = mPagerSnapHelper.findSnapView(PagerLayoutManager.this);
                  if (snapView != null) {
                      int position = getPosition(snapView);
                      if (mOldPosition != position) {
                          if (isNext) {
                              mOnViewPagerListener.onPageHideHalf(position - 1);
                          } else {
                              mOnViewPagerListener.onPageHideHalf(position + 1);
                          }
                          mOnViewPagerListener.onPageSelected(position, false, snapView);
                          mOldPosition = position;
                          recyclerView.smoothScrollToPosition(position);
                          mScrollDiff = 0;
                      }
                  }
              }
          }
      });

透明度設定のビデオを再生する

説明

ApsaraVideo Player SDKは、アルファチャンネルを使用した動画のレンダリングをサポートし、背景が透明な動的ギフト動画を再生します。 このようにして、誰かがストリーミングしているときにライブビデオコンテンツをブロックすることなく、ギフトの動的効果を表示できます。 これにより、視聴とインタラクティブな体験が大幅に向上します。

制限事項

ApsaraVideo MediaBox SDK V6.8.0以降およびApsaraVideo Player SDK V6.9.0以降を使用して、ビデオを透明にレンダリングできます。

メリット

透明なMP4ビデオを使用して、背景が透明なダイナミックギフトビデオを再生できます。 これにより、動的エフェクトとビデオ互換性のパフォーマンスが向上し、ビデオサイズが縮小され、開発が簡素化されます。 これはまた、ギフト効果の視聴体験を最適化し、ユーザーエクスペリエンスを向上させます。 透明性のあるMP4ビデオを使用してダイナミックギフトビデオを再生すると、次の利点があります。

  1. より高いビデオ品質: MP4ビデオを使用して、元の画像の詳細や色など、元の品質で動的なギフト効果を表示できます。 APNやIXDなどの他のビデオフォーマットと比較して、MP4はデザイナーが意図した元の品質で動的効果を表示できます。

  2. ビデオサイズが小さい: APNGやIXDなどの他のビデオフォーマットと比較して、MP4はより効率的な方法でファイルサイズを縮小します。 これにより、負荷が加速され、ネットワーク帯域幅の消費が削減されます。

  3. より良い互换性: MP4は、さまざまなデバイスやブラウザで広くサポートされている一般的なビデオフォーマットです。 主流のデバイスでギフトエフェクトとして使用されるMP4ビデオを再生できます。

  4. より高い開発効率: ダイナミックギフトビデオとしてMP4ビデオを使用するソリューションには、簡単な開発が必要です。 複雑な解析およびレンダリングロジックを研究および開発する代わりに、開発者は他の機能の実装に集中して開発効率を向上させることができます。

サンプルコード

setAlphaRenderMode操作が追加されました。 この操作では、ビデオ素材のアルファチャンネルの位置を指定します。 たとえば、ビデオ素材の上部、下部、左側、または右側にアルファチャンネルを配置できます。 デフォルトでは、値はNoneに設定されています。

説明
  • マテリアルのアルファチャンネルの位置は、setAlphaRenderMode操作を呼び出すときに指定した位置と同じである必要があります。

  • ビューのサイズは、マテリアルの解像度に比例する必要があります。

/**
 * Set the alpha rendering mode.
 *
 * @param alphaRenderMode The mirroring mode. See {@link AlphaRenderMode}. 
 */
/****
 * Set a alpha render mode
 *
 * @param alphaRenderMode The specified alpha render mode. See {@link AlphaRenderMode}.
 */
abstract public void setAlphaRenderMode(AlphaRenderMode alphaRenderMode);
//--------------Configure the view-------------
// Configure a transparent view.
//TextureView
TextureView aliplayerView; // The view used for playback.
aliplayerView.setOpaque(false);

//SurfaceView
SurfaceView aliplayerView; // The view used for playback.
aliplayerView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
aliplayerView.setZOrderOnTop(true); // Display SurfaceView at the top of the window.

//-----------Configure AliPlayer-----------
// Set the alpha mode.
aliplayer.setAlphaRenderMode(IPlayer.AlphaRenderMode.RENDER_MODE_ALPHA_AT_RIGHT);
// Specify the material that corresponds to the alpha mode.
UrlSource urlSource = new UrlSource();
urlSource.setUri("https://alivc-player.oss-cn-shanghai.aliyuncs.com/video/%E4%B8%9A%E5%8A%A1%E9%9C%80%E6%B1%82%E6%A0%B7%E6%9C%AC/alpha%E9%80%9A%E9%81%93/alpha_right.mp4");
aliplayer.setDataSource(urlSource);
aliplayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
    @Override
    public void onCompletion() {
        // Optional. If a connection error occurs when the playback of videos in a player instance is complete, you can clear the view.
        aliplayer.clearScreen();
    }
}
aliplayer.setAutoPlay(true);
aliplayer.prepare();

外部字幕の設定

ApsaraVideo Player SDK for Androidを使用すると、ビデオのSRT、SSA、ASS、またはVTT形式の外部字幕を追加または切り替えることができます。 サンプルコード:

  1. 字幕を表示するビューを作成します。

    異なる形式の字幕に対して異なるビューを作成する必要があります。

    表示コード

    // Create a view that displays subtitles in the SRT or VTT format.
    SubtitleView subtitleView = new SubtitleView(getContext());
    // Create a view that displays subtitles in the ASS or SSA format.
    AssSubtitleView assSubtitleView = new AssSubtitleView(getContext());
    // Add the view that displays subtitles to the layout view.
    viewGroup.addView(assSubtitleView);
  2. 字幕のリスナーを設定します。

    表示コード

    mAliPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleExtAdded(int trackIndex, String url) { }
    
        @Override
        public void onSubtitleShow(int trackIndex, long id, String data) {
                // Listen for the display of subtitles in the ASS format.
            assSubtitleView.show(id,data);
    
            // Listen for the display of subtitles in the SRT format.
            SubtitleView.Subtitle subtitle = new SubtitleView.Subtitle();
            subtitle.id = id + "";
            subtitle.content = data;
            subtitleView.show(subtitle);
    
        }
    
        @Override
        public void onSubtitleHide(int trackIndex, long id) {
                // Listen for the hiding of subtitles in the ASS format.
                assSubtitleView.dismiss(id);
    
            // Listen for the hiding of subtitles in the SRT format.
            subtitleView.dismiss(id + "");
        }
    
        @Override
        public void onSubtitleHeader(int trackIndex, String header) { }
    });
  3. 字幕の追加

    mAliPlayer.addExtSubtitle(url);
  4. 字幕を表示または非表示にします。

    onSubtitleExtAddedコールバックを受け取ったら、次のいずれかの方法を使用して字幕を表示または非表示にできます。

    //trackIndex: specifies whether to display subtitles. If the value is true, subtitles are displayed. If the value is false, subtitles are hidden.
    mAliPlayer.selectExtSubtitle(trackIndex, true);

オーディオのみの再生を有効にする

ビデオ画像の表示機能を無効にして、オーディオのみの再生を有効にすることができます。 prepareメソッドを呼び出す前に、PlayerConfigクラスを設定します。

PlayerConfig config = mAliPlayer.getConfig();
config.mDisableVideo = true; // Enable audio-only playback.
mAliPlayer.setConfig(config);

ソフトウェアデコードとハードウェアデコードの切り替え

説明

デコード方法を変更する場合は、再生開始前に変更してください。 再生中に行われた変更は有効になりません。

ApsaraVideo Player SDK for Androidは、H.264およびH.265標準に基づくハードウェアデコードをサポートしています。 enableHardwareDecoderを呼び出して、ハードウェアデコード機能を有効または無効にすることができます。 デフォルトでは、ハードウェアデコードが有効になっています。 ハードウェアデコードの初期化に失敗した場合は、ソフトウェアデコードに切り替えて正常な再生を保証します。 サンプルコード:

// Enable hardware decoding. Hardware decoding is enabled by default.
mAliyunVodPlayer.enableHardwareDecoder(true);

ハードウェアデコードをソフトウェアデコードに切り替えると、onInfoコールバックが呼び出されます。 サンプルコード:

mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
            // 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.
 AliPlayerGlobalSettings.setAdaptiveDecoderGetBackupURLCallback(new AliPlayerGlobalSettings.OnGetBackupUrlCallback() {
    @Override
    public String getBackupUrlCallback(int oriBizScene, int oriCodecType, String original_url) {
        String kurl = original_url;
        if (!H265toH264Map.get(kurl).isEmpty()) {
            return H265toH264Map.get(kurl);
        } else {
            return "";
        }
    }
});

アダプティブビットレートストリーミングの有効化

説明
  • ApsaraVideo VODトランスコードテンプレートグループを使用して、ビデオをHTTP Live Streaming (HLS) アダプティブビットレートストリームにトランスコードできます。 詳細については、「ApsaraVideo VODによるアダプティブビットレートストリーミングの実装」をご参照ください。

  • ApsaraVideo VODによってトランスコードされるアダプティブビットレートストリームにVidベースの再生を使用する場合、デフォルトの再生定義としてAUTOを指定する必要があります。 このようにして、プレーヤーは適応ビットレートストリームを取得して再生できます。 デフォルトの再生定義としてAUTOを指定しない場合、プレーヤーは自動的にビデオストリームを低解像度で再生します。 ビデオ定義に基づく再生順序の詳細については、「ビデオ解像度に関するよくある質問」をご参照ください。 次のサンプルコードは、VidAuthベースの再生の既定の再生定義を指定する方法の例を示しています。

    VidAuth vidAuth = new VidAuth();
    List<Definition> list = new ArrayList<>();
    list.add(Definition.DEFINITION_AUTO);
    vidAuth.setDefinition(list);

ApsaraVideo Player SDK for Androidは、HLSまたはDASHビデオストリームのアダプティブビットレートストリーミングをサポートしています。 prepareメソッドが呼び出された後、getMediaInfoを呼び出して、TrackInfoで示されるビットレート情報を取得します。 サンプルコード:

List<TrackInfo> trackInfos  = aliyunVodPlayer.getMediaInfo().getTrackInfos();

再生中に、selectTrackメソッドを呼び出してビットレートを切り替えることができます。 AUTO_SELECT_INDEXを指定した場合、適応ビットレートストリーミングが有効になります。 サンプルコード:

int index = trackInfo.getIndex();
// Switch the bitrate.
aliyunVodPlayer.selectTrack(index);
// Enable adaptive bitrate streaming.
aliyunVodPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX);

切り替え結果は、OnTrackChangedListenerコールバックで返されます。 selectTrackメソッドを呼び出す前に、OnTrackChangedListenerコールバックを設定する必要があります。 サンプルコード:

aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
    @Override
    public void onChangedSuccess(TrackInfo trackInfo) {
        // The bitrate switching is successful.
    }
    @Override
    public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
        // The bitrate switching fails. You can call the errorInfo.getMsg() method to find the cause of the failure.
    }
});

スナップショットの取得

ApsaraVideo Player SDK for Androidは、ビデオのスナップショットをキャプチャするためのスナップショット方法を提供します。 スナップショットをキャプチャすると、プレーヤーはキャプチャするビデオイメージのソースデータを保存し、ソースデータをビットマップに変換します。 次に、OnSnapShotListenerを呼び出してビットマップを取得します。 サンプルコード:

// Set the callback for snapshot capture.
aliyunVodPlayer.setOnSnapShotListener(new OnSnapShotListener(){
    @Override
    public void onSnapShot(Bitmap bm, int with, int height){
        // Obtain the bitmap and the width and height of the video image. 
    }
});
// Capture a snapshot of the current video image.
aliyunVodPlayer.snapshot();

ビデオプレビューの設定

ApsaraVideo Player SDK for Androidは、ApsaraVideo VODの特定の設定を統合してビデオプレビューをサポートします。 VidStsとVidAuthのソースのみをプレビューできます。 ApsaraVideo VODでVidAuthソースのみをプレビューすることを推奨します。 プレビュー機能を設定および使用する方法の詳細については、「プレビュー機能の設定」をご参照ください。

プレビュー機能を有効にした後、VidPlayerConfigGen.setPreviewTime() メソッドを呼び出して、プレビュー期間を指定できます。 次のサンプルコードは、VidStsベースの再生のプレビュー期間を指定する方法の例を示しています。

VidSts vidSts = new VidSts;
....
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
configGen.setPreviewTime(20); // Set the preview duration to 20s.
vidSts.setPlayConfig(configGen); // Specify the video source.
...

プレビュー期間を指定すると、ApsaraVideo Player SDK for Androidは、ビデオ全体ではなく、指定された期間持続するビデオのプレビューを生成します。

説明
  • VidPlayerConfigGenを呼び出して、サーバーでサポートされているリクエストパラメーターを設定できます。 詳細は、「リクエストパラメーター」をご参照ください。

  • プレビュー機能は、Flash Video (FLV) およびMP3ファイルではサポートされていません。

ブラックリストの設定

ApsaraVideo Player SDK for Androidでは、ハードウェアデコード用のブラックリストを設定できます。 デバイスでハードウェアのデコードが許可されていない場合は、ソフトウェアのデコードを使用して、デコードの失敗を防ぐことができます。 サンプルコード:

DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.model="Lenovo K320t";
AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );
説明

アプリケーションが終了すると、ブラックリストは無効になります。

リファラーの設定

ApsaraVideo Player SDK for Androidには、リクエストリファラーを設定するためのPlayerConfigクラスが用意されています。 ApsaraVideo VODコンソールで設定されたリファラーホワイトリストまたはブラックリストと一緒にリファラーを使用して、アクセス制御を実装できます。 サンプルコード:

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Set the referer. Example: http://example.aliyundoc.com. You must add the protocol header when you set the referer.
config.mReferrer = referrer;
....// Configure other settings.
  // Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);

User-Agentヘッダーの指定

ApsaraVideo Player SDK for Androidは、リクエストユーザーエージェントを指定するためのPlayerConfigクラスを提供します。 ユーザーエージェントを指定すると、プレイヤーはリクエストにユーザーエージェント情報を含めます。 サンプルコード:

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Set the user agent.
config.mUserAgent = "Required user agent";
....// Configure other settings.
  // Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);

ネットワークのタイムアウト期間とリトライ回数の設定

ApsaraVideo Player SDK for Androidは、ネットワークのタイムアウト期間と再試行回数を設定するためのPlayerConfigクラスを提供しています。 サンプルコード:

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Specify the network timeout period. Unit: milliseconds.
config.mNetworkTimeout = 5000;
// Specify the maximum number of retries upon a network timeout. The retry interval equals the timeout period specified by the NetworkTimeout parameter. The NetworkRetryCount parameter specifies the number of retries. A value of 0 indicates zero retry. The application determines the number of retries. Default value: 2.
config.mNetworkRetryCount=2;
....// Configure other settings.
  // Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
説明
  • NetworkRetryCountパラメーターを0以外の値に設定した場合、ネットワークエラーが原因でプレーヤーがデータの読み込みを開始したときに、プレーヤーは再生を再試行します。 再試行の最大数は、NetworkRetryCountパラメーターの値に等しくなります。 再試行間隔は、NetworkTimeoutパラメーターの値に等しくなります。

  • 再試行の最大数に達しても読み込みが続く場合、onErrorメソッドによってコールバックが呼び出されます。 この場合、ErrorInfo.getCode() メソッドはErrorCode.ERROR_LOADING_TIMEOUTを返します。

  • NetworkRetryCountパラメーターを0に設定すると、ネットワークタイムアウトが発生したときにonInfoメソッドによってコールバックが呼び出されます。 この場合、InfoBean.getCode() はInfoCode.NetworkRetryを返す。 この問題を解決するには、ApsaraVideo Player SDK for Androidのreloadメソッドを呼び出して、ネットワークパケットをリロードしたり、必要に応じて他の操作を実行したりできます。

バッファとレイテンシの制御

ApsaraVideo Player SDK for Androidは、バッファーとレイテンシの設定を行うためのPlayerConfigクラスを提供します。 サンプルコード:

表示コード

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Set the maximum latency. This parameter is valid only for live streaming. If the latency is excessively high, ApsaraVideo Player SDK synchronizes frames to ensure that the latency does not exceed the limit. 
config.mMaxDelayTime = 5000;
// Set the maximum buffer duration. Unit: milliseconds. This parameter specifies the maximum buffer duration for the player to load data at a time. 
config.mMaxBufferDuration = 50000;
// Set the peak buffer duration. Unit: milliseconds. When the network conditions are poor, the player stops loading data after the peak buffer duration elapses. 
config.mHighBufferDuration = 3000;
// Set the startup buffer duration. Unit: milliseconds. A smaller value indicates a shorter startup duration. In this case, the player starts to load data soon after the playback starts. 
config.mStartBufferDuration = 500;
....// Configure other settings.
// Set the maximum cache duration. Unit: milliseconds. Default value: 0. 
config.mMaxBackwardBufferDurationMs = 0;

// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);

重要
  • バッファ持続時間が、mStartBufferDuration ≦ mHighBufferDuration ≦ mMaxBufferDurationの条件を満たすことを確認する。

  • mMaxBufferDurationパラメーターを5分を超える値に設定した場合、システムは最大5分のバッファー持続時間を使用して、バッファーサイズが過剰になったためにメモリ例外が発生しないようにします。 mMaxBufferDurationパラメーターを50,000 ms (50秒) を超える値に設定すると、大容量キャッシュを有効にしてメモリ使用量を減らし、再生パフォーマンスをさらに向上させることができます。 詳細については、「ラージキャッシュの設定」をご参照ください。

HTTP ヘッダーの設定

ApsaraVideo Player SDK for Androidは、リクエストにHTTPヘッダーを追加するためのPlayerConfigクラスを提供します。 サンプルコード:

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Define a header.
String[] headers = new String[1];
headers[0]="Host:example.com"; // For example, add the host information to the header. 
// Configure the headers.
config.setCustomHeaders(headers);
....// Configure other settings.
  // Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);

代替RTS URLの設定

再生劣化は、リアルタイムストリーミング (RTS) によってサポートされる。 HLSまたはFLV形式の再生URLなど、代替のRTS URLを指定できます。 RTS経由のストリームプルが失敗すると、このURLで指定されたビデオが自動的に再生されます。 サンプルコード:

PlayerConfig config = player.getConfig();
// Optional. Configure playback degradation.
UrlSource urlSource = new UrlSource();
urlSource.setUri(downgradeUrl);
// Specify an alternative RTS URL.
player.enableDowngrade(urlSource, config);

RTS再生の劣化を有効にする

RTS再生の劣化機能を有効にしても、ブラウザがRTSをサポートしていない場合、またはRTSを介したストリームのプルが失敗した場合、システムは自動的に劣化したプロトコルを介してストリームを再生します。 サンプルコード:

// 1 indicates that the RTS playback degradation feature is enabled and 0 indicates that the RTS playback degradation feature is disabled. The RTS playback degradation feature is enabled by default.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.ALLOW_RTS_DEGRADE, 1);

左右のオーディオチャンネルを切り替える

outputAudioChannelは、出力オーディオチャネルを指定します。 入力ファイルに2つのオーディオチャンネルが含まれている場合にのみ、左右のオーディオチャンネルを切り替えることができます。 入力ファイルにオーディオチャネルが1つしか含まれていない場合、outputAudioChannel設定は無効です。

説明

次の出力チャネル設定は、オーディオレンダリングとPCMデータコールバックの両方に影響します。

/*
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_LEFT to use the left audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_RIGHT to use the right audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_NONE to use the audio channel settings of the input file.
*/
player.setOutputAudioChannel();

オーディオストリームの解析

オーディオおよびビデオストリームに関する情報を取得するようにリスナーを設定できます。 暗号化されたオーディオおよびビデオストリームは解析できません。

表示コード

// Optional. Specify whether to return the address of the underlying data.
IPlayer.RenderFrameCallbackConfig config = new IPlayer.RenderFrameCallbackConfig();
config.mVideoDataAddr = true;// Specify whether to return only the address of the underlying video data.
config.mAudioDataAddr = true;// Specify whether to return only the address of the underlying audio data.
player.setRenderFrameCallbackConfig(config);

// Optional. Return texture_oes_id for RenderFrame after hardware decoding and return the source data for RenderFrame after software decoding.
player.enableHardwareDecoder(true);
// Configure a listener to obtain information about audio and video streams.
player.setOnRenderFrameCallback(frameInfo -> {
    if (frameInfo.frameType == FrameInfo.FrameType_video) {
        // The video data.
    } else {
        // The audio data.
    }
    return false;
});

プレーヤーの背景色を設定する

ApsaraVideo Player SDK for Androidは、プレーヤーのレンダリングの背景色を設定する方法を提供します。 次のサンプルコードは、メソッドを宣言して呼び出す方法の例を示しています。

Declare the method

/**
 * Set the background color of the video.
 *
 * @param color  ARGB
 *
 */
/****
 * Set video background color
 * @param color  ARGB
 */
abstract public void setVideoBackgroundColor(int color);

メソッドの呼び出しCall the method

// The parameter value is an eight-digit hexadecimal ARGB color value. The first two digits of an eight-digit ARGB color value represent alpha, the next two represent red, the next two represent green, and the last two represent blue.
// For example, a value of 0x0000ff00 specifies green.
player.setVideoBackgroundColor(0x0000ff00);

vidAuthベースの再生のドメイン名の指定

再生にvidAuthを使用する場合は、ドメイン名などのパラメーターを指定できます。 パラメーターの詳細については、「GetPlayInfo」をご参照ください。 次のコンテンツでは、vidAuthベースの再生のドメイン名を指定する方法とサンプルコードを示します。

サンプルコード

/**
 * Specify the playback parameters.
 *
 * @param playConfig The playback parameters.
 */
public void setPlayConfig(VidPlayerConfigGen playConfig);

使用上の注意

VidPlayerConfigGenでaddPlayerConfigを呼び出すときにplayDomainパラメーターを指定します。

vidAuth = new VidAuth();
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
// 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
configGen.addPlayerConfig("playDomain", "com.xxx.xxx");
vidAuth.setPlayConfig(configGen);

パフォーマンスの設定

事前レンダリングの設定

ApsaraVideo Player SDK for Androidは、再生開始前の最初のフレームのプレレンダリングをサポートしています。 サンプルコード:

player.setOption(ALLOW_PRE_RENDER, 1);

ローカルキャッシュの設定

ApsaraVideo Player SDK for Androidを使用すると、再生中にビデオをキャッシュできます。 これにより、起動ロード時間が短縮され、シークプロセスが加速され、再生待ち時間が短縮され、ループ再生中のトラフィック消費が削減されます。

ローカルキャッシュの有効化

デフォルトでは、ローカルキャッシュ機能は無効になっています。 この機能を使用するには、有効にする必要があります。 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 local caching 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 or later.
 *  @param localCacheDir - The directory of the cached file, which is an absolute path. 
 */
public static void enableLocalCache(boolean enable,
                                    int maxBufferMemoryKB,
                                    java.lang.String localCacheDir)

 /**
  * Configure settings for clearing cached files. 
  *
  * @param expireMin - This parameter is deprecated in V5.4.7.1 or later. 
  * @param maxCapacityMB - The maximum cache size. Unit: MB. By default, the maximum cache size is 20 GB. If the specified maximum size is exceeded, the system deletes cached files based on the time when the file is cached until the cache size is less than or equal to the specified maximum size. The system preferentially deletes the earliest cache files. 
  * @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 idle space, the system deletes cached files based on the time when the file is cached until the idle space of the disk is greater than or equal to the specified minimum idle space. The system preferentially deletes the earliest cache files. 
  */
 public static void setCacheFileClearConfig(long expireMin,
                                           long maxCapacityMB,
                                           long freeStorageMB)

  /**
   * Configure the callback for the URL hash value of a video file. If you do not configure the callback, the SDK calculates the URL hash value by using the MD5 algorithm. 
   */
  public static void setCacheUrlHashCallback(AliPlayerGlobalSettings.OnGetUrlHashCallback cb)
説明
  • ビデオファイルの再生URLに認証パラメータが含まれている場合、認証パラメータの値は、ビデオファイルのローカルキャッシュおよび再生中に変更されます。 認証パラメーターを削除した後、setCacheUrlHashCallback操作を呼び出してMD5ハッシュ値を計算できます。 たとえば、http:// ****.mp4?aaaは、認証パラメーターを含むビデオファイルの再生URLです。 この場合、URL http:// ****.mp4は、ビデオファイルがロードされるときにMD5ハッシュ値を計算するために使用されます。 ただし、暗号化されたM3U8ビデオのキーURLの認証パラメーターを削除した後にMD5ハッシュ値を計算すると、同じキーURLが異なるビデオにヒットするため、再生は失敗します。 解決策: setCacheUrlHashCallbackコールバックのキーURL http(s):// yyyy?bbbbではなく、再生URL http(s):// xxxxx.m3u8?aaaaからのみ認証パラメーターを削除します。进阶功能-本地缓存.png

  • サーバーがHTTPとHTTPSをサポートしており、同じ要素で異なるプロトコルを持つ2つのURLを使用してビデオファイルを指定できる場合は、URLのプロトコルヘッダーを削除するか、HTTPまたはHTTPSプロトコルを使用してMD5ハッシュ値を計算できます。 例:

    • ビデオファイルの再生URLがhttps:// ****.mp4およびhttp:// ****.mp4の場合、MD5ハッシュ値は、ビデオファイルのロード時に ****.mp4を使用して計算されます。

    • ビデオファイルの再生URLがhttps:// ****.mp4の場合、MD5ハッシュ値は、ビデオファイルのロード時にURL http:// ****.mp4を使用して計算されます。

  • ApsaraVideo Player SDK V5.5.4.0以降の場合、再生URLに認証パラメーターが含まれているHLSストリームを再生する場合は、PlayerConfig.mEnableStrictAuthModeを設定して認証モードを指定します。 デフォルトでは、PlayerConfig.mEnableStrictAuthModeはfalseに設定されています。 PlayerConfig.mEnableStrictAuthModeの有効な値:

    • false: ビデオコンテンツをキャッシュし、認証を実行します。 ビデオが完全にキャッシュされていない場合、プレーヤーは、キャッシュされていないビデオコンテンツを再生するときに、キャッシュされたコンテンツに関する認証情報を使用してURL署名要求を送信します。 署名付きURLの有効期間が短すぎると、再生エラーが発生します。

    • true: 認証を実行し、ビデオコンテンツをキャッシュしません。 再生ごとにURL署名が必要です。 ネットワーク接続が再生の失敗につながることはありません。

単一URLのローカルキャッシュの有効化または無効化

player configでは、単一のURLに対してローカルキャッシュを有効または無効にできます。

// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Configure whether to enable local caching for the playback URL. Default value: true. Local caching for the URL takes effect only when local caching is enabled in AliPlayerGlobalSettings and the value of this parameter is true. If the value of this parameter is false, the local caching for the URL is disabled. 
config.mEnableLocalCache = false;
....// Configure other settings.

// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);

デフォルトのキャッシュパスを使用

次のサンプルコードでは、デフォルトのキャッシュパスを使用するようにAliPlayerGlobalSettingsを設定する方法について説明します。

/**
 * Enable local caching. After this feature is enabled, a media file is cached on your device. 
 * @param enable true: enables local caching. false: disables local caching. Default value: false. 
 */
/****
 * Enable local cache. When enabled, it will be cached in local files.
 * @param enable true: enables the local cache. false: disable. This function is disabled by default.
 * @param context The context.
 */
public static String enableLocalCache(boolean enable, Context context)

大容量キャッシュの設定

再生中にビデオデータをメモリにキャッシュする最大バッファ時間を設定できます。これにより、再生パフォーマンスとユーザーエクスペリエンスが向上します。 最大バッファ持続時間が大きすぎると、バッファは過剰なメモリを消費する。 大容量キャッシュ機能を使用してファイル内のビデオデータをキャッシュできます。これにより、メモリ使用量が削減され、プレーヤーのパフォーマンスがさらに向上します。

mMaxBufferDurationが50,000ミリ秒を超える場合、ローカルキャッシュを有効にして、大きなキャッシュを自動的にトリガーできます。 手順:

  1. グローバルローカルキャッシュ機能を有効にします。

    デフォルトでは、ローカルキャッシュ機能は無効になっています。 この機能を使用するには、手動で有効にする必要があります。 AliPlayerGlobalSettingsクラスでenableLocalCacheを呼び出して、ローカルキャッシュを有効にします。 サンプルコードの詳細については、このトピックの「ローカルキャッシュの構成」をご参照ください。

  2. URLのローカルキャッシュを有効にします。

    サンプルコードの詳細については、このトピックの「単一URLのローカルキャッシュの有効化または無効化」をご参照ください。

  3. 大容量キャッシュを有効にします。 サンプルコード:

    AliPlayerGlobalSettings.enableBufferToLocalCache(true);

ビデオプリロードの設定

ApsaraVideo Player SDK for Androidは、ローカルキャッシング機能のアップグレードであるビデオプリロードをサポートしています。 ビデオプリロード機能を使用すると、キャッシュされたビデオが占有できるメモリの最大サイズを指定できます。 これにより、起動時の読み込み時間を短縮できます。

ビデオのプリロード機能には、次の制限があります。

  • 一度にプリロードできるMP4、MP3、FLV、またはHLSファイルは1つだけです。

  • URLに基づいて再生されるビデオのみをプリロードできます。 VidAuthまたはVidStsを使用して再生するビデオをプリロードすることはできません。

説明

デフォルトでは、ApsaraVideo Player SDK for Androidを使用してビデオをプリロードすると、ネットワークリソースのスケジューリングが有効になります。 これにより、再生中のビデオの品質が保証されます。 ネットワークリソースのスケジューリングが有効になっている場合、プリロード要求は、再生されているビデオのバッファリングされたコンテンツが特定の制限に達した後にのみ送信されます。 リアルタイムのプリロードリクエストを管理する場合は、ネットワークリソースのスケジューリングを無効にできます。 サンプルコード:

AliPlayerGlobalSettings.enableNetworkBalance(false);
  1. ローカルキャッシュ機能を有効にします。 詳細については、このトピックの「ローカルキャッシュの構成」をご参照ください。

  2. AliMediaLoaderインスタンスを取得します。

    AliMediaLoaderインスタンスはシングルトンです。 インスタンスの取得時間に関係なく、作成できるAliMediaLoaderインスタンスは1つだけです。

    MediaLoader mediaLoader = MediaLoader.getInstance();
  3. AliMediaLoaderインスタンスを設定します。

    リスナーを設定し、ビデオファイルの読み込みを開始します。

    説明

    prepare in playermediaLoader.loadを同時に呼び出すと、Application Not Responding (ANR) エラーが発生することがあります。 これは、システムが両方の操作ですべてのローカルファイルをトラバースする必要があるためです。 playeronPreparedコールバックが起動された後、読み込みを開始することを推奨します。

    表示コード

    /**
     * Configure listeners for loading status.
     */
    mediaLoader.setOnLoadStatusListener(new MediaLoader.OnLoadStatusListener() {
        @Override
        public void onErrorV2(String url, ErrorInfo errorInfo) {
            // Listen for a loading error.
        }
    
        @Override
        public void onCompleted(String s) {
            // Listen for the end of loading.
        }
    
        @Override
        public void onCanceled(String s) {
            // Listen for the cancellation of loading.
        }
    });
    /**
     * Start to load video files. Asynchronous loading is supported. You can asynchronously load one or more video files at a time. 
     * @param url - The URL of the video file. 
     * @param duration - The loading duration. Unit: milliseconds. 
     */
    mediaLoader.load("url","duration");
  4. オプション: ロードしたビデオファイルを削除します。

    ロードしたビデオファイルを削除して、占有スペースを減らすことができます。 ApsaraVideo Player SDK for Androidは、ロードしたビデオファイルを削除する方法を提供していません。 アプリケーションの対応するディレクトリにあるビデオファイルを削除する必要があります。

動的プリロード

動的プリロード機能を使用すると、再生中のビデオとプリロードされたビデオのキャッシュを管理できます。 プリロードされるビデオの数を制御することもできます。 これは、再生経験とコストのバランスを維持するのに役立ちます。

表示コード

// Enable the dynamic preloading feature and use the default configurations.
ListPlayer.setPreloadScene(IListPlayer.SceneType.SCENE_SHORT);

// Configure the baseline preload duration.
// Set the preload duration to 1,000 milliseconds.
PreloadConfig config = new PreloadConfig();
config.mPreloadDuration = 1000;
ListPlayer.updatePreloadConfig(config);

// Configure the number of videos that you can preload. Forward and backward are supported.
// 1 specifies the number of videos that can be preloaded forwards and 3 specifies the number of videos that can be preloaded backwards.
ListPlayer.setPreloadCount(1, 3);

// Configure the decreasing offset for dynamic preloading.
ListPlayer.enablePreloadStrategy(IListPlayer.StrategyType.STRATEGY_DYNAMIC_PRELOAD_DURATION, true);
ListPlayer.setPreloadStrategy(IListPlayer.StrategyType.STRATEGY_DYNAMIC_PRELOAD_DURATION, "{\"algorithm\": \"sub\",\"offset\": \"200\"}");

マルチビットレートHLSビデオのプリロード

マルチビットレートのHLSビデオの再生中にlistPlayerメソッドを呼び出すと、現在のビデオストリームと同じ定義でビデオをプリロードできます。 ビジネス要件に基づいて、さまざまなプリロードモードを使用できます。

プリローディングモードの表示コード

  /**
   * The default bitrate for playback and preloading.
   */
  /****
   * default mode, play and preload default bitrate of a stream
   */
  MultiBitratesMode_Default(0),

  /**
   * The preloading mode in which the first frame performance has a higher priority. In this case, the preloaded video is played by default.
   */
  /****
   * First frame cost (FC) priority, decrease first frame cost. only play bitrate of the hls stream which has been preloaded.
   */
  MultiBitratesMode_FCPrio(1),

  /**
   * The preloading mode in which the first frame performance and playback smoothness have the same priority. In this case, the same bitrate is used before and after you call the moveToNext method to switch videos.
   */
  /****
   * First frame and play smooth, play the same bitrate before and after moveToNext
   */
  MultiBitratesMode_FC_AND_SMOOTH(2),

  /**
   * The preloading mode in which the playback smoothness has a higher priority. In this case, the bitrate of the previous video is used by default.
   */
  /****
   * Play Smooth priority, play the same bitrate before and after moveToNext.
   */
  MultiBitratesMode_SmoothPrio(3);

Show integration code

// Specify the multi-bitrate preloading mode.
mVideoListPlayer.SetMultiBitratesMode(preLoadMode);


// Optional. Set the starting bitrate.
mVideoListPlayer.setDefaultBandWidth(defaultBandWidth)


// Optional. In the onPrepared callback, specify the abr mode.
mVideoListPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        //abr only effect on multiBitrate m3u8
        mVideoListPlayer.selectTrack(-1);
    }
});

ダウンロード速度を取得する

ApsaraVideo Player SDK for Androidは、指定されたビデオのダウンロード速度を照会するためのgetExtraValueメソッドを提供します。 onInfoコールバックは、クエリ結果を取得するために呼び出されます。 サンプルコード:

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentDownloadSpeed){
            // The download speed.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

ネットワークの設定

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機能は、高速化ドメイン名にのみ使用できます。 この機能を使用する前に、高速化ドメイン名が追加および構成されていることを確認してください。 ApsaraVideo VODでCDNのドメイン名を追加および設定する方法の詳細については、「CDNのドメイン名の追加」をご参照ください。 高速化ドメイン名の詳細については、Alibaba Cloud CDNとは.

// Enable the enhanced HTTPDNS feature.
AliPlayerGlobalSettings.enableEnhancedHttpDns(true);
// Optional. Add an HTTPDNS pre-resolved domain name.
DomainProcessor.getInstance().addPreResolveDomain("player.***alicdn.com");

HTTP/2

説明

デフォルトでは、ApsaraVideo Player SDK for Android V5.5.0.0以降でHTTP/2が有効になっています。

ApsaraVideo Player SDK for Androidは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(AliPlayerGlobalSettings.SET_PRE_CONNECT_DOMAIN, "domain1;domain2");

ビデオダウンロードの設定

ApsaraVideo Player SDK for Androidを使用すると、ローカルデバイスにビデオをダウンロードして、ApsaraVideo Playerでオフライン再生できます。 通常のダウンロードモードと安全なダウンロードモードがサポートされています。

  • 通常のダウンロード

    通常のダウンロードモードでダウンロードされたビデオは、Alibaba Cloudによって暗号化されず、サードパーティのプレーヤーを使用して再生できます。

  • 安全なダウンロード

    セキュアダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されます。 サードパーティのプレーヤーを使用してダウンロードしたビデオを再生することはできません。 ApsaraVideo Playerのみを使用して再生できます。

使用上の注意

  • VidStsまたはVidAuthに基づいて再生されるビデオのみをダウンロードできます。

  • ビデオダウンロード機能を使用するには、ApsaraVideo VODコンソールでこの機能を有効にし、ダウンロードモードを設定する必要があります。 詳細については、「ダウンロード設定の構成」をご参照ください。

  • 再開可能なダウンロードがサポートされています。

手順

  1. オプション:暗号化検証用のセキュリティファイルを設定します。 安全なダウンロードモードを使用する場合にのみ、セキュリティファイルを設定する必要があります。

    説明

    暗号化検証用セキュリティファイルの情報がアプリケーション情報と一致していることを確認してください。 それ以外の場合、ビデオのダウンロードは失敗します。

    セキュアダウンロードモードを使用する場合、ApsaraVideo VODコンソールで生成されるキーファイルをApsaraVideo Player SDKで設定する必要があります。 キーファイルは、ダウンロードと再生のためにビデオを解読して検証するために使用されます。 キーファイルを生成する方法の詳細については、「ダウンロード設定の構成」トピックの安全なダウンロードの有効化セクションをご参照ください。

    キーファイルを1回だけ設定することを推奨します。 サンプルコード:

    PrivateService.initService(getApplicationContext(),  "The path in which the encryptedApp.dat file is stored"); // We recommend that you store the encryptedApp.dat file on your mobile phone and set this parameter to the path in which the file is stored.
  2. ビデオダウンローダーを作成して設定します。

    AliDownloaderFactoryクラスを使用して、ダウンロードオブジェクトを作成します。 サンプルコード:

    AliMediaDownloader mAliDownloader = null;
    ......
    // Create a download object.
    mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
    // Specify the path for storing downloaded files.
    mAliDownloader.setSaveDir("The storage path");
  3. リスナーを設定します。

    ダウンローダは複数のリスナーを提供します。 サンプルコード:

    表示コード

    mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
       @Override
       public void onPrepared(MediaInfo mediaInfo) {
           // Listen for the preparation of the content to be downloaded.
       }
    });
    mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
       @Override
       public void onDownloadingProgress(int percent) {
           // Listen for the percentage of the download progress.
       }
       @Override
       public void onProcessingProgress(int percent) {
           // Listen for the percentage of the processing progress.
       }
    });
    mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
       @Override
       public void onError(ErrorInfo errorInfo) {
           // Listen for download errors.
       }
    });
    mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
       @Override
       public void onCompletion() {
           // Listen for a successful download.
       }
    });
  4. ダウンロードソースを準備します。

    prepareメソッドを呼び出して、ダウンロードソースを準備できます。 VidStsおよびVidAuthソースがサポートされています。 サンプルコード:

    • VidSts

      // Create the VidSts download source.
      VidSts aliyunVidSts = new VidSts();
      aliyunVidSts.setVid("Vid");// The ID of the video. 
      aliyunVidSts.setAccessKeyId("<yourAccessKeyId>");// The AccessKey ID that is generated when the temporary STS token is issued. To generate the AccessKey ID, call the AssumeRole operation in STS. 
      aliyunVidSts.setAccessKeySecret"<yourAccessKeySecret>");// The AccessKey secret that is generated when the temporary STS token is issued. To generate the AccessKey secret, call the AssumeRole operation in STS. 
      aliyunVidSts.setSecurityToken("<yourSecurityToken>");// The STS token. To obtain the STS token, call the AssumeRole operation in STS. 
      aliyunVidSts.setRegion("Access region");// The region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. 
      // Prepare the download source.
      mAliDownloader.prepare(aliyunVidSts)
    • VidAuth

      // Create the VidAuth download source.
      VidAuth vidAuth = new VidAuth();
      vidAuth.setVid("Vid"); // The ID of the video. 
      vidAuth.setPlayAuth("<yourPlayAuth>");// The playback credential. To obtain the playback credential, call the GetVideoPlayAuth operation. 
      vidAuth.setRegion("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.
      mAliDownloader.prepare(vidAuth);
    説明

    出力ファイルと入力ファイルは同じ形式であり、変更できません。

  5. 準備したダウンロードソースからダウンロードするコンテンツを選択します。

    ダウンロードソースの準備が完了すると、OnPreparedListenerコールバックが発生します。 TrackInfoパラメーターの値は、ビデオ定義などのビデオトラックに関する情報を示します。 ダウンロードするトラックを選択します。 サンプルコード:

    public void onPrepared(MediaInfo mediaInfo) {
        // Prepare the content to be downloaded.
        List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
        // Download the information about tracks, such as the first track.
        mAliDownloader.selectItem(trackInfos.get(0).getIndex());
        // Start the download.
        mAliDownloader.start();
    }
  6. オプション。 ダウンロードソースを更新します。

    VidStsまたはVidAuthソースは、ダウンロード前に期限切れになる場合があります。 したがって、ダウンロードを開始する前にダウンロードソースを更新することをお勧めします。 サンプルコード:

    // Update the download source.
    mAliDownloader.updateSource(VidSts);
    // Start the download.
    mAliDownloader.start();
  7. ダウンロードが成功または失敗した後、ダウンロードオブジェクトをリリースします。

    ダウンロードが成功したら、releaseメソッドを呼び出してダウンロードオブジェクトをリリースします。 onCompletionまたはonErrorコールバックが呼び出された後、ダウンロードオブジェクトをリリースできます。 サンプルコード:

    mAliDownloader.stop();
    mAliDownloader.release();
  8. オプション: ダウンロードしたファイルを削除します。

    ダウンロードしたファイルは、ダウンロード中またはダウンロード完了後に削除できます。 サンプルコード:

    // Delete the file by using the download object.
    mAliDownloader.deleteFile();
    // Delete the file by using the static method. If 0 is returned, the file is deleted.
    AliDownloaderFactory.deleteFile("The path of the downloaded file","Video ID","Video format","The index of the downloaded video");

次に何をすべきか

ApsaraVideo Playerを使用してダウンロードしたビデオを再生するには、次の操作を実行します。

  1. ダウンロードしたビデオファイルの絶対パスを取得します。

    String path = mAliDownloader.getFilePath();
  2. UrlSourceをダウンロードしたビデオファイルの絶対パスに設定して、ビデオを再生します。

     UrlSource urlSource = new UrlSource();
            urlSource.setUri("Playback URL");// Specify the absolute path of the downloaded video file. 
            aliPlayer.setDataSource(urlSource);

暗号化されたビデオを再生する

ApsaraVideo Player SDK for Androidでは、HLS暗号化、Alibaba Cloud独自の暗号化、またはデジタル著作権管理 (DRM) 暗号化に基づいて暗号化されたオンデマンドビデオを再生できます。 SDKを使用すると、DRM暗号化のみに基づいて暗号化されたライブストリームを再生できます。 暗号化ビデオの再生方法の詳細については、「暗号化ビデオの再生」をご参照ください。

ネイティブRTS SDKの設定

Android用ApsaraVideo Player SDKをネイティブRTS SDKと統合して、リアルタイムストリーミング (RTS) 機能を使用できます。 詳細については、「Native RTS SDK For Android」をご参照ください。

関連ドキュメント