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

ApsaraVideo VOD:基本機能

最終更新日:Oct 30, 2024

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

プレーヤーを作成する

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

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

    AliPlayerFactoryクラスを呼び出して、AliPlayerオブジェクトを作成します。

    説明

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

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

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

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

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

    // Create a player.
    AliPlayer aliPlayer = AliPlayerFactory.createAliPlayer(context);
    // We recommend that you specify the traceId parameter.
    aliPlayer.setTraceId("traceId");  

    説明

    イベント追跡ログは、中国 (上海) リージョンのポイントオブプレゼンス (POP) にアップロードされます。 シンガポール地域のPOPは今後サポートされる予定です。

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

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

    • OnPreparedListenerを設定する必要があります。 この方法では、OnPreparedListenerコールバックでaliPlayer.start() を呼び出して、手動再生を開始できます。

    • OnErrorListenerOnCompletionListenerOnLoadingStatusListener、およびOnInfoListenerを設定することを推奨します。

    aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        // If an error occurs when you use the player, this callback is returned. 
    
        @Override
        public void onError(ErrorInfo errorInfo) {
            ErrorCode errorCode = errorInfo.getCode() // The error code. 
            String errorMsg =errorInfo.getMsg(); // The error message. 
            // errorExtra indicates the supplementary error message. The value is a JSON string. The following sample code shows the structure of the errorExtra parameter. The value of the ModuleCode field is not the same as the value of the errorCode parameter.
            //{ "Url": "xxx",
       		//	"Module": "NetWork",
        	//	"ModuleCode": "-377",
       		//  "ModuleMessage": "Redirect to a url that is not a media"}
            String errorExtra= errorInfo.getExtra();         
            // Stop the player if an error occurs. 
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        // The player starts to read and parse data after you call the aliPlayer.prepare() method. This callback is returned after data is parsed. 
    
        @Override
        public void onPrepared() {
            // Call the start method to start the playback. 
            aliPlayer.start();
        }
    });
    aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
        // This callback is returned after the playback ends. 
        @Override
        public void onCompletion() {
            // Call the stop method to stop the playback. 
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        // The information about the player, such as the current playback progress and buffer position. 
        @Override
        public void onInfo(InfoBean infoBean) {
            InfoCode code = infoBean.getCode(); // The information code. 
            String msg = infoBean.getExtraMsg(); // The information content. 
            long value = infoBean.getExtraValue(); // The information value. 
    
            // Current progress: InfoCode.CurrentPosition
            // Current buffer position: InfoCode.BufferedPosition
        }
    });
    aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        // The loading status. If the network is unstable, this method is called to display the loading status. 
    
        @Override
        public void onLoadingBegin() {
            // Starts loading. In this case, you cannot play video and audio streams. 
            // The loading circle is displayed. 
        }
    
        @Override
        public void onLoadingProgress(int percent, float netSpeed) {
            // Listen to the loading progress. The loading percentage and network speed are displayed. 
        }
    
        @Override
        public void onLoadingEnd() {
            // Listen to the end of loading. In this case, you can play video and audio streams. 
            // The loading circle is hidden. 
        }
    });
  3. 再生ソースを設定します。

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

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

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

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

    VOD再生

    UrlSourceベースの再生

    UrlSourceに基づいてオンデマンドビデオを再生する場合は、setUrlパラメーターをビデオの再生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

     UrlSource urlSource = new UrlSource();
            urlSource.setUri("Playback 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 URL of a local video. 
            aliPlayer.setDataSource(urlSource);

    (推奨) VidAuthベースの再生

    VidAuthに基づいてオンデマンドビデオを再生する場合は、vidパラメーターをメディアファイルのIDに設定し、playauthパラメーターを再生資格情報に設定する必要があります。

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

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

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

    VidAuth vidAuth = new VidAuth();
            vidAuth.setVid("Vid");// Required. The video ID. 
            vidAuth.setPlayAuth("yourPlayAuth"); // Required. The playback credential. To obtain the playback credential, call the GetVideoPlayAuth operation in ApsaraVideo VOD. 
            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. 
            // vidAuth.setAuthTimeout(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 3600 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. 
            aliPlayer.setDataSource(vidAuth);

    VidStsベースの再生

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

    VidSts vidSts = new VidSts();
            vidSts.setVid("Vid"); // Required. The video ID. 
            vidSts.setAccessKeyId("<yourAccessKeyId>"); // Required. The AccessKey ID that is issued together with the STS token. To generate the AccessKey ID, call the AssumeRole operation in STS. 
            vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Required. The AccessKey secret that is issued together with the STS token. To generate the AccessKey secret, call the AssumeRole operation in STS. 
            vidSts.setSecurityToken("<yourSecurityToken>");// Required. The STS token. To generate an STS token, call the AssumeRole operation in STS. 
            vidSts.setRegion("Access region"); // Required. The ID of the region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. 
            // vidSts.setAuthTimeout(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 3600 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. 
            aliPlayer.setDataSource(vidSts);

    暗号化再生

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

    ライブストリーム

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

    UrlSourceに基づいてライブストリームを再生する場合は、setUrlパラメーターをビデオのストリーミングURLに設定する必要があります。 ストリーミングURLは、ApsaraVideo Liveまたはサードパーティサービスによって生成されます。

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

    UrlSource urlSource = new UrlSource();
            urlSource.setUri("Streaming URL");// The streaming URL. The URL is generated by ApsaraVideo Live or a third-party service. 
            aliPlayer.setDataSource(urlSource);

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

    DRM暗号化されたライブストリーミングの詳細については、「ApsaraVideo Player SDK For Webの使用」をご参照ください。

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

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

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

      SurfaceView surfaceView = findViewById(R.id.surface_view);
      surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
              aliPlayer.setSurface(holder.getSurface());
          }
      
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliPlayer.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) {
              aliPlayer.setSurface(new Surface(surface));
          }
      
          @Override
          public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
              aliPlayer.setSurface(null);
              return false;
          }
      
          @Override
          public void onSurfaceTextureUpdated(SurfaceTexture surface) {
      
          }
      });
  5. オプションです。 自動再生機能を有効にします。 デフォルトでは、自動再生機能は無効になっています。

    aliPlayer.setAutoPlay(true);
  6. プレイヤーを準備します。

    aliPlayer.prepare() メソッドを呼び出して、データを読み取り、解析します。

    aliPlayer.prepare();
  7. 再生を開始します。

    • 自動再生機能が有効になっていない場合は、OnPreparedコールバックが起動された後にaliPlayer.start() メソッドを呼び出して再生を開始する必要があります。

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

    aliPlayer.start();// After the playback starts, you can call the pause() method to pause the playback.

