Todos os produtos
Search
Central de documentação

:Android

Última atualização: Jun 30, 2026

Este tópico descreve como integrar o ApsaraVideo Player SDK ao Native RTS SDK no Android para ativar o RTS.

Integração do SDK

Adicione as dependências do ApsaraVideo Player SDK e do Native RTS SDK por um dos métodos a seguir:

  • Método 1: Integração via Maven

    1. No arquivo app/build.gradle do projeto, adicione as dependências do ApsaraVideo Player SDK e do Native RTS SDK.

      implementation 'com.aliyun.sdk.android:AlivcArtc:5.4.4.0'
      implementation 'com.aliyun.rts.android:RtsSDK:2.1.0'
      implementation 'com.aliyun.sdk.android:AliyunPlayer:5.4.4.0-full'
      Nota
      • Após adicionar as dependências AlivcArtc e RtsSDK, o ApsaraVideo Player SDK carrega automaticamente o RTS SDK como plug-in.

      • A versão da dependência Maven apresentada aqui serve apenas como referência. Para obter a versão mais recente do ApsaraVideo Player SDK, consulte Histórico de versões do SDK para Android. Já para a versão mais recente do SDK RTS, veja Streaming RTS no Android.

      • Verifique se as versões do ApsaraVideo Player SDK e do Native RTS SDK são compatíveis. Para mais informações, consulte Compatibilidade de versões do SDK.

    2. Adicione as URLs dos repositórios Maven.

      Inclua essas URLs no arquivo build.gradle no diretório raiz do projeto.

      // The Maven repository for MPChart. You can remove this if you do not need charts.
      maven { url 'https://jitpack.io' }
      // The Maven repository for Alibaba Cloud SDKs (ApsaraVideo Player SDK, RTS SDK).
      maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' }
  • Método 2: Integração manual de AAR

    1. Copie os arquivos .aar necessários para o diretório app/libs.aar文件

    2. No arquivo app/build.gradle, adicione o código a seguir:

      dependencies{
          implementation fileTree(dir: 'libs', include: ['*.aar'])
      }

Uso da API do SDK

Use a API do ApsaraVideo Player SDK para aproveitar o recurso RTS. Para detalhes sobre outros recursos do ApsaraVideo Player SDK, consulte Recursos avançados e Referência da API.

