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.
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.
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.mp4veyacontent://media/video/123gibi 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);
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();
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.
releaseAsyncyö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
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kullanım örneği
-
onSubTrackReadygeri aramasını ayarlayın. Bu geri arama genellikleonPreparedgeri 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) } } }); -
Hedef ses parçasına geçin.
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
Küçük resimleri kullanma
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.
-
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); -
(İ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); 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.
-
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. } }); Bir hata oluştuğunda SDK hata günlüğünü otomatik olarak uygulamanızın günlük kanalına aktarır.
İlgili belgeler
API'ler hakkında daha fazla bilgi edinmek için API referansı konusuna bakın.
Gelişmiş oynatıcı özelliklerini kullanmak için Gelişmiş özellikler konusuna bakın.
Oynatma sorunlarını gidermek için Video oynatma sorunlarını giderme, Android oynatıcı SSS ve Mobil hata kodları konularına bakın.