再生の管理

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

再生を開始する

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

aliyunVodPlayer.start();

指定した時点からビデオを再生する

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

// The position parameter specifies the point in time when playback starts. Unit: milliseconds. 
aliyunVodPlayer.seekTo(long position);

再生を一時停止する

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

aliyunVodPlayer.pause();

再生を停止する

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

aliyunVodPlayer.stop();

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

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

スケーリング

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

// Scale in the video to fit the view. The aspect ratio of the video is maintained.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Scale out the video to fill the view. The aspect ratio of the video is maintained.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// 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.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

回転

setRotateModeを呼び出して、ビデオ画像の回転角度を指定できます。 設定後に回転角度を照会できます。 サンプルコード:

// Set the rotation angle to 0° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
// Set the rotation angle to 90° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_90);
// Set the rotation angle to 180° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_180);
// Set the rotation angle to 270° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_270);
// Query the rotation angle.
aliyunVodPlayer.getRotateMode();

ミラーリング

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

// Specify no mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Specify horizontal mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Specify vertical mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

再生情報の取得

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

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

onInfoコールバックでgetExtraValueを呼び出して、現在の再生位置を取得できます。 サンプルコード:

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // The extraValue parameter indicates the current playback position. Unit: milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

再生時間を取得する

ビデオの合計時間を照会できます。 ビデオ期間は、ビデオがロードされた後にのみ取得できます。 onPreparedイベントが呼び出された後、getDurationを呼び出してビデオ期間を照会できます。 サンプルコード:

long duration = mAliPlayer.getDuration();

バッファ位置の取得

onInfoコールバックでgetExtraValueを呼び出して、現在のバッファリングの進行状況を照会できます。 サンプルコード:

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // The extraValue parameter indicates the buffering progress. Unit: milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

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

サンプルコード:

// Obtain the current frame rate for video rendering. The returned data is of the FLOAT data type. 
mAliPlayer.getOption(IPlayer.Option.RenderFPS);
// Obtain the current video bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
mAliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Obtain the current audio bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
mAliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Obtain the current network downlink bitrate. The returned data is of the FLOAT data type. Unit: bit/s. 
mAliPlayer.getOption(IPlayer.Option.DownloadBitrate);

プレイヤーステータスの取得

onStateChangedコールバックでプレーヤーのステータスをリッスンできます。 サンプルコード:

mAliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
    @Override
    public void onStateChanged(int newState) {
        /*
          int idle = 0;
          int initalized = 1;
          int prepared = 2;
          int started = 3;
          int paused = 4;
          int stopped = 5;
          int completion = 6;
          int error = 7;
      */
    }
});

同期していないオーディオとビデオのコールバック

オーディオとビデオが同期していないときにコールバックを実行するように指定できます。 同期外れは、ソフトウェアが4Kビデオをデコードしたり、ローエンドデバイスでHD H.265ビデオを高速再生したりするなど、極端な場合にデコードが再生よりも遅い場合に発生します。 サンプルコード:

mAliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            // Set a lower playback speed.
            if (player.getSpeed() > 1) {
                player.setSpeed(1);
            }
        }
        Toast.makeText(getContext(), "Out-of-sync starts" , Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAVNotSyncEnd() {
        Toast.makeText(getContext(), "Out-of-sync ends" , Toast.LENGTH_SHORT).show();
    }
});

ボリュームの指定

ミュートモードと音量を設定できます。

音量を変更する

ビデオの音量を元の音量の最大2倍に変更できます。 ただし、音量を1より大きい値に設定すると、ノイズが発生することがあります。 ボリュームを変更するには、setVolumeを呼び出します。 現在のボリュームを取得することもできます。 サンプルコード:

// Set the volume to a real number from 0 to 2. 
aliyunVodPlayer.setVolume(1f);
// Obtain the volume. 
aliyunVodPlayer.getVolume();

プレイヤーをミュートする

再生中のビデオをミュートするには、setMuteを呼び出します。 サンプルコード:

aliyunVodPlayer.setMute(true);

再生速度の設定

ApsaraVideo Player SDK for Androidでは、setSpeedを呼び出して再生速度を変更できます。 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.
aliyunVodPlayer.setSpeed(1.0f);

マルチ定義再生の設定

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

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

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

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

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

Switch between definitions

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

mAliPlayer.switchStream(newUrl);

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

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

mAliPlayer.setOnStreamSwitchedListener(new IPlayer.OnStreamSwitchedListener() {
    @Override
    public void onSwitchedSuccess(String url) {
        Log.i("SwitchStream", "switch success, url = " + url);
    }

    @Override
    public void onSwitchedFail(String url, ErrorInfo errorInfo) {
        Log.i("SwitchStream", "switch failed, url = " + url + ", error=" + errorInfo.getMsg());
    }
});

VidAuthまたはVidStsベースの再生の設定

VidAuthまたはVidStsを使用してオンデマンドビデオを再生する場合、追加の設定は必要ありません。 ApsaraVideo Player SDK for Androidは、ApsaraVideo VODからビデオ定義を自動的に取得します。

ビデオ定義の取得

ビデオが読み込まれたら、ビデオの定義を取得できます。

// Obtain information about all streams of the video.
List<TrackInfo> trackInfos = mAliPlayer.getMediaInfo().getTrackInfos();
// Traverse all streams to obtain the video definitions.
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             // Obtain the video definition.
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

Switch between definitions

selectTrackを呼び出して、切り替え先の定義に対応するインデックスを指定できます。 インデックスは、TrackInfoパラメーターから取得できます。

mAliPlayer.selectTrack(index);

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

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

mAliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
    @Override
    public void onChangedSuccess(TrackInfo trackInfo) { }

    @Override
    public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});

クイック切り替え

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

playerConfig.mSelectTrackBufferMode = 1;
mAliPlayer.setConfig(playerConfig)

ループ再生の有効化

ApsaraVideo Player SDK for Androidはループ再生をサポートしています。 setLoopを呼び出して、ループ再生を有効にします。 ループ再生機能を使用すると、ビデオの再生が終了した後、最初からビデオを再生できます。 サンプルコード:

aliyunVodPlayer.setLoop(true);

onInfoコールバックは、ループ再生の開始時に返されます。 サンプルコード:

aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.LoopingStart){
            // Listen to the start of loop playback. 
        }
    }
});

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

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

使用上の注意

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

タイプ

ビデオストリーム接尾辞

ビットレート量

M3U8ファイル量

サブストリームタイプ

説明

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

. mp4

1

-

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

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

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

. m3u8

1

1

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

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

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

. m3u8

1

n

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

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

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

. m3u8

n

n

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

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

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

    mAliyunVodPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        // Configure the onSubTrackReady callback. In most cases, the onSubTrackReady callback is fired before the prepare callback. 
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                // Call the getSubMediaInfo operation and obtain MediaInfo from the response. You must call the getSubMediaInfo operation after the onSubTrackReady callback is fired. Otherwise, an empty string is returned. 
                MediaInfo subMediaInfo = mAliyunVodPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                // Find the track to which you want to switch.
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. 目的のトラックに切り替えます。

    index = myTrack.getIndex();
    mAliyunVodPlayer.selectTrack(index);

SDKログの取得

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

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

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

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

    // The logs are stored under com.cicada.player.utils.
    // Enable the logging feature.
    Logger.getInstance(context).enableConsoleLog(true);
    // Set the log level. Default value: AF_LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to AF_LOG_LEVEL_TRACE.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
  2. ログを収集します。

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

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

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

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

    // The logs are stored under com.cicada.player.utils.
    // Set the log level. Default value: AF_LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to AF_LOG_LEVEL_TRACE.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
    Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){
            @Override
            public void onLog(Logger.LogLevel logLevel,Strings){
                // The logs.
            }
    });
  2. ログを収集します。

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

関連ドキュメント