Tüm Ürünler
Search
Belge Merkezi

ApsaraVideo VOD:Basic features of ApsaraVideo Player SDK for Android

Son Güncelleme:Oct 05, 2026

Bu konuda Android için ApsaraVideo Player SDK'nın temel özelliklerinin nasıl kullanılacağı açıklanmaktadır. Oynatma kaynaklarını yapılandırmayı, ses düzeyini ve oynatma hızını ayarlamayı, çözünürlükleri ve ses parçalarını değiştirmeyi öğreneceksiniz.

Önemli

Demoyu çalıştırmak ve test etmek için ApsaraVideo Player SDK'yı indirin ve derleyip çalıştırmak amacıyla Demoyu keşfedin bölümündeki adımları izleyin.

Video kaynağı yapılandırma

Android için ApsaraVideo Player SDK hem video-on-demand (VOD) hem de canlı yayın oynatmayı destekler.

  • VOD oynatma yöntemleri: VidAuth (ApsaraVideo VOD kullanıcıları için önerilir), VidSts, UrlSource ve şifreli oynatma.

  • Canlı yayın oynatma yöntemleri: UrlSource ve şifreli oynatma.

Not
  • UrlSource medya akışını URL'den oynatır. VidSts ve VidAuth ise medya kimliği (Vid) kullanarak oynatma yapar.

  • Desteklenen bölgeler hakkında bilgi edinmek için ApsaraVideo VOD bölge kimlikleri konusuna bakın.

VOD oynatma

VidAuth (Önerilen)

Bir VOD videosunu VidAuth ile oynatmak için vid özelliğini medya kimliğine ve playAuth özelliğini oynatma kimlik bilgisine ayarlayın.

  • Medya kimliği: Bir medya dosyası yükledikten sonra medya kimliğini alabilirsiniz. ApsaraVideo VOD konsolunda Media Files > Audio/Video seçeneklerine gidin. Ayrıca SearchMedia API'sini de çağırabilirsiniz.

  • Oynatma kimlik bilgisi: Oynatma kimlik bilgisini almak için GetVideoPlayAuth işlemini çağırın. Manuel imzalama oluşturmak yerine ApsaraVideo VOD sunucu tarafı SDK'sını entegre etmenizi öneririz. Örnekler için OpenAPI Explorer sayfasına bakın.

ApsaraVideo VOD kullanıcıları için VidAuth, daha iyi kullanım kolaylığı ve güvenlik sağladığından VidSts'ye göre tercih edilmelidir. Daha fazla bilgi için Kimlik bilgisi yöntemi ile STS yöntemi karşılaştırması konusuna bakın.

ApsaraVideo VOD konsolunda HLS şifreleme parametresi aktarımını etkinleştirirseniz varsayılan parametre adı MtsHlsUriToken olur. Daha fazla bilgi için HLS şifreleme için parametre aktarımı konusuna bakın.

Örnek kod:

VidAuth vidAuth = new VidAuth();
vidAuth.setVid("Vid");                 // Required. The video ID (VideoId).
vidAuth.setPlayAuth("<yourPlayAuth>"); // Required. The playback credential from GetVideoPlayAuth.
vidAuth.setRegion("region-id");        // Deprecated for SDK V5.5.5.0 and later. The player automatically parses the region. For earlier versions, this parameter is required. Default: cn-shanghai.
   // vidAuth.setAuthTimeout(3600);    // Optional. Set the validity period of the playback URL in seconds. This value overwrites the validity period configured in the ApsaraVideo VOD console. Default: 3600. Make sure that the value is greater than the video duration to prevent URL expiration during playback.
        
   // If you enable HLS encryption parameter pass-through in the ApsaraVideo VOD console, the default parameter is MtsHlsUriToken. Specify config and pass it with your VidAuth data source.
   VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
   vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
   vidAuth.setPlayerConfig(config);
   aliPlayer.setDataSource(vidAuth);

VidSts