Nota
  • Os trechos de código a seguir servem apenas para demonstração. Para acessar o source completo, visite nosso projeto open-source.

  • Ao reproduzir um stream RTS com o ApsaraVideo Player SDK, não use o método pause() para pausar a transmissão ao vivo. Em vez disso, chame stop() para interromper a reprodução e, em seguida, chame prepare() para reiniciá-la.

  • A operação seek não tem suporte.

  • Carregue a biblioteca

    Adicione System.loadLibrary("RtsSDK"); à Activity apropriada.

    static {
        System.loadLibrary("RtsSDK");
    }
  • Crie um player

    A classe AliPlayerFactory oferece dois tipos de player: AliPlayer e AliListPlayer. Para reproduzir uma única fonte de mídia, use AliPlayer. O código a seguir demonstra como criar uma instância de AliPlayer:

    AliPlayer aliyunVodPlayer;
    .....
    aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
  • Defina os listeners do player

    O player disponibiliza diversos listeners para tratar eventos, como onPrepared e onCompletion. O exemplo a seguir mostra como configurar esses listeners:

    aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        @Override
        public void onError(ErrorInfo errorInfo) {
            // Called when an error occurs.
        }
    });
    aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
            // Called when the player is prepared.
        }
    });
    aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
            // Called when the video resolution changes.
        }
    });
    aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
        @Override
        public void onRenderingStart() {
            // Called when the first frame is rendered.
        }
    });
    aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(int type, long extra) {
            // Called for playback information events, such as loop start, buffering progress, or current position.
        }
    });
    aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        @Override
        public void onLoadingBegin() {
            // Called when buffering starts.
        }
        @Override
        public void onLoadingProgress(int percent, float kbps) {
            // Buffering progress.
        }
        @Override
        public void onLoadingEnd() {
            // Called when buffering finishes.
        }
    });
    aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
        @Override
        public void onSubtitleShow(long id, String data) {
            // Called when a subtitle is displayed.
        }
        @Override
        public void onSubtitleHide(long id) {
            // Called when a subtitle is hidden.
        }
    });
    aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
        @Override
        public void onChangedSuccess(TrackInfo trackInfo) {
            // Called when the track or resolution is switched successfully.
        }
        @Override
        public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
            // Called when switching the track or resolution fails.
        }
    });
    aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
        @Override
        public void onStateChanged(int newState) {
            // Called when the player state changes.
        }
    });
    aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
        @Override
        public void onSnapShot(Bitmap bm, int with, int height) {
            // Called when a snapshot is captured.
        }
    });
  • Crie uma fonte de dados

    O player aceita quatro tipos de fontes de reprodução: VidSts, VidAuth, VidMps e UrlSource. Para usar o recurso RTS com reprodução direta por url, use o protocolo artc:// na url ao trabalhar com UrlSource.

    UrlSource urlSource = new UrlSource();
    urlSource.setUri("artc://");
    aliyunVodPlayer.setDataSource(urlSource);
  • Configure a view de exibição

    Se a fonte de reprodução contiver vídeo, defina uma view de exibição para renderizar os quadros de vídeo. Há suporte tanto para SurfaceView quanto para TextureView. O exemplo a seguir usa SurfaceView:

    surfaceView = (SurfaceView) findViewById(R.id.playview);
    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(holder);
        }
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            aliyunVodPlayer.surfaceChanged();
        }
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            aliyunVodPlayer.setDisplay(null);
        }
    });
  • Controle de reprodução

    Crie sua própria interface para os controles de reprodução e chame os métodos correspondentes do player nos manipuladores de eventos dos botões. O exemplo a seguir ilustra operações básicas de controle, como iniciar e parar:

    // Prepare the player. In the onPrepared callback, call start() to begin playback.
    aliyunVodPlayer.prepare();
    // Start playback.
    aliyunVodPlayer.start();
    // Stop playback.
    aliyunVodPlayer.stop();
    // Reset the player.
    aliyunVodPlayer.reset();
    // Release the player. Once released, the player instance cannot be reused.
    aliyunVodPlayer.release();
  • Configure os parâmetros de reprodução

    Ajuste os parâmetros de reprodução para otimizar o desempenho do RTS.

    // Get the current configuration.
    PlayerConfig config = mAliyunVodPlayer.getConfig();
    // Set the maximum latency to 1,000 ms. Latency is managed by the ARTC protocol.
    config.mMaxDelayTime = 1000;
    // Set the start buffer and high buffer duration to 10 ms. Buffering is managed by the ARTC protocol.
    config.mHighBufferDuration = 10;
    config.mStartBufferDuration = 10;
    ....// Other settings
    // Apply the configuration to the player.
    mAliyunVodPlayer.setConfig(config);
  • Logging

    // Enable logging
    Logger.getInstance(context).enableConsoleLog(true);
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE);
    // Disable logging
    Logger.getInstance(context).enableConsoleLog(false);
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE);
  • Degradação de stream ao vivo

    A degradação de stream ao vivo é uma estratégia de fallback que altera uma url de reprodução com prefixo artc:// para uma URL HTTP-FLV. Em seguida, atualize o UrlSource do player e reinicie a reprodução.

    /**
     * Degradation strategy
     */
    private void willBeDemoted() {
        mRtsAliPlayer.stop();
        if (mUrl.startsWith("artc://")) {
            setDataSource("http://xxxx.flv");
            mRtsAliPlayer.prepare();
        }
    }
  • Obtenção do TraceId

    O evento InfoCode.DirectComponentMSG no callback onInfo indica uma mensagem de passagem direta do componente RTS subjacente. Para obter o TraceId, analise a string extraMsg desse evento. Quando a mensagem contiver code=104 (evento de ID de rastreamento), extraia o TraceId processando a substring após o delimitador -sub-.

    private static final int TRACE_ID_CODE = 104;
    
    // Listen for the player's onInfo callback and parse the RTS event message.
    mRtsAliPlayer.setOnInfoListener(infoBean -> {
        if (infoBean.getCode() == InfoCode.DirectComponentMSG) {
            String extraMsg = infoBean.getExtraMsg();
            parseDirectComponentMSG(extraMsg);
        }
    });
    
    private void parseDirectComponentMSG(String msg) {
        if (msg.contains("code=" + TRACE_ID_CODE)) {
            parseTraceId(msg);
        }
    }
    
    /**
     * Parses the TraceId.
     */
    private void parseTraceId(String msg) {
        String[] split = msg.split("-sub-");
        if (split.length >= 1) {
            mTraceId = "RequestId:" + (split[1].substring(0, split[1].length() - 1));
            mTraceId = mTraceId.replace("\"", "").replace("\\", "");
        }
    }