Oynatma listesi oynatma, altyazı, video indirme ve şifreli oynatma dahil olmak üzere Android Oynatıcı SDK'sının gelişmiş özelliklerini kullanın. API referansı.
Demoyu çalıştırmak için indirin ve derleyip çalıştırmak üzere Demoyu çalıştırın bölümündeki talimatları izleyin.
Professional Edition lisans doğrulaması
Bazı oynatıcı özellikleri Professional Edition lisansı gerektirir. Desteklenen özellikleri Oynatıcı SDK özellik ayrıntıları bölümünde kontrol edin. Bu özellikleri kullanmak için Oynatıcı SDK lisansı edinin bölümünde açıklandığı şekilde yetkilendirmeyi tamamlayın.
Uygulama başlamadan veya herhangi bir oynatıcı API'sini çağırmadan önce bir dinleyici ayarlayın:
import com.aliyun.private_service.PrivateService;
PrivateService.setOnPremiumLicenseVerifyCallback(new PrivateService.OnPremiumLicenseVerifyCallback() {
@Override
public void onPremiumLicenseVerifyCallback(PrivateService.PremiumBizType type, boolean isValid, String errorMsg) {
Log.d(TAG, "onPremiumLicenseVerifyCallback: " + type + " isValid: " + isValid + " errorMsg: " + errorMsg);
}
});
PremiumBizType numaralandırır profesyonel özellikleri. İlgili bir özelliği kullandığınızda oynatıcı lisansı doğrular ve sonucu bu geri arama üzerinden döndürür. isValid değeri false ise errorMsg neden bilgisini içerir.
Oynatma
Oynatma listesi oynatma
Android Oynatıcı SDK, kısa videolar için başlatma hızını önemli ölçüde artıran ön yükleme özellikli oynatma listesi oynatma desteği sunar.
Yordam
Daha iyi bir oynatma listesi oynatma deneyimi için kısa drama çözümünü kullanın. Kısa drama istemci geliştirmesi.
Şeffaflığa sahip videoların oynatılması
Özellik genel bakışı
ApsaraVideo Player SDK, şeffaf hediye animasyonları için alfa kanalı işlemeyi destekler. Canlı yayın senaryolarında bu animasyonlar canlı içeriği örtmeden oynatılır.
Sınırlamalar
Entegre SDK sürümü 6.8.0 veya üzeri ya da Oynatıcı SDK sürümü 6.9.0 veya üzeri şeffaf işlemeyi destekler.
Avantajlar
Şeffaflığa sahip MP4 videoları, APNG veya IXD ile karşılaştırıldığında daha iyi animasyon kalitesi, daha küçük dosya boyutu, daha yüksek uyumluluk ve geliştirme verimliliği sağlar.
Daha iyi animasyon kalitesi: MP4, orijinal ayrıntıları ve renkleri APNG veya IXD'den daha doğru korur.
Daha küçük dosya boyutu: MP4 daha verimli sıkıştırma sağlayarak yükleme hızını artırır ve bant genişliği tüketimini azaltır.
Daha yüksek uyumluluk: MP4, cihazlar ve tarayıcılar arasında evrensel olarak desteklenir.
Daha yüksek geliştirme verimliliği: Geliştiricilerin karmaşık ayrıştırma ve işleme mantığını uygulamasına gerek kalmaz.
Örnek kod
Harici altyazılar
Ayrıntılı kod örnekleri için API-Example Harici altyazı gösterimi ve geçişi (ExternalSubtitle) modülüne bakın. Android için ApsaraVideo Player SDK'sına yönelik bu Java tabanlı örnek proje, geliştiricilerin çekirdek SDK entegrasyon özelliklerini hızlıca öğrenmesine yardımcı olur.
Android Oynatıcı SDK, SRT, SSA, ASS ve VTT formatlarında harici altyazı ekleme ve değiştirme desteği sunar.
-
Altyazıları görüntülemek için bir görünüm oluşturun.
Altyazı formatına göre farklı görünümler oluşturun.
Oynatıcı V7.6.0 veya sonrasını entegre ederken ve SRT ile VTT altyazılarını görüntülemek için
VttSubtitleViewkullanırken aşağıdaki dinleyiciyi ayarlayın:// Required for player 7.6.0 and later. mAliPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { int viewWidth = getWidth(); int viewHeight = getHeight(); IPlayer.ScaleMode mode = mVideoListPlayer.getScaleMode(); SubTitleBase.VideoDimensions videoDimensions = SubTitleBase.getVideoDimensionsWhenRenderChanged(width, height, viewWidth, viewHeight, mode); vttSubtitleView.setVideoRenderSize(videoDimensions.videoDisplayWidth, videoDimensions.videoDisplayHeight); } }); -
Altyazı ekleyin.
ÖnemliAltyazı dosyalarını
onPreparedgeri çağırmasında ayarlayın.mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { // Set subtitles (must be done in onPrepared). mAliPlayer.addExtSubtitle(EXT_SUBTITLE_URL); } }); -
Altyazı ile ilgili dinleyicileri ayarlayın.
Harici altyazılar (işleme bileşenlerine dayalı özel işleme)
WebVTT harici altyazıları için tam destek, VttSubtitleView ve WebVttResolver kullanılarak uygulanır; bu, altyazı yazı tipi boyutu, rengi ve belirli yazı tiplerinin esnek şekilde özelleştirilmesine olanak tanır.
Uygulanabilir senaryolar:
WebVTT altyazı stillerini özelleştirme.
ApsaraVideo Player SDK sürüm 7.11.0 veya sonrasını entegre etme.
Ön koşullar:
Yazı tipi dosyaları (.ttf), projenizin
assets/fonts/dizinine yerleştirilir.Proje minSdk ≥ 21 (önerilir).
Altyazı dinleyicileri eklenir ve WebVTT içeriği alınabilir.
-
CustomStyleWebVttResolveroluşturun veWebVttResolveruygulayın.public class CustomStyleWebVttResolver extends WebVttResolver { // Implement creation method. public CustomStyleWebVttResolver(Context context) { super(context); // Initialize fonts and other resources here later. } } -
Stilleri özelleştirmek için
applyTextSpansyöntemini geçersiz kılın.Bu yöntem, üst sınıf temel stilleri ayrıştırdıktan sonra çağrılır ve altyazıların ikincil işlenmesine olanak tanır.
-
Yöntem 1:
VttContentAttributedeğerini değiştirin ve üst sınıf yöntemini çağırın./** * Override text style application logic to implement custom style effects. * This method is called after the parent class parses basic styles, allowing secondary processing of font size, color, and other attributes. * * @param spannableStringBuilder Used to build styled text. * @param vttContentAttribute Style attribute object for the current text segment (includes font, color, size, etc.). * @param start Start position for style application (inclusive). * @param end End position for style application (exclusive). */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Set. // Save original font size (in px) for later adjustment. // Default font size is 0.0533f times video height. double originalFontSizePx = vttContentAttribute.fontSizePx; // Double the font size. vttContentAttribute.fontSizePx = originalFontSizePx * 2; // Change font color to red. vttContentAttribute.mPrimaryColour = Color.argb(255, 255, 0, 0); // Call parent class method to apply text. super.applyTextSpans(spannableStringBuilder, vttContentAttribute, start, end); } -
WebVTT stillerini doğrudan değiştirmek için
SpannableStringBuilderüzerinde doğrudan işlem yapın.ÖnemliBu yöntem, yerel WebVTT stillerinin kaybına neden olabilir.
/** * Override text style application logic to implement custom style effects. * This method is called after the parent class parses basic styles, allowing secondary processing of font size, color, and other attributes. * * @param spannableStringBuilder Used to build styled text. * @param vttContentAttribute Style attribute object for the current text segment (includes font, color, size, etc.). * @param start Start position for style application (inclusive). * @param end End position for style application (exclusive). */ @Override protected void applyTextSpans(SpannableStringBuilder spannableStringBuilder, VttContentAttribute vttContentAttribute, int start, int end) { // Set font color. spannableStringBuilder.setSpan( new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Set absolute size. spannableStringBuilder.setSpan( new AbsoluteSizeSpan(20), // Unit: px. start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); // Set relative size. // spannableStringBuilder.setSpan( // new RelativeSizeSpan(2.0f), // Multiple of TextView default font size. // start, end, // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE // ); }
-
-
Özel yazı tipleri (Typeface) ayarlayın.
-
Özel yazı tiplerini
asset/fonts/dizininden yükleyin.private Typeface mTypeface; public CustomStyleWebVttResolver(Context context) { super(context); initializeFonts(context); } private void initializeFonts(Context context) { try { // Load font from assets/fonts/. mTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/LongCang.ttf"); } catch (Exception e) { Log.e("Font", "Failed to load font", e); mTypeface = Typeface.DEFAULT; // Safe fallback. } } -
Özel yazı tiplerini altyazılara uygulayın.
@Override protected void applyTextSpans(SpannableStringBuilder builder, VttContentAttribute attr, int start, int end) { // Apply custom font. // Must be placed after super.applyTextSpans() to override fonts possibly set by the parent class. // Calling super.applyTextSpans() is optional. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { builder.setSpan(new TypefaceSpan(mTypeface), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else { builder.setSpan(new CustomTypefaceSpan(mTypeface), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }Eski Android sürümleriyle uyumluluk: Android P (API 28) ve öncesi sürümlerdeki
TypefaceSpan,Typefacenesnesini doğrudan geçirmeyi desteklemediğinden özel birMetricAffectingSpanoluşturmanız gerekir./** * Custom Typeface Span class. * Inherits from MetricAffectingSpan to correctly apply Typeface during text drawing and measurement. * Solves the issue where standard TypefaceSpan cannot directly use a Typeface object. */ private static class CustomTypefaceSpan extends MetricAffectingSpan { // Custom font to apply. private final Typeface typeface; /** * Constructor. * * @param typeface Typeface object to apply (must not be null). */ public CustomTypefaceSpan(Typeface typeface) { this.typeface = typeface; } /** * Update text drawing state. * Called during actual text drawing to set the paint's font. * * @param tp TextPaint object used for drawing text. */ @Override public void updateDrawState(TextPaint tp) { tp.setTypeface(typeface); } /** * Update text measurement state. * Called during text layout calculation (e.g., width, line breaks) to ensure measurement matches actual drawing. * * @param p TextPaint object used for measuring text. */ @Override public void updateMeasureState(TextPaint p) { p.setTypeface(typeface); } }
-
-
Oynatıcı ile entegre edin.
-
Altyazı görünümünü başlatın.
// Initialize subtitleView. private void initSubtitleView() { // Get context. Context context = getContext(); // Create CustomStyleWebVttResolver. CustomStyleWebVttResolver mResolver = new CustomStyleWebVttResolver(context); // Create VttSubtitleView and pass CustomStyleWebVttResolver. VttSubtitleView mVttSubtitleView = new VttSubtitleView(context, mResolver); // Add to video container. rootView.addView(mVttSubtitleView); } -
Harici altyazı geri çağırmalarını bağlayın.
// Set subtitle listener. mAliPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleExtAdded(int trackIndex, String url) { mAliPlayer.selectExtSubtitle(trackIndex, true); } @Override public void onSubtitleShow(int trackIndex, long id, String data) { if (mVttSubtitleView != null) { // Show subtitle. mVttSubtitleView.show(id, data); } } @Override public void onSubtitleHide(int trackIndex, long id) { // Hide subtitle. mVttSubtitleView.dismiss(id); } @Override public void onSubtitleHeader(int i, String header) { if (!TextUtils.isEmpty(header)) { // Apply WebVTT header styles. mVttSubtitleView.setVttHeader(header); } } });
-
Yalnızca ses oynatma
Yalnızca ses oynatma elde etmek için video oynatmayı devre dışı bırakın. Prepare çağrısından önce PlayerConfig'i yapılandırın.
PlayerConfig config = aliPlayer.getConfig();
config.mDisableVideo = true; // Enable audio-only playback.
aliPlayer.setConfig(config);
Yazılım/donanım kod çözücü geçişi
Kod çözme yöntemini oynatma başlamadan önce değiştirin. Oynatma sırasındaki değişiklik etkili olmaz.
Android Oynatıcı SDK, enableHardwareDecoder anahtarıyla H.264 ve H.265 donanım kod çözme desteği sunar. Donanım kod çözme varsayılan olarak etkindir ve başlatma başarısız olursa otomatik olarak yazılım kod çözmeye geri döner. Örnek:
// Enable hardware decoding. Enabled by default.
aliPlayer.enableHardwareDecoder(true);
Oynatıcı donanımdan yazılım kod çözmeye otomatik olarak geçerse onInfo geri çağırmasını tetikler. Örnek:
mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
// Switched to software decoding.
}
}
});
H.265 uyarlamalı oynatma
Cihaz bulut tabanlı H.265 donanım kod çözme kara listesine ekliyse veya H.265 donanım kod çözme başarısız olursa uyarlamalı düşürme tetiklenir: Bir H.264 yedek akışı varsa oynatıcı bunu kullanır; yoksa H.265 yazılım kod çözmeye düşer.
Bu özellik, yalnızca istemci-bulut entegre uyarlamalı kod çözme ek hizmetini etkinleştirdiğinizde kullanılabilir. Lisans yetkilendirmesi için bir Yida formu göndererek başvurmanız gerekir.
İstemci-bulut entegre uyarlamalı kod çözme ek hizmeti şunları içerir: 1. Bulut tabanlı donanım kod çözme uyumluluk verilerinin dinamik teslimi; 2. H.265 akışlarının H.264 akışlarına uyarlamalı düşürülmesi.
-
SDK, ek hizmeti etkinleştirmeseniz bile donanım kod çözme hatası durumunda otomatik olarak yazılım kod çözmeye geçme yeteneğine sahiptir.
Yedek akış ayarlama örneği:
// Maintain a Map at the application layer to store key-value pairs of original URLs and backup URLs. When switching, query the backup URL in the Map based on the original URL.
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 "";
}
}
});
Ağ uyarlamalı video tanımı geçişi
HLS uyarlamalı bit hızı video akışları, ApsaraVideo VOD'daki video paketleme ve transkodlama şablon grubu aracılığıyla oluşturulabilir. Ayrıntılı işlemler için VOD için uyarlamalı bit hızı yapılandırma konusuna bakın.
-
ApsaraVideo VOD transkodlama tarafından oluşturulan uyarlamalı akışlar için Vid oynatma kullanıyorsanız uyarlamalı video akışını almak ve oynatmak için varsayılan oynatma tanımı listesini
DEFINITION_AUTOolarak belirtmeniz gerekir. Aksi takdirde oynatıcı varsayılan mantığa göre düşük tanımlı bir video akışı seçer. Varsayılan tanım oynatma sırası için Birden fazla tanım transkodlandığında oynatıcı SDK'sı varsayılan olarak hangi tanımı oynatır? konusuna bakın. VidAuth oynatma için tanım listesini belirtme örneği:VidAuth vidAuth = new VidAuth(); List<Definition> list = new ArrayList<>(); list.add(Definition.DEFINITION_AUTO); vidAuth.setDefinition(list);
Android oynatıcı SDK'sı uyarlamalı bit hızlı HLS ve DASH video akışlarını destekler. prepare başarılı olduktan sonra getMediaInfo yöntemini çağırarak her bit hızı akışı hakkında bilgi alabilirsiniz; bu bilgi TrackInfo olarak adlandırılır. Örnek:
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
Oynatma sırasında oynatıcının selectTrack yöntemini çağırarak oynatılan bit hızı akışını değiştirebilirsiniz. Değer AUTO_SELECT_INDEX olduğunda uyarlamalı bit hızı geçişini etkinleştirir. Örnek:
int index = trackInfo.getIndex();
// Switch bitrate.
aliPlayer.selectTrack(index);
// Switch bitrate and enable adaptive switching.
aliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX);
Geçiş sonucu OnTrackChangedListener geri çağırması aracılığıyla döndürülür (selectTrack çağrılmadan önce ayarlanır). Örnek:
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) {
// Switch succeeded.
}
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
// Switch failed. Obtain the failure reason from errorInfo.getMsg().
}
});
İsteğe bağlı: Oynatıcının selectTrack yöntemini çağırarak uyarlamalı bit hızına geçmeden önce config içindeki uyarlamalı bit hızı (ABR) geçişinin üst sınırını ayarlayarak beklenmeyen bit hızlarına otomatik geçişi önleyebilirsiniz. Örnek: (Aşağıdaki kodu oynatıcı prepare yöntemini çağırmadan veya oynatma listesi oynatıcısı moveTo yöntemini çağırmadan önce çağırmanızı öneririz.)
PlayerConfig config = aliPlayer.getConfig();
config.mMaxAllowedAbrVideoPixelNumber = 921600; // Set the pixel count upper limit for ABR definition to 921600 (width × height = 1280 × 720), so ABR allows switching to definitions with pixel counts ≤ this value.
aliPlayer.setConfig(config);
Ekran görüntüsü
Android oynatıcı SDK'sı, mevcut video için snapshot arayüzü tarafından uygulanan bir ekran görüntüsü özelliği sağlar. Orijinal veriyi yakalar ve bunu bitmap olarak döndürür. Geri çağrı arayüzü OnSnapShotListener'dir. Örnek:
// Set screenshot callback.
aliPlayer.setOnSnapShotListener(new OnSnapShotListener(){
@Override
public void onSnapShot(Bitmap bm, int with, int height){
// Obtain the bitmap and image dimensions.
}
});
// Capture the current playback frame.
aliPlayer.snapshot();
Önizleme oynatma
ApsaraVideo VOD'u yapılandırarak Android oynatıcı SDK'sı önizleme oynatmayı uygulayabilir; hem VidSts hem de VidAuth oynatma yöntemlerini destekler (VOD için VidAuth önerilir). Yapılandırma ve kullanım talimatları için Videoları önizleyin konusuna bakın.
Önizleme oynatmayı yapılandırdıktan sonra VidPlayerConfigGen.setPreviewTime() yöntemini kullanarak oynatıcı için önizleme süresini ayarlayın. VidSts oynatma örneği:
VidSts vidSts = new VidSts;
....
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
configGen.setPreviewTime(20);// 20-second preview.
vidSts.setPlayConfig(configGen);// Set for playback source.
...
Önizleme süresi ayarlandığında sunucu, Android oynatıcı SDK'sı aracılığıyla oynatılırken tam video yerine yalnızca önizleme dönemi içindeki içeriği döndürür.
VidPlayerConfigGen sunucu istek parametrelerini destekler. İstek parametresi açıklaması.
FLV ve MP3 video formatları önizleme oynatmayı desteklemez.
Kara liste ayarlama
Android oynatıcı SDK'sı bir donanım kod çözme kara listesi mekanizması sağlar. Donanım kod çözmeyi açıkça kullanamayan cihazlar için etkisiz işlemlerden kaçınmak amacıyla doğrudan yazılım kod çözme kullanılır. Örnek:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.model="Lenovo K320t";
AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );
Kara liste, uygulama kapatıldıktan sonra otomatik olarak geçersiz hale gelir.
Referer ayarlama
PlayerConfig kullanarak istek Referer'ını ayarlayın. Konsoldaki Referer kara listesi/beyaz listesi ile birleştirildiğinde erişim izinlerini kontrol eder. Örnek:
// Get configuration first.
PlayerConfig config = aliPlayer.getConfig();
// Set referer, for example: http://example.aliyundoc.com. (Note: Include the protocol part when setting the referer.)
config.mReferrer = referrer;
....// Other settings.
// Set configuration for the player.
aliPlayer.setConfig(config);
UserAgent ayarlama
PlayerConfig kullanarak istek UserAgent'ini ayarlayın. Oynatıcı UA'yı isteklere dahil eder. Örnek:
// Get configuration first.
PlayerConfig config = aliPlayer.getConfig();
// Set UA.
config.mUserAgent = "UserAgent to set";
....// Other settings.
// Set configuration for the player.
aliPlayer.setConfig(config);
Ağ yeniden deneme süresini ve sayısını yapılandırma
PlayerConfig kullanarak ağ zaman aşımı ve yeniden deneme sayısını ayarlayın. Örnek:
// Get configuration first.
PlayerConfig config = aliPlayer.getConfig();
// Set network timeout duration, in milliseconds.
config.mNetworkTimeout = 5000;
// Set timeout retry count. The interval between retries is networkTimeout. networkRetryCount=0 means no retry; the retry policy is determined by the app. Default value is 2.
config.mNetworkRetryCount=2;
....// Other settings.
// Set configuration for the player.
aliPlayer.setConfig(config);
NetworkRetryCount ayarlanırsa ve bir ağ sorunu yüklemeye neden olursa oynatıcı NetworkRetryCount kez yeniden dener ve her aralık mNetworkTimeout'dur.
Birden çok yeniden denemeden sonra yükleme durumu devam ederse
onErrorolayı tetiklenir ve ErrorInfo.getCode()=ErrorCode.ERROR_LOADING_TIMEOUT olur.NetworkRetryCount 0 olarak ayarlanırsa ağ yeniden denemesi zaman aşımına uğradığında oynatıcı
onInfoolayını tetikler ve InfoBean.getCode()=InfoCode.NetworkRetry olur. Bu noktada ağı yeniden yüklemek için oynatıcınınreloadyöntemini çağırabilir veya başka şekilde işleyebilirsiniz.
Önbellek ve gecikme kontrolünü yapılandırma
Android oynatıcı SDK'sı PlayerConfig aracılığıyla önbelleği ve gecikmeyi kontrol etmek için arayüzler sağlar. Örnek:
HTTP üst bilgilerini ayarlama
PlayerConfig yöntemini kullanarak oynatıcıdaki isteklere HTTP üst bilgi parametreleri ekleyebilirsiniz. Örnek:
// Get configuration first.
PlayerConfig config = aliPlayer.getConfig();
// Define headers.
String[] headers = new String[1];
headers[0]="Host:example.com";// For example, set Host in the header.
// Set headers.
config.setCustomHeaders(headers);
....// Other settings.
// Set configuration for the player.
aliPlayer.setConfig(config);
Resim İçinde Resim
Ayrıntılı kod örnekleri için API-Example Resim İçinde Resim oynatma (PictureInPicture) modülüne bakın. Android için ApsaraVideo Player SDK'sına yönelik bu Java tabanlı örnek proje, geliştiricilerin çekirdek SDK entegrasyon özelliklerini hızlıca öğrenmesine yardımcı olur.
Yordam:
-
AndroidManifest.xmldosyasında Resim İçinde Resim izinlerini beyan edin.<activity android:name=".PictureInPictureActivity" android:exported="true" android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" /> -
Hedef
Activity'yi Resim İçinde Resim moduna geçirin.Rational aspectRatio = new Rational(16, 9); // Aspect ratio for Picture-in-Picture; adjust based on your business needs. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build());Resim İçinde Resim modunu OnClick (tıklama olayı), uygulamadan çıkarken veya uygulamaya dönerken tetikleyebilirsiniz. Uygulama yöntemleri:
OnClick (tıklama olayı) tetikleme
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Rational aspectRatio = new Rational(16, 9); // Aspect ratio for Picture-in-Picture. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build()); } });Uygulamadan çıkarken tetikleme
@Override protected void onUserLeaveHint() { super.onUserLeaveHint(); Rational aspectRatio = new Rational(16, 9); // Aspect ratio for Picture-in-Picture. PictureInPictureParams.Builder pipBuilder = new PictureInPictureParams.Builder(); pipBuilder.setAspectRatio(aspectRatio); enterPictureInPictureMode(pipBuilder.build()); Log.e(TAG, "Picture-in-Picture onUserLeaveHint"); }Uygulamaya dönerken tetikleme
@Override public void onBackPressed() { super.onBackPressed(); // Trigger from back press. enterPictureInPictureMode(); } -
Resim İçinde Resim görünümünün/görünmemesinin kullanıcı arayüzünü işleyin.
@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); if (isInPictureInPictureMode) { // Handle entering Picture-in-Picture mode. // hide UI Log.e(TAG, "Entered Picture-in-Picture mode"); } else { // Handle exiting Picture-in-Picture mode. // show UI Log.e(TAG, "Exited Picture-in-Picture mode"); } }
Canlı RTS düşürme
Ayrıntılı kod örnekleri için API-Example RTS ultra düşük gecikmeli canlı oynatma (RtsLiveStream) modülüne bakın. Android için ApsaraVideo Player SDK'sına yönelik bu Java tabanlı örnek proje, geliştiricilerin çekirdek SDK entegrasyon özelliklerini hızlıca öğrenmesine yardımcı olur.
Sol/sağ ses kanallarını değiştirme
Android oynatıcı SDK'sı, çıktı ses kanalını ayarlamak için setOutputAudioChannel yöntemini sağlar. Giriş kaynağı stereo ise bu yöntemi kullanarak sol veya sağ kanala geçiş yapabilirsiniz. Giriş kaynağı mono ise ayarlamanın etkisi olmaz.
Çıktı ses kanalı ayarı hem ses işleme hem de PCM veri geri çağırmalarını etkiler.
/*
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_LEFT switches to left channel playback,
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_RIGHT switches to right channel playback,
OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_NONE does not switch channels, maintaining the input source channels.
*/
aliPlayer.setOutputAudioChannel();
Ses akışlarını ayrıştırma
Ses ve video akışı verilerini almak için bir dinleyici ayarlayın. Akışlar şifrelenmemiş olmalıdır çünkü şifreli akışlar ayrıştırılamaz.
Video arka plan rengini ayarlama
Android oynatıcı SDK'sı, oynatıcı işlemesi için arka plan rengi ayarlamayı destekler. Arayüz ve kullanım talimatları:
Arayüz örneği
/**
* Set video background color.
*
* @param color ARGB
*/
abstract public void setVideoBackgroundColor(int color);
Kullanım talimatları
// Parameter is an 8-digit hexadecimal value. Each pair of digits represents A (alpha transparency), R (red), G (green), B (blue) in order.
// For example, 0x0000ff00 represents green.
aliPlayer.setVideoBackgroundColor(0x0000ff00);
vidAuthBelirtilen oynatma alanını ayarlama
vidAuth kullanarak vid için alan gibi alanları belirtebilirsiniz. Desteklenen alanlar için GetPlayInfo istek parametreleri konusuna bakın. Arayüz ve kullanım talimatları:
Arayüz örneği
/**
* Set playback parameters.
*
* @param playConfig Playback parameters.
*/
public void setPlayConfig(VidPlayerConfigGen playConfig);
Kullanım talimatları
playDomain alanını eklemek için VidPlayerConfigGen'in addPlayerConfig yöntemini kullanın.
vidAuth = new VidAuth();
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
// Add playDomain field. For other fields you can add, refer to
//https://www.alibabacloud.com/help/zh/vod/developer-reference/api-vod-2017-03-21-getplayinfo
configGen.addPlayerConfig("playDomain", "com.xxx.xxx");
vidAuth.setPlayConfig(configGen);
H.266 kod çözme eklentisi
H.266 (VVC/Versatile Video Coding), eşdeğer kalitede bit hızını önemli ölçüde azaltan bir sonraki nesil video kodlama standardıdır. H.266 kod çözme yeteneği, isteğe bağlı entegrasyon için bağımsız olarak bir eklenti olarak paketlenmiştir.
Ön koşullar
Oynatıcı/entegre SDK sürümü V7.6.0 veya üzeri.
Professional Edition lisans yetkilendirmesi tamamlandı. Oynatıcı SDK lisansı edinin.
H.266 kod çözme eklentisine sahip ApsaraVideo Player, yalnızca ApsaraVideo VOD ses ve video transkodlama tarafından transkodlanan H.266 videolarını destekler.
Eklentiyi entegre etme
Eklentiyi etkinleştirme
Android oynatıcı SDK 7.7.0'dan başlayarak eklenti entegrasyondan sonra varsayılan olarak etkindir ve manuel etkinleştirme gerektirmez.
AliPlayerGlobalSettings.enableCodecPlugin("vvc", true);
İlgili hata kodları
H.266 kod çözme eklentisi hata kodları için Tüm platformlardaki oynatıcılar için yaygın sorunlar konusuna bakın.
Oynatma kaynaklarını otomatik yenileme
Oynatma kaynakları için otomatik yenilemeyi etkinleştirmek, kimlik doğrulama mekanizmaları altında kaynak süresinin dolmasından kaynaklanan oynatma kesintilerini önler.
Ön koşullar
Oynatıcı/entegre SDK sürümü V7.9.0 veya üzeri.
VidAuth kaynağını kullanma veya işletmenizin URL imzalama yapılandırması bulunması.
VidAuth kaynağı
Arayüz örneği
/**
* Set the listener for VidAuth source expiration events.
*
* This feature enables automated VidAuth source refresh to avoid playback interruptions
* caused by expiration. When the listener is triggered, you can refresh the VidAuth source
* and return the updated VidAuth using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener The interface for listening to VidAuth source expiration events. See {@link OnVidAuthExpiredListener}.
*/
abstract public void setOnVidAuthExpiredListener(OnVidAuthExpiredListener listener);
Özellik bileşenleri
UrlSource kaynağı
Arayüz örneği
/**
* Set the listener for URL source expiration events.
*
* This feature enables URL refresh to avoid playback interruptions caused by
* URL expiration due to authentication. When the listener is triggered,
* you can refresh the URL source and return the updated URL source using {@link SourceRefreshCallback#onSuccess}.
*
* @param listener Listener for handling URL source expiration events. See {@link OnURLSourceExpiredListener}.
*
* <p>For more information on configuring URL authentication, see
* <a href="https://www.alibabacloud.com/help/zh/vod/user-guide/configure-url-signing?spm=a2c4g.11186623.0.0.560c4140fGh8MW">URL authentication documentation</a>.</p>
*/
abstract public void setOnURLSourceExpiredListener(OnURLSourceExpiredListener listener);
Özellik bileşenleri
Ek yardımcı işlevler
kimlik doğrulama türü A örneği olarak kullanılır.
Bağlı NIC'i değiştirme
Android oynatıcı SDK'sı, ağ anomalileri sırasında NIC'leri otomatik olarak değiştirmek ve kaynak oynatmanın kararlılığını sağlamak için AliPlayerGlobalSettings.enableSwitchNIC yöntemini sağlar. Örnek:
Bu, yalnızca anahtar etkinleştirildiğinde ve birden çok NIC bulunduğunda etkili olur.
AliPlayerGlobalSettings.enableSwitchNIC(true);
Ses geliştirmesi
Android oynatıcı SDK'sı, ses oynatma deneyimini iyileştirmek için ses normalleştirme, ses geliştirmesi ve surround ses özelliklerine sahip bir ses geliştirme eklentisi sağlar.
Özellik tanıtımı
-
Ses normalleştirme: Tüm ses içeriğini tutarlı bir ses seviyesine otomatik olarak ayarlar; aşırı düşük veya yüksek orijinal sese sahip videolar için oynatma deneyimini önemli ölçüde iyileştirir.
Desteklenen kanallar: Mono / Stereo / 5.1 / 7.1.
Desteklenen örneklem oranları: 16kHz / 44.1kHz / 48kHz.
-
Ses geliştirmesi: Diyaloğu akıllıca geliştirirken orijinal tınıyı korur; gürültülü sahnelerde sesleri daha net ve parlak hale getirir.
Desteklenen kanallar: Stereo.
Desteklenen örneklem oranları: 44.1kHz / 48kHz.
-
Surround ses: Çok kanallı ve stereo videolara sanal surround işlemesi uygular; kulaklıklarda veya standart cihazlarda sürükleyici bir deneyim sağlar. 3DSurround (stereo surround) ve MegaBass (süper bas) modlarını içerir.
Desteklenen kanallar: Mono / Stereo / 5.1 / 7.1.
Desteklenen örneklem oranları: 44.1kHz / 48kHz.
Ön koşullar
Oynatıcı SDK sürümü V7.13.0 veya üzeri.
Professional Edition Lisans yetkilendirmesi alındı. Oynatıcı SDK lisansı edinin.
Ses geliştirmesi için ses kaynağı desteği:
VOD akışları: ApsaraVideo VOD ses ve video transkodlama kullanılmalıdır.
Canlı akışlar: Herhangi bir kaynağı destekler.
Eklentiyi entegre etme
Maven entegrasyonu (önerilir)
Uygulamanızın build.gradle dosyasına belirtilen eklenti sürümü için bağımlılığı ekleyin:
En son Android oynatıcı SDK sürümleri için Android SDK sürüm geçmişi konusuna bakın.
// x.x.x matches the player SDK version number.
implementation 'com.aliyun.sdk.android:AlivcAudioEnhanceFilter:x.x.x'
Yerel entegrasyon
Download the latest Android player SDK and copy the AlivcAudioEnhanceFilter package to your project's libs directory (create it manually if it doesn't exist). For details, see Local integration.
Özellik arayüzleri
setFilterValid
Ses geliştirmesi için ana anahtarı kontrol eder. Ses geliştirme filtresi için target adı audioEnhance'dir. Devre dışı bırakıldığında üç alt özelliğin tümü etkin değildir (varsayılan olarak devre dışıdır).
player.setFilterValid("audioEnhance", true); // Enable.
player.setFilterValid("audioEnhance", false); // Disable.
setFilterConfig
FilterConfig değerini prepare öncesinde ayarlayın. Oynatma başladıktan sonra etkili olur.
FilterConfig filterConfig = new FilterConfig();
FilterConfig.Filter filterItem = new FilterConfig.Filter("audioEnhance");
FilterConfig.FilterOptions opts = new FilterConfig.FilterOptions();
// Surround sound.
opts.setOption("enable_surround", true);
opts.setOption("surround_effect_type", "3DSurround"); // Type must be set together with enable_surround on first use.
// Voice enhancement.
opts.setOption("enable_dialoguenhance", true);
opts.setOption("dialoguenhance_voice", 1.0f); // 1.0 ~ 10.0. Voice must be set together with enable_dialoguenhance on first use.
// Volume normalization.
opts.setOption("enable_normalizer", true);
filterItem.setOptions(opts);
filterConfig.addFilter(filterItem);
player.setFilterConfig(filterConfig);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updateFilterConfig
Oynatıcı hazırlığı sırasında veya sonrasında parametreleri dinamik olarak ayarlamak için bu arayüzü çağırarak bunları güncelleyin.
updateFilterConfig çağrısının prepare öncesinde etkisi yoktur. İlk yapılandırma için setFilterConfig kullanın.
AVPFilterOptions *opts = [[AVPFilterOptions alloc] init];
[opts setOptions:@"enable_surround" value:@YES];
[opts setOptions:@"surround_effect_type" value:@"3DSurround"]; // If not the first time enabling surround, this Type setting is invalid because initialization is already complete.
[player updateFilterConfig:@"audioEnhance" options:opts];
Surround ses türü ("3DSurround" / "MegaBass") ve ses geliştirmesi gücü (dialoguenhance_voice), ilk kullanımda enable niteliği ile birlikte ayarlanmalıdır. Aksi takdirde başlatma için varsayılan değerler kullanılır (surround ses varsayılan olarak "3DSurround", ses gücü varsayılan olarak 1.0) ve bunlar oynatma sırasında değiştirilemez.
Performans
Oynatma senaryosunu ayarlama
Oynatma senaryosunu ayarlamak, optimal parametreleri (arabellek ayarları ve özellik anahtarları dahil) otomatik olarak yapılandırır. setConfig arayüzü aracılığıyla özel parametre ayarlarıyla uyumludur (özel ayarlar önceliklidir).
Oynatma senaryosunu ayarladıktan sonra parametre yapılandırmasını
getConfigarayüzünü kullanarak görüntüleyebilirsiniz.
Arayüz örneği
/**
* Set the player scenario.
*
* @param scene
*/
abstract public void setPlayerScene(PlayerScene scene);
Oynatma senaryoları
public enum PlayerScene {
/**
* Scenario: none.
*/
NONE,
/**
* Long video scenario: applies to videos longer than 30 minutes.
*/
LONG,
/**
* Medium video scenario: applies to videos between 5 and 30 minutes.
*/
MEDIUM,
/**
* Short video scenario: applies to videos up to 5 minutes.
*/
SHORT,
/**
* Live scenario.
*/
LIVE,
/**
* Ultra-low latency live scenario.
*/
RTS_LIVE
}
Kullanım talimatları
// Set short video scenario.
aliPlayer.setPlayerScene(PlayerScene.SHORT)
// Set medium video scenario.
aliPlayer.setPlayerScene(PlayerScene.MEDIUM)
// Set long video scenario.
aliPlayer.setPlayerScene(PlayerScene.LONG)
// Set live scenario.
aliPlayer.setPlayerScene(PlayerScene.LIVE)
Ön işleme
Android oynatıcı SDK'sı, oynatma başlamadan önce ilk karenin hızlı bir şekilde işlenmesini destekler; bu, başlatma hızını iyileştirebilir.
Bu özellik varsayılan olarak devre dışıdır.
Karenin hazır olduğu anda
Viewüzerine işlenmesini sağlamak içinPrepareçağrılmadan önceViewayarlanmalıdır.-
Bu özelliği etkinleştirmek, hazırlık başarı ve ilk kare işleme olaylarının tetikleme sırasını etkiler: Bu özellik olmadan hazırlık başarısı ilk kare işlemesinden önce tetiklenir; bu özellik ile kod çözme ve işleme hızındaki farklar nedeniyle ilk kare işlemesi hazırlık başarısından önce tetiklenebilir ancak bu oynatmayı etkilemez.
Örnek:
aliPlayer.setOption(ALLOW_PRE_RENDER, 1);
Yerel önbellek
Ayrıntılı kod örnekleri için API-Example Video ön yükleme (Preload) modülüne bakın. Android için ApsaraVideo Player SDK'sına yönelik bu Java tabanlı örnek proje, geliştiricilerin çekirdek SDK entegrasyon özelliklerini hızlıca öğrenmesine yardımcı olur.
Yerel önbellek, tekrarlanan oynatma için başlatma hızını ve atlama hızını iyileştirir, takılmayı azaltır ve bant genişliğinden tasarruf sağlar.
Yerel önbelleği etkinleştirme
Yerel önbellek varsayılan olarak devre dışıdır. Kullanmak için AliPlayerGlobalSettings ve enableLocalCache kullanarak manuel olarak etkinleştirin. Örnek:
-
Video oynatma URL'leri kimlik doğrulama parametreleri içeriyorsa parametreler önbelleğe alma ve oynatma arasında değişir. Farklı kimlik doğrulamaları altında aynı URL için önbellek isabet oranını artırmak için karma değeri (örn. MD5) hesaplamadan önce
setCacheUrlHashCallbackaracılığıyla kimlik doğrulama parametrelerini kaldırın. Örneğin,http://****.mp4?aaagibi bir URL için karma değerinihttp://****.mp4kullanarak hesaplayın. Ancak şifreli m3u8 videoları için keyURL'lerden kimlik doğrulama parametrelerini kaldırırsanız farklı videolar aynı anahtara isabet edebilir ve bu oynatma hatasına neden olabilir. Çözüm:setCacheUrlHashCallbackgeri çağrısında alanı kontrol edin ve yalnızca oynatma alanları (http(s)://xxxxx.m3u8?aaaa) için kimlik doğrulama parametrelerini kaldırın; keyURL alanları (http(s)://yyyyy?bbbb) için kaldırmayın. HLS şifreli video M3U8 oynatma listesini almak için curl kullanın; burada playURL M3U8 adresi ve keyURL AES-128 şifre çözme anahtarı adresidir. Örnek terminal çıktısı:# playURL: M3U8 playlist request C:\Users\futan>curl "https://videxxxv.cc/a003xxx2a-hd-encrypt-stream.m3u8?MtsHlsUriToken=uheAz07oi-jlo9CeIU6LxxxAr4a3WtzrJXnCn4ClS44dTYHCQGmXBlo7TyuPLE0a&auth_key=17xxxrmonwFHJ" #EXTM3U #EXT-X-VERSION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 # keyURL: AES-128 encryption key address #EXT-X-KEY:METHOD=AES-128,URI="https://apxxx.cc/decrypt?Ciphertext=NWNiNDQyN2MtNjV1ZS00ZWIwLTk0YTAtNTJhOWIyZWV1OTY2MzdoRTJ6TjVxcXkweFY2xxxNCt4OGNFRGNReHRG&MtsHlsUriToken=uheAz07oi-jlo9CeIU6LxxxAr4a3WtzrJXnCn4ClS44dTYHCQGmXBlo7TyuPLE0a" #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00001.ts?auth_key=1706560316-65b7xxx39f1d6c77 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00002.ts?auth_key=1706560316-65b7xxxe8eca2faf #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00003.ts?auth_key=1706560316-65b7xxx50c6981b3 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00004.ts?auth_key=1706560316-65b7xxxf7228c594 #EXTINF:10.000000, e9012989ecd8e987eb7349d84d3b06d8-hd-encrypt-stream-00005.ts?auth_key=1706560316-65b7xxx6dc68c35d -
Sunucu aynı medya dosyasına işaret eden hem HTTP hem de HTTPS protokollerini destekliyorsa karma değerini hesaplamadan önce protokolü kaldırın veya standartlaştırın. Örneğin:
https://****.mp4vehttp://****.mp4URL'leri için karma değerini****.mp4kullanarak hesaplayın.https://****.mp4URL'si için karma değerini hesaplamadan öncehttp://****.mp4olarak standartlaştırın.
-
Oynatıcı SDK sürümü 5.5.4.0 ve sonrası için video oynatma URL'si kimlik doğrulama parametreleri içeriyor ve HLS protokolü kullanıyorsa kimlik doğrulama modları arasında seçim yapmak için
PlayerConfig.mEnableStrictAuthModedeğerini ayarlayabilirsiniz (varsayılan olarak eski sürümler için false; sürüm 7.13.0 ve sonrası için true):Katı olmayan kimlik doğrulama (false): Kimlik doğrulama önbelleğe alınır. Daha önce medyanın yalnızca bir kısmı önbelleğe alındıysa oynatıcı sonraki istekler için önbelleğe alınan kimlik doğrulamayı kullanır. URL kimlik doğrulamasının kısa bir geçerlilik süresi varsa veya uzun bir duraklatmadan sonra oynatma devam ederse kimlik doğrulamanın süresi dolabilir. Kimlik doğrulama süresinin dolmasını işlemek için oynatma kaynaklarını otomatik yenileme ile entegre edin.
Katı kimlik doğrulama (true): Kimlik doğrulama önbelleğe alınmaz. Her başlatmada kimlik doğrulama gerçekleşir ve ağ olmadığında başlatma başarısız olur.
Tek bir URL için yerel önbelleği etkinleştirme veya devre dışı bırakma
Belirli bir URL için yerel önbelleği etkinleştirmek veya devre dışı bırakmak için player config içinde ayarlayın.
// Get configuration first.
PlayerConfig config = aliPlayer.getConfig();
// Whether to enable local cache for the playback URL. Default is true. When global local cache is enabled and this is set to true, local cache takes effect for this URL. If set to false, local cache is disabled for this URL.
config.mEnableLocalCache = false;
....// Other settings.
// Set configuration for the player.
aliPlayer.setConfig(config);
Ön yükleme
Ön yükleme, video önbellekleme için bellek kullanımını ayarlayarak video başlatma hızını iyileştiren yerel önbelleğin yükseltmesidir.
Ön yükleme sınırlamaları:
Şu anda MP4, MP3, FLV ve HLS gibi tekli medya dosyalarının yüklenmesini destekler.
Android oynatıcı SDK'sı, ön yükleme sırasında varsayılan olarak otomatik ağ kaynağı zamanlaması sağlar; bu, devam eden video oynatma üzerinde ön yükleme ağ isteklerinin etkisini azaltır. Otomatik zamanlama stratejisi, şu anda oynatılan videonun arabelleği belirli bir eşiğe ulaştıktan sonra ön yükleme isteklerine izin verir. Gerçek zamanlı ön yükleme isteklerini kendiniz kontrol etmek için aşağıdaki yöntemi kullanarak bu stratejiyi devre dışı bırakın:
AliPlayerGlobalSettings.enableNetworkBalance(false);
Yerel önbelleği etkinleştirin. Ayrıntılı adımlar için Yerel önbellek konusuna bakın.
-
Veri kaynağını ayarlayın.
VidAuth (önerilir)
VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid info");// Required parameter: Video ID. vidAuth.setPlayAuth("<yourPlayAuth>");// Required parameter: Playback credential, generated by calling the GetVideoPlayAuth API of VOD. vidAuth.setRegion("Access region");// For player SDK version 5.5.5.0 and later, this parameter is deprecated and not required; the player automatically parses the region. For versions before 5.5.5.0, this parameter is required; the default VOD access region is cn-shanghai. vidAuth.setQuality("Selected definition") //"AUTO" represents adaptive bitrate.VidSts
VidSts vidSts = new VidSts(); vidSts.setVid("Vid info");// Required parameter: Video ID. vidSts.setAccessKeyId("<yourAccessKeyId>");// Required parameter: Access key ID of the STS temporary AK pair, generated by calling the AssumeRole API of STS. vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Required parameter: Access key of the STS temporary AK pair, generated by calling the AssumeRole API of STS. vidSts.setSecurityToken("<yourSecurityToken>");// Required parameter: STS security token, generated by calling the AssumeRole API of STS. vidSts.setRegion("Access region");// Required parameter: VOD access region; default is cn-shanghai. vidSts.setQuality("Selected definition") //"AUTO" represents adaptive bitrate.UrlSource
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback address");// Required parameter: Playback address, which can be a third-party VOD address or an Alibaba Cloud VOD playback address. -
Görev parametrelerini ayarlayın.
NotYalnızca çoklu bit hızlı videolar için geçerlidir.
setDefaultBandWidth,setDefaultResolutionveyasetDefaultQualityseçeneklerinden birini seçin.PreloadConfig preloadConfig = new PreloadConfig(); // Set preloading bitrate for multi-bitrate streams. preloadConfig.setDefaultBandWidth(400000); // Set preloading resolution for multi-bitrate streams. preloadConfig.setDefaultResolution(640 * 480); // Set preloading quality for multi-bitrate streams. preloadConfig.setDefaultQuality("FD"); // Set preloading duration. preloadConfig.setDuration(1000); -
Görev dinleyicisi ekleyin.
-
Görevi oluşturun ve ön yüklemeyi başlatmak için
MediaLoaderV2örneğine ekleyin.VidAuth (önerilir)
// Build preloading. PreloadTask mPreloadTask = new PreloadTask(vidAuth, preloadConfig); // Get MediaLoaderV2 instance. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add task and start preloading. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl)VidSts
// Build preloading. PreloadTask mPreloadTask = new PreloadTask(vidSts, preloadConfig); // Get MediaLoaderV2 instance. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add task and start preloading. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl);UrlSource
// Build preloading. PreloadTask mPreloadTask = new PreloadTask(urlSource, preloadConfig); // Get MediaLoaderV2 instance. MediaLoaderV2 mediaLoaderV2 = MediaLoaderV2.getInstance(); // Add task and start preloading. String taskId = mediaLoaderV2.addTask(mPreloadTask, PreloadListenerImpl) -
İsteğe bağlı: Görevleri yönetin.
mediaLoaderV2.cancelTask(taskId);// Cancel preloading task with specified task ID. mediaLoaderV2.pauseTask(taskId);// Pause preloading task with specified task ID. mediaLoaderV2.resumeTask(taskId);// Resume preloading task with specified task ID. -
İsteğe bağlı: Yüklenen dosyaları silin.
Alan tasarrufu sağlamak için gerektiğinde yüklenen dosyaları silin. Android oynatıcı SDK'sı bir silme arayüzü sağlamaz; dosyaları uygulamanızdaki yükleme dizininden silin.
Dinamik ön yükleme
Dinamik ön yükleme stratejisi, entegratörlerin hem şu anda oynatılan videonun önbelleğini hem de ön yüklenen öğelerin sayısını ve önbelleğini kontrol etmesine olanak tanır; bu, oynatma deneyimi ile maliyet yükü arasında denge kurar.
Çoklu bit hızlı HLS videolarının ön yüklenmesi
listPlayer + çoklu bit hızlı HLS video oynatma senaryolarında entegratörler mevcut oynatma tanımıyla eşleşen akışları ön yükleyebilir ve iş ihtiyaçlarına göre ön yükleme modlarını seçebilir.
İndirme hızını alma
getExtraValue arayüzü tarafından uygulanan onInfo geri çağrısı aracılığıyla mevcut video indirme hızını alın. Örnek:
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentDownloadSpeed){
// Current download speed.
long extraValue = infoBean.getExtraValue();
}
}
});
Ağ özellikleri
HTTPDNS
HTTPDNS, alan adlarını belirli sunuculara HTTP üzerinden çözerek DNS ele geçirme risklerini azaltır ve daha hızlı, daha kararlı çözümleme sağlar.
ApsaraVideo Player SDK, Alibaba Cloud CDN alan adları için geliştirilmiş HTTPDNS sağlar; hassas CDN zamanlaması ve gerçek zamanlı çözümlemeyi destekler.
Geliştirilmiş HTTPDNS kullanım örneği
Geliştirilmiş HTTPDNS yalnızca Alibaba Cloud CDN alan adları için hizmet sağlar. Alan adınızın bir Alibaba Cloud CDN alan adı olduğundan ve doğru yapılandırıldığından emin olun. VOD'da CDN alan adları ekleme için Hızlandırılmış alan adı ekle konusuna bakın. Alibaba Cloud CDN.
// Enable enhanced HTTPDNS.
AliPlayerGlobalSettings.enableEnhancedHttpDns(true);
// Optional: Add HTTPDNS pre-resolution domains.
DomainProcessor.getInstance().addPreResolveDomain("player.***alicdn.com");
HTTP/2
Android oynatıcı SDK'sı, 5.5.0.0 sürümünden başlayarak HTTP/2'yi varsayılan olarak etkinleştirir.
Android oynatıcı SDK'sı, baştan engelleme sorununu önlemek ve oynatma performansını iyileştirmek için çoğullama kullanan HTTP/2 protokolünü destekler. Örnek:
AliPlayerGlobalSettings.setUseHttp2(true);
HTTP ön bağlantılı TCP
HTTP video oynatma istekleri (HTTPS olmayan) için TCP bağlantılarını önceden kurmak kullanıcı deneyimini önemli ölçüde iyileştirir, ağ bağlantı süresini azaltır, anında ve sürekli oynatma sağlar ve ağ ile sistem kaynağı kullanımını optimize eder. Kullanım:
// Domain format is host[:port]; port is optional. Separate multiple domains with semicolons (;).
// Global setting.
// Full interface uses the current string each time it's set (more - add, less - remove). Empty string stops pre-connection.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.SET_PRE_CONNECT_DOMAIN, "domain1;domain2");
Video indirme
Ayrıntılı kod örnekleri için API-Example Video indirme ve çevrimdışı oynatma (Download) modülüne bakın. Android için ApsaraVideo Player SDK'sına yönelik bu Java tabanlı örnek proje, geliştiricilerin çekirdek SDK entegrasyon özelliklerini hızlıca öğrenmesine yardımcı olur.
Android oynatıcı SDK'sı, VOD hizmetleri için bir video indirme özelliği sağlar; kullanıcıların ApsaraVideo Player kullanarak videoları yerel olarak önbelleğe almalarına olanak tanır. Standart indirme ve güvenli indirme olmak üzere iki indirme yöntemi sunar.
-
Standart indirme
İndirilen video verileri Alibaba Cloud tarafından şifrelenmez ve üçüncü taraf oynatıcılar tarafından oynatılabilir.
-
Güvenli indirme
İndirilen video verileri Alibaba Cloud tarafından şifrelenir. Üçüncü taraf oynatıcılar bunu oynatamaz. Yalnızca ApsaraVideo Player bunu oynatabilir.
Kullanım talimatları
Yalnızca VidSts ve VidAuth yöntemleri video indirmeyi destekler.
Oynatıcının video indirme özelliğini kullanmak için VOD konsolunda indirme modunu etkinleştirin ve yapılandırın. Ayrıntılı adımlar için Çevrimdışı indirme konusuna bakın.
Video indirme kaldığı yerden indirmeyi destekler.
Yordam
-
İsteğe bağlı: Güvenli indirme için şifreleme doğrulama dosyasını yapılandırın. Yalnızca güvenli indirme için gereklidir; standart indirme için gerekli değildir.
NotYapılandırılan şifreleme doğrulama dosyasının uygulama bilgilerinizle eşleştiğinden emin olun; aksi takdirde video indirme başarısız olur.
Güvenli indirme için VOD konsolunda oluşturulan anahtar dosyasını video indirme ve oynatma sırasında şifre çözme doğrulaması için oynatıcı SDK'sında yapılandırın. Anahtar dosyası oluşturma için Güvenli indirmeyi etkinleştir konusuna bakın.
Bunu Application'da bir kez yapılandırmanızı öneririz. Örnek:
PrivateService.initService(getApplicationContext(), "Path to encryptedApp.dat file"); // We recommend storing the encryptedApp.dat verification file on the phone and setting its local file path here. -
İndiriciyi oluşturun ve ayarlayın.
AliDownloaderFactory kullanarak bir indirici oluşturun. Örnek:
AliMediaDownloader mAliDownloader = null; ...... // Create downloader. mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // Configure download save path. mAliDownloader.setSaveDir("Save folder path"); -
Olay dinleyicilerini ayarlayın.
İndirici birden çok olay dinleyicisi sağlar. Örnek:
-
İndirme kaynağını hazırlayın.
prepareyöntemini kullanarak indirme kaynağını hazırlayın. İndirme kaynakları VidSts ve VidAuth yöntemlerini destekler. Örnekler:-
VidSts
// Create VidSts VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Vid information"); // Video ID (VideoId). aliyunVidSts.setAccessKeyId("<yourAccessKeyId>"); // AccessKey ID of the temporary STS AccessKey pair, generated by calling the AssumeRole operation of the Security Token Service (STS). aliyunVidSts.setAccessKeySecret("<yourAccessKeySecret>"); // AccessKey secret of the temporary STS AccessKey pair, generated by calling the AssumeRole operation of the Security Token Service (STS). aliyunVidSts.setSecurityToken("<yourSecurityToken>"); // Security Token Service (STS) token, generated by calling the AssumeRole operation of the Security Token Service (STS). aliyunVidSts.setRegion("region"); // The region of the video-on-demand (VOD) service. Default value: cn-shanghai. // If you have enabled HLS encryption parameter pass-through in the VOD console and the default parameter name is MtsHlsUriToken, // you must set the config and pass it into the vid, as shown below. // If you have not enabled HLS encryption parameter pass-through in the VOD console, skip the following code. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); aliyunVidSts.setPlayerConfig(vidConfig); // Prepare the download source mAliDownloader.prepare(aliyunVidSts) -
VidAuth
// Create VidAuth. VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid info");// Video ID. vidAuth.setPlayAuth("<yourPlayAuth>");// Playback credential, generated by calling VOD GetVideoPlayAuth API. vidAuth.setRegion("Access region");// For player SDK version 5.5.5.0 and later, this parameter is deprecated and not required; the player automatically parses the region. For versions before 5.5.5.0, this parameter is required; VOD access region default is cn-shanghai. // If you enabled HLS standard encryption parameter pass-through in VOD console with default parameter name MtsHlsUriToken, set config and pass it to vid as follows. VidPlayerConfigGen vidConfig = new VidPlayerConfigGen(); vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>"); vidAuth.setPlayerConfig(config); // Prepare download source. mAliDownloader.prepare(vidAuth);
NotKaynak dosya formatı indirilen dosya formatıyla eşleşir; değiştirilmesi desteklenmez.
VOD konsolunda HLS standart şifreleme parametre passthrough'unu varsayılan parametre adı MtsHlsUriToken ile etkinleştirdiyseniz HLS standart şifreleme parametre passthrough'u konusuna bakın, ardından yukarıda gösterildiği gibi VOD kaynağında MtsHlsUriToken değerini ayarlayın.
-
-
Hazırlık başarılı olduktan sonra indirme öğesini seçin ve indirmeyi başlatın.
Hazırlık başarılı olduktan sonra
OnPreparedListeneryöntemi çağrılır. Dönen TrackInfo, video akışı tanımı gibi bilgileri içerir. İndirmek için bir Track seçin. Örnek:public void onPrepared(MediaInfo mediaInfo) { // Download item prepared successfully. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // For example: download the first TrackInfo. mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // Start download. mAliDownloader.start(); } -
(İsteğe bağlı) İndirme kaynağını güncelleyin.
VidSts ve VidAuth süresinin dolmasını önlemek için indirme kaynağı bilgilerini güncelleyebilir ve indirmeyi başlatabilirsiniz. Örnek:
// Update download source. mAliDownloader.updateSource(VidSts); // Start download. mAliDownloader.start(); -
İndirme başarılı veya başarısız olduktan sonra indiriciyi serbest bırakın.
İndirme başarılı olduktan sonra indiriciyi serbest bırakmak için
releaseveyaonCompletiongeri çağrısındaonErroryöntemini çağırın. Örnek:mAliDownloader.stop(); mAliDownloader.release(); -
İsteğe bağlı: İndirilen dosyaları silin.
İndirme sırasında veya sonrasında indirilen dosyaları silebilirsiniz. Örnek:
// Delete file via object. mAliDownloader.deleteFile(); // Delete via static method; returns 0 if successful. AliDownloaderFactory.deleteFile("Path to download folder","Video ID","Video format","Downloaded video index");
Sonraki adımlar
İndirilen videolar ApsaraVideo Player kullanılarak oynatılabilir. Adımlar:
-
İndirme tamamlandıktan sonra video dosyasının mutlak yolunu alın.
String path = mAliDownloader.getFilePath(); -
Oynatma için VOD UrlSource aracılığıyla mutlak yolu ayarlayın.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback address");// Set absolute path of downloaded video. aliPlayer.setDataSource(urlSource);
Şifreli oynatma
VOD videoları HLS standart şifrelemeyi, Alibaba Cloud tescilli kriptografisini ve DRM şifrelemeyi destekler. Canlı videolar yalnızca DRM şifrelemeyi destekler. Şifreli oynatma için Şifreli oynatma konusuna bakın.
Yerel RTS oynatma
Android Oynatıcı SDK'sı, ultra düşük gecikmeli canlı yayın için Native RTS SDK'sını entegre eder. Android'de RTS akış çekme uygulayın.