VidSts oynatma, VOD oynatma kimlik bilgileri yerine geçici STS kimlik bilgilerini kullanır. VidSts kullanarak VOD videolarını oynatmadan önce bir STS belirteci ve bir AccessKey çifti (AccessKey ID ve AccessKey secret) alın. Daha fazla bilgi için STS belirteci alma konusuna bakın.

ApsaraVideo VOD konsolunda HLS şifreleme parametresi aktarımını etkinleştirirseniz varsayılan parametre adı MtsHlsUriToken olur. Daha fazla bilgi için HLS şifreleme için parametre aktarımı konusuna bakın.

Örnek kod

VidSts vidSts = new VidSts();
       vidSts.setVid("Vid");                               // Required. The video ID (VideoId).
       vidSts.setAccessKeyId("<yourAccessKeyId>");         // Required. The temporary AccessKey ID from STS (AssumeRole).
       vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Required. The temporary AccessKey secret from STS (AssumeRole).
       vidSts.setSecurityToken("<yourSecurityToken>");     // Required. The STS token from AssumeRole.
       vidSts.setRegion("RegionID");                       // Required. The ApsaraVideo VOD region. Default: cn-shanghai.
       // vidSts.setAuthTimeout(3600);                     // Optional. Set the validity period of the playback URL in seconds. This value overwrites the validity period configured in the ApsaraVideo VOD console. Default: 3600. Make sure that the value is greater than the video duration to prevent URL expiration during playback.
        
       // If you enable HLS encryption parameter pass-through in the ApsaraVideo VOD console, the default parameter is MtsHlsUriToken. Specify config and pass it with your vidSts data source.
       // If it is not enabled, the following configuration is not neccessary.
       VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
       vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
       vidSts.setPlayerConfig(config);
       aliPlayer.setDataSource(vidSts);

UrlSource

Bir VOD videosunu UrlSource kullanarak oynatmak için oynatma URL'sini doğrudan iletin.

  • ApsaraVideo VOD'den oynatma URL'lerini almak için GetPlayInfo işlemini çağırabilirsiniz. ApsaraVideo VOD sunucu tarafı SDK'sını entegre etmenizi öneririz. Örnekler için OpenAPI Explorer sayfasına bakın.

  • Yerel dosyalar için dosyaya erişim izninizin olduğundan emin olun. /sdcard/video/sample.mp4 veya content://media/video/123 gibi tam yollar kullanın.

 UrlSource urlSource = new UrlSource();
        urlSource.setUri("your-playback-url"); // Required. A VOD URL, third-party URL, or local file path.
        aliPlayer.setDataSource(urlSource);

Şifreli oynatma

VOD videoları HLS şifrelemeyi, Alibaba Cloud'a özgü kriptografiyi ve DRM şifrelemeyi destekler. Oynatma hakkında bilgi edinmek için Şifreli bir videoyu oynatma konusuna bakın.

Canlı yayın oynatma

Canlı yayın oynatma hakkında bilgi edinmek için Standart canlı yayın oynatma konusuna bakın.

Oynatmayı kontrol etme

Android için ApsaraVideo Player SDK oynatmayı başlatmak, duraklatmak, durdurmak ve belirli bir konuma atlamak için yöntemler sağlar.

Oynatıcıyı hazırlama

Medya verilerini yüklemek ve ayrıştırmak için prepare yöntemini çağırın.

aliPlayer.prepare();

Oynatmayı başlatma

Oynatmayı başlatmak veya sürdürmek için start yöntemini çağırın.

aliPlayer.start();

Belirli bir konuma atlama

Belirli bir konuma atlamak için seekTo yöntemini çağırın. Bu yöntem, kullanıcılar ilerleme çubuğunu sürüklediğinde veya oynatmayı kaydedilmiş bir konumdan devam ettirdiğinde kullanışlıdır.

// Specify the target time in milliseconds.
aliPlayer.seekTo(long position);

prepare çağrısından önce oynatma başlangıç konumunu ayarlamak için setStartTime yöntemini kullanın. Bu ayar, her prepare çağrısında yalnızca bir kez etkili olur ve ardından otomatik olarak temizlenir.

// Set the start position in milliseconds. seekMode specifies accurate or inaccurate seeking.
aliPlayer.setStartTime(time, seekMode);

Oynatmayı duraklatma

Oynatmayı duraklatmak için pause yöntemini çağırın.

aliPlayer.pause();

Oynatmayı durdurma

Oynatmayı durdurmak için stop yöntemini çağırın.

aliPlayer.stop();

Oynatıcı görünümünün bağlantısını kesme

Oynatmayı durdurduktan ve oynatıcı örneğini yok etmeden önce, işleme kaynaklarını serbest bırakmak ve bellek sızıntılarını önlemek için oynatıcı görünümünün bağlantısını kesin. Kullandığınız oynatıcı görünümü türüne göre uygun bağlantı kesme yöntemini seçin.

SurfaceView / TextureView

Bağlantıyı kesmek için setSurface yöntemini null değeriyle çağırın.

// Unbind the player view
aliPlayer.setSurface(null);

AliDisplayView

Bağlantıyı kesmek için setDisplayView yöntemini null değeriyle çağırın.

// Unbind the player view
aliPlayer.setDisplayView(null);
Not

Oynatıcı görünümünün bağlantısını stop çağrısından sonra ve release ya da releaseAsync çağrısından önce kesin. Oynatmayı sonlandırma sırası şu şekildedir: stop → görünüm bağlantısını kes → release / releaseAsync.

Oynatıcıyı yok etme

Oynatıcıyı eşzamanlı veya eşzamansız olarak yok edebilirsiniz.

// Synchronous destroy. Blocks until player resources are released. Automatically calls stop.
aliPlayer.release();
// Asynchronous destroy. Returns immediately. Automatically calls stop.
aliPlayer.releaseAsync();
Not

Kullanıcı arayüzü yanıt hızına yönelik yüksek gereksinimleriniz varsa releaseAsync yöntemini kullanın. Aşağıdaki hususlara dikkat edin:

  • Eşzamansız yok etme işlemi sırasında oynatıcı nesnesi üzerinde herhangi bir işlem gerçekleştirmeyin.

  • Eşzamansız yok etme işlemi, eşzamansız bir durdurma süreci içerir. releaseAsync yöntemini çağırmadan önce oynatıcıyı manuel olarak durdurmanız gerekmez.

Oynatıcı durumunu izleme

Android için ApsaraVideo Player SDK oynatma olaylarını ve durum değişikliklerini izlemek için dinleyiciler sağlar.

Dinleyicileri ayarlama

Oynatıcı için birden çok dinleyici ayarlayabilirsiniz. OnErrorListener, OnCompletionListener, OnLoadingStatusListener ve OnInfoListener dinleyicilerini ayarlamanızı öneririz.

aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
    // This callback is triggered if an error occurs when you use the player.

    @Override
    public void onError(ErrorInfo errorInfo) {
        ErrorCode errorCode = errorInfo.getCode(); // The error code.
        String errorMsg = errorInfo.getMsg(); // The error message.
        // errorExtra provides extra error information in a JSON string. For example:
        //{ "Url": "xxx",
   		//	"Module": "NetWork",
    	//	"ModuleCode": "-377",
   		//  "ModuleMessage": "Redirect to a url that is not a media"}
        // Note that the value of ModuleCode is not always the same as the value of errorCode.
        String errorExtra= errorInfo.getExtra();         
        // Stop the player after an error occurs.
        aliPlayer.stop();
    }
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    // After you call the aliPlayer.prepare() method, the player starts to read and parse data. This callback is triggered after the data is parsed.

    @Override
    public void onPrepared() {
        // The player is prepared.
    }
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
    // This callback is triggered after the playback is complete.
    @Override
    public void onCompletion() {
        // In most cases, you can 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 position and the buffered 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.

        // The current playback position: InfoCode.CurrentPosition.
        // The buffered position: InfoCode.BufferedPosition.
    }
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
    // The loading status of the player. You can use this to display a loading screen when the network connection is poor.

    @Override
    public void onLoadingBegin() {
        // The player starts to load data. The video and audio are not ready for playback.
        // In most cases, you can display a circular loading indicator.
    }

    @Override
    public void onLoadingProgress(int percent, float netSpeed) {
        // The loading progress in percentage and the network speed.
        // The network speed is a reserved field. The value is 0.
    }

    @Override
    public void onLoadingEnd() {
        // The player stops loading data. The video and audio are ready for playback.
        // In most cases, you can hide the circular loading indicator.
    }
});

Oynatma durumu değişikliklerini izleme

Oynatıcı durum geçişlerini izlemek için onStateChanged geri aramasını kullanın.

aliPlayer.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;
      */
    }
});

Video görüntüsünü yapılandırma

Oynatma sırasında videonun nasıl ölçeklendirileceğini, döndürüleceğini ve yansıtılacağını yapılandırın.

Ölçeklendirme modu

SDK üç ölçeklendirme modunu destekler:

// Scale to fit the view while maintaining the aspect ratio (letterboxing).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Scale to fill the view while maintaining the aspect ratio (cropping).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Stretch to fill the view. The aspect ratio is not maintained. Image distortion may occur.
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

Döndürme

Videoyu döndürmek için setRotateMode yöntemini çağırın. Mevcut döndürme açısını sorgulamak için getRotateMode yöntemini kullanabilirsiniz.

// No rotation.
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// 90° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// 180° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// 270° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// Query the current rotation angle.
aliPlayer.getRotateMode();

Yansıtma

Videoyu yansıtmak için setMirrorMode yöntemini çağırın. SDK yatay ve dikey yansıtmayı destekler:

// No mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Horizontal mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Vertical mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

Oynatma bilgilerini alma

Oynatma sırasında oynatma ilerlemesini, süreyi ve önbelleğe alma ilerlemesini elde edebilirsiniz.

Oynatma ilerlemesi

onInfo geri aramasında, milisaniye cinsinden mevcut oynatma konumunu almak için getExtraValue yöntemini çağırın.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // The current playback position in milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Toplam süre

Video süresi yalnızca medya yüklendikten sonra kullanılabilir hale gelir. onPrepared geri araması tetiklendikten sonra getDuration yöntemini çağırın.

long duration = aliPlayer.getDuration();

Gerçek oynatma süresi

Gerçek oynatma süresini gerçek zamanlı olarak alabilirsiniz. Bu değer, oynatmanın duraklatıldığı veya önbelleğe alındığı süreleri hariç tutar.

long playedDuration = aliPlayer.getPlayedDuration(); 

Önbelleğe alma ilerlemesi

Mevcut önbelleğe alma ilerlemesini almak için onInfo geri aramasında InfoCode.BufferedPosition değerini kontrol edin.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // The current buffering progress in milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Gerçek zamanlı işleme ve bit hızı ölçümleri

İşleme kare hızını, ses ve video bit hızını ve ağ indirme bit hızını gerçek zamanlı olarak alın.

// Video rendering frame rate. Returns a float value.
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// Video bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Audio bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Network downstream bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);

Ses/Görüntü senkronizasyon dışı olayları yönetme

4K oynatma sırasında yazılım kod çözme veya düşük donanımlı cihazlarda HD H.265 akışlarının yüksek hızda oynatılması gibi aşırı koşullarda kod çözme performansı oynatma hızının gerisinde kalabilir. SDK bu olayı size bildirmek için bir geri arama tetikler.

aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            //Reduce the playback speed to recover.
            if (aliPlayer.getSpeed() > 1) {
                aliPlayer.setSpeed(1);
            }
        }
        Toast.makeText(getContext(), "Out-of-sync detected" , Toast.LENGTH_SHORT).show();
    }

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

Ses düzeyini kontrol etme

Ses düzeyini değiştirme

Ses düzeyini değiştirmek için setVolume yöntemini çağırın. Geçerli değerler 0 ile 2 arasındadır; burada 1 orijinal ses düzeyidir. 1 değerinden büyük değerler sesi yükseltir ve gürültüye neden olabilir. Ses düzeyini 1 değerinden yüksek ayarlamanızı önermiyoruz.

// Set the volume. Valid values: 0 to 2.
aliPlayer.setVolume(1f);
// Get the current volume.
aliPlayer.getVolume();

Oynatıcıyı sessize alma

Oynatıcıyı sessize almak veya sesi açmak için setMute yöntemini çağırın.

aliPlayer.setMute(true); 

Oynatma hızını ayarlama

Oynatma hızını değiştirmek için setSpeed yöntemini çağırın. Geçerli değerler 0.5 ile 5 arasındadır. Farklı hızlarda ses perdesi değişmez.

// Common speeds: 0.5x, 1x, 1.5x, 2x.
aliPlayer.setSpeed(1.0f);

Çözünürlükleri değiştirme

Not

Ayrıntılı kod örnekleri için API-Example projesindeki MultiResolution modülüne bakın.

UrlSource tabanlı canlı yayın

Daha fazla bilgi için Standart canlı yayın oynatma konusuna bakın.

VidAuth veya VidSts tabanlı oynatma

VOD oynatma için VidAuth veya VidSts kullanıyorsanız SDK video tanımlarını ApsaraVideo VOD'den otomatik olarak alır. Ek yapılandırma gerekmez.

Kullanılabilir tanımları sorgulama

Video yüklendikten sonra kullanılabilir tanımları alın.

// Retrieve all available track.
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//Retrieve the available definitions.
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             // Get video definition. 
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

Tanımı değiştirme

Tanımları değiştirmek için parça dizini ile selectTrack yöntemini çağırın. Dizini TrackInfo nesnesinden alın.

aliPlayer.selectTrack(index);

Tanım değiştirme olaylarını dinleme

Tanım değiştirme başarılı olduğunda veya başarısız olduğunda bildirim almak için bir dinleyici ayarlayın.

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

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

Hızlı değiştirmeyi etkinleştirme

Hızlı değiştirme modunu etkinleştirdikten sonra selectTrack çağrıları önbelleğe almayı beklemeden anında yanıt verir.

PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)

Döngüsel oynatmayı etkinleştirme

Döngüsel oynatmayı etkinleştirmek için setLoop yöntemini çağırın. Oynatma sona ulaştığında otomatik olarak baştan başlar.

aliPlayer.setLoop(true);

Döngüsel oynatma yeniden başladığında onInfo geri araması tetiklenir.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.LoopingStart){
            //Loop playback restarted.
        }
    }
});

Ses parçalarını değiştirme

Android için ApsaraVideo Player SDK, oynatma sırasında farklı dillerdeki ses parçaları arasında geçiş yapmanıza olanak tanıyan ses parçası değiştirmeyi destekler.

Desteklenen akış türleri

Aşağıdaki akış türlerinde ses parçalarını değiştirebilirsiniz. Değiştirme davranışı akış türüne göre değişir.


Akış türü


Dosya uzantısı


Bit hızı sayısı


Alt akış türü


Değiştirme davranışı


Liste dışı akış (MP4)


.mp4


1


Bir video parçası, birden çok ses ve altyazı parçası


Ses parçaları arasında geçiş yapabilirsiniz.


Tek bit hızlı karma HLS


.m3u8


1


Bir video parçası, birden çok ses ve altyazı parçası


Ses parçaları arasında geçiş yapabilirsiniz.


Tek bit hızlı HLS


.m3u8


1


Ayrı video, ses ve altyazı alt akışları


Ses parçaları arasında geçiş yapabilirsiniz.


Çoklu bit hızlı karma HLS


.m3u8


n


Farklı bit hızlarına sahip alt akışlar, her biri bir video ve birden çok ses parçası içerir


Yalnızca alt akışlar arasında geçiş yapabilirsiniz, bir alt akış içindeki ses parçaları arasında değil.

Kullanım örneği

  1. onSubTrackReady geri aramasını ayarlayın. Bu geri arama genellikle onPrepared geri aramasından önce tetiklenir.

    aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        //onSubTrackReady. Typically triggered before the onPrepared callback.
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                // Call getSubMediaInfo after this callback is triggered. Calling it before this callback returns an empty result.
                MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                // Find the target audio track from the track list.
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. Hedef ses parçasına geçin.

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

Küçük resimleri kullanma

Not

Ayrıntılı kod örnekleri için API-Example projesindeki Thumbnail modülüne bakın.

Küçük resimleri kullanmadan önce videonuz için sprite anlık görüntülerini yapılandırın. ApsaraVideo VOD konsolunda, anlık görüntü türü olarak Image Sprite seçeneğini içeren bir anlık görüntü şablonu oluşturun ve ardından videoyu işlemek için bir iş akışı oluşturun. Daha fazla bilgi için Video anlık görüntüleri konusuna bakın.

mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        // 1. Create a ThumbnailHelper instance with the sprite snapshot URL.
        ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
        // 2. Set listeners.
        mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
            @Override
            public void onPrepareSuccess() {
                // 4. After the thumbnail is loaded, request thumbnails at specific positions.
            }
            @Override
            public void onPrepareFail() {}
        });

        mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
            @Override
            public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
                // 5. Get the thumbnail bitmap at the specified position.
                Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
            }
            @Override
            public void onThumbnailGetFail(long positionMs, String errorMsg) {}
        });

        // 3. Load the thumbnail.
        mThumbnailHelper.prepare();
    }
});

SDK günlüklerini alma

SDK günlükleri istek durumu, çağrı sonuçları ve izin istekleri gibi ayrıntılı bilgiler içerir. Geliştirme sırasında sorunları hata ayıklamak için bu günlükleri kullanabilirsiniz. SDK günlükleri almak için iki yöntem sağlar.

Yöntem 1: Günlükleri geliştirme aracı konsolunda görüntüleme

Sorunu cihazınızda güvenilir bir şekilde yeniden üretebildiğinizde bu yöntemi kullanın.

  1. Günlük kaydını etkinleştirin ve günlük düzeyini ayarlayın.

    // Logs are stored under com.cicada.player.utils.
    Logger.getInstance(context).enableConsoleLog(true);
    // Default: AF_LOG_LEVEL_INFO. Use AF_LOG_LEVEL_TRACE for troubleshooting.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
  2. (İsteğe bağlı) Sorun giderme için kare düzeyinde günlük kaydını etkinleştirin.

    // 0: disabled, 1: enabled.
    Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED, value);
  3. Sorunu yeniden üretin ve hata günlüğünü Logcat'ten veya geliştirme aracı konsolunuzdan alın.

Yöntem 2: Günlükleri programatik olarak almak için LogCallback ayarlama

Sorunu cihazınızda güvenilir bir şekilde yeniden üretemediğinizde bu yöntemi kullanın. Geri arama, günlükleri uygulamanızın günlük kanalına aktarır.

  1. Günlük kaydını etkinleştirin ve günlük düzeyini ayarlayın.

    // Logs are stored under com.cicada.player.utils.
    // Default: AF_LOG_LEVEL_INFO. Use AF_LOG_LEVEL_TRACE for troubleshooting.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
    Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){
            @Override
            public void onLog(Logger.LogLevel logLevel,Strings){
                // Process the log entry.
            }
    });
  2. Bir hata oluştuğunda SDK hata günlüğünü otomatik olarak uygulamanızın günlük kanalına aktarır.

İlgili belgeler