Oynatma denetimi, görüntüleme ayarları, ses ve hız ayarlama ile çözünürlük değiştirme dahil olmak üzere Flutter için ApsaraVideo Player SDK'nın temel özelliklerini kullanın. Daha fazla bilgi için Gelişmiş özellikler ve API referansı konularına bakın.
Veri kaynağını (DataSource) ayarlayın
Flutter için ApsaraVideo Player SDK dört VOD oynatma yöntemini destekler: VidAuth (önerilir), VidSts, UrlSource ve şifreli oynatma.
Flutter için ApsaraVideo Player SDK yalnızca bir canlı yayın oynatma yöntemini destekler: UrlSource.
VOD oynatma
VidAuth kullanarak VOD oynatma (Önerilen)
Bir VOD videosunu VidAuth ile oynatmak için vid parametresini ses veya video kimliğine, playauth parametresini ise oynatma kimlik bilgisine ayarlayın.
Bir ses veya video dosyası yüklendikten sonra, ApsaraVideo VOD konsolunda Media Library > Audio/Video seçeneklerini seçerek veya SearchMedia işlemini çağırarak dosyanın kimliğini elde edebilirsiniz.
GetVideoPlayAuth işlemini çağırarak oynatma kimlik bilgisini elde edebilirsiniz. Kendiniz imzalama işlemi yapmak zorunda kalmamak için oynatma kimlik bilgisini bir SDK aracılığıyla almanızı öneririz. Bu işlemin nasıl çağrılacağına ilişkin bir örnek için Developer Portal adresine bakın.
ApsaraVideo VOD kullanıcılarının bu oynatma yöntemini kullanmasını öneririz. VidAuth, VidSts'ye kıyasla daha güvenlidir ve kullanımı daha kolaydır. Ayrıntılı karşılaştırma için Kimlik bilgisi tabanlı yöntem ile STS tabanlı yöntem arasındaki karşılaştırma konusuna bakın.
void onViewPlayerCreated(viewId) async {
// Set the rendered view for the player.
fAliplayer.setPlayerView(viewId);
// Note: Before you call generatePlayerConfig, you must call createVidPlayerConfigGenerator() and setPreviewTime().
FlutterAliplayer.createVidPlayerConfigGenerator();
FlutterAliplayer.setPreviewTime(0);
// Set the playback source.
FlutterAliplayer.generatePlayerConfig().then((value) {
fAliplayer.setVidAuth(
vid: "Your Vid",// Required. The video ID (VideoId).
region: "Your Region",// Required. The region where ApsaraVideo VOD is activated. Default value: cn-shanghai.
playAuth: "<yourPlayAuth>",// Required. The playback credential. You must call the GetVideoPlayAuth operation of ApsaraVideo VOD to generate the credential.
playConfig: value);
});
}
}
VidSts kullanarak VOD oynatma
Bir VOD videosunu VidSts ile oynatmak için VOD oynatma kimlik bilgisi yerine geçici bir Security Token Service (STS) kimlik bilgisi kullanın. Önceden STS belirtecini ve geçici AccessKey çiftini (AccessKeyId ve AccessKeySecret) edinin. Daha fazla bilgi için STS belirteci edinme konusuna bakın.
void onViewPlayerCreated(viewId) async {
// Set the rendered view for the player.
fAliplayer.setPlayerView(viewId);
// Note: Before you call generatePlayerConfig, you must call createVidPlayerConfigGenerator() and setPreviewTime().
FlutterAliplayer.createVidPlayerConfigGenerator();
FlutterAliplayer.setPreviewTime(0);
// Playback using VidSts.
FlutterAliplayer.generatePlayerConfig().then((value) {
fAliplayer.setVidSts(
vid: "Your Vid",// Required. The video ID (VideoId).
region: "Your Region",// Required. The region where ApsaraVideo VOD is activated. Default value: cn-shanghai.
accessKeyId: "<yourAccessKeyId>",// Required. The AccessKey ID of the temporary AccessKey pair. You must call the AssumeRole operation of STS to generate the AccessKey ID.
accessKeySecret: "<yourAccessKeySecret>",// Required. The AccessKey secret of the temporary AccessKey pair. You must call the AssumeRole operation of STS to generate the AccessKey secret.
securityToken: "<yourSecurityToken>",// Required. The STS token. You must call the AssumeRole operation of STS to generate the token.
playConfig: value);
});
}
UrlSource kullanarak VOD oynatma
Bir VOD videosunu UrlSource ile oynatmak için setUrl parametresini oynatma URL'sine ayarlayın. URL, üçüncü taraf bir URL veya ApsaraVideo VOD'dan alınan bir oynatma URL'si olabilir.
GetPlayInfo işlemini çağırarak bir Alibaba Cloud oynatma URL'si elde edebilirsiniz. Kendiniz imzalama işlemi yapmak zorunda kalmamak için oynatma URL'sini bir SDK aracılığıyla almanızı öneririz. Örnek için Developer Portal adresine bakın.
void onViewPlayerCreated(viewId) async {
// Set the rendered view for the player.
fAliplayer.setPlayerView(viewId);
// Set the playback source.
switch (_playMode) {
// Playback using UrlSource.
case ModeType.URL:
this.fAliplayer.setUrl("Playback URL"); // Required. The playback URL. The URL can be a third-party VOD URL or a playback URL from ApsaraVideo VOD.
break;
default:
}
}
Şifreli VOD oynatma
ApsaraVideo VOD, HLS şifrelemesini, Alibaba Cloud'a özgü kriptografiyi ve DRM şifrelemesini destekler. Şifreli oynatma hakkında daha fazla bilgi için Flutter'da şifreli videoları oynatma konusuna bakın.
Canlı yayın oynatma
Daha fazla bilgi için Flutter için ApsaraVideo Player konusuna bakın.
UrlSource oynatma için bir URL kullanır. VidSts ve VidAuth ise oynatma için bir video kimliği (VID) kullanır.
Bölge ayarının nasıl yapılacağı hakkında daha fazla bilgi için VOD bölgeleri konusuna bakın.
Oynatmayı denetleyin
Flutter için ApsaraVideo Player SDK, başlatma, duraklatma ve belirli bir zamana atlama gibi yaygın işlemleri destekler.
Otomatik oynatma
Otomatik oynatmayı etkinleştirmek için setAutoPlay yöntemini kullanın. Otomatik oynatma varsayılan olarak devre dışıdır. Örnek:
fAliplayer.setAutoPlay(true);
Oynatmaya hazırlanın
Oynatma için verileri okumaya ve ayrıştırmaya başlamak üzere prepare yöntemini çağırın. Otomatik oynatma etkinleştirilmişse, veriler ayrıştırıldıktan sonra video otomatik olarak oynatılır. Örnek:
fAliplayer.prepare();
Oynatmayı başlatın
Oynatmayı başlatmak için play yöntemini kullanın. Örnek:
fAliplayer.play();
Belirli bir zamandan itibaren oynatmayı başlatın
Belirli bir zamana atlamak için seekTo yöntemini kullanın. Bu yöntem, ilerleme çubuğunun sürüklenmesi veya kaydedilen bir konumdan oynatmanın devam ettirilmesi durumunda kullanışlıdır. Örnek:
// position is the specified time in milliseconds. Valid values for seekMode: FlutterAvpdef.ACCURATE (accurate seek) and FlutterAvpdef.INACCURATE (inaccurate seek).
fAliplayer.seekTo(position,seekMode);
Oynatmayı belirli bir konumdan başlatmak için bu yöntemi prepare yöntemini çağırmadan önce çağırın. Örnek:
// Set the start time in milliseconds for the next player preparation. This setting is valid only for the immediately following prepare call.
// After prepare is called, this value is automatically reset to zero. If this method is not called again before the next prepare, playback starts normally.
// You can set seekMode to accurate or inaccurate mode.
fAliplayer.setStartTime(time, seekMode);
Oynatmayı duraklatın
Oynatmayı duraklatmak için pause yöntemini kullanın. Örnek:
fAliplayer.pause();
Oynatmayı devam ettirin
Oynatmayı devam ettirmek için play yöntemini kullanın. Örnek:
fAliplayer.play();
Oynatmayı durdurun
Oynatmayı durdurmak için stop yöntemini kullanın. Örnek:
fAliplayer.stop();
Oynatıcıyı yok edin
Oynatıcı örneğini eşzamanlı veya eşzamansız olarak yok edin. Örnek:
// Synchronous destruction. The stop method is automatically called internally.
fAliplayer.destroy();
// Asynchronous destruction. The stop method is automatically called internally.
fAliplayer.releaseAsync();
Eşzamanlı yok etme işlemi, tüm oynatıcı kaynakları serbest bırakılana kadar dönüş yapmaz. Daha iyi bir kullanıcı arabirimi yanıt verebilirliği için eşzamansız yok etme işlemini kullanın. Aşağıdaki noktalara dikkat edin:
Eşzamansız yok etme işlemi sırasında oynatıcı nesnesinde başka hiçbir işlem gerçekleştirmeyin.
Eşzamansız yok etme yöntemi, eşzamansız bir durdurma yordamı içerdiğinden, bu yöntemi çağırmadan önce oynatıcıyı manuel olarak durdurmanız gerekmez.
Oynatıcı durumunu dinleyin
Flutter için ApsaraVideo Player SDK, oynatıcı durumunu izlemek amacıyla oynatıcı dinleyicileri ayarlamanıza olanak tanır.
Oynatıcı dinleyicilerini ayarlayın
Oynatıcı için birden çok dinleyici ayarlayabilirsiniz.
Manuel oynatma için
OnPrepareddinleyicisini ayarlamanız gerekir. Çünkü oynatmayı başlatmak içinOnPreparedgeri aramasındaplayyöntemini çağırmanız gerekir.OnTrackReadyveOnErrordinleyicileri önemlidir. Bunları ayarlamanızı öneririz.
Aşağıdaki örnek, mevcut dinleyicilerden bazılarını göstermektedir:
// Preparation is successful.
fAliplayer.setOnPrepard((playerId) {});
// The first frame is displayed.
fAliplayer.setOnRenderingStart((playerId) {});
// The video width and height change.
fAliplayer.setOnVideoSizeChanged((width, height,playerId) {});
// The player status changes.
fAliplayer.setOnStateChanged((newState,playerId) {});
// Loading status.
fAliplayer.setOnLoadingStatusListener(
loadingBegin: (playerId) {},
loadingProgress: (percent, netSpeed,playerId) {},
loadingEnd: (playerId) {});
// Seeking is complete.
fAliplayer.setOnSeekComplete((playerId) {});
// Callback for player event information, including buffer and current playback progress. The information is determined by infoCode, which corresponds to FlutterAvpdef.infoCode.
fAliplayer.setOnInfo((infoCode, extraValue, extraMsg,playerId) {});
// Playback is complete.
fAliplayer.setOnCompletion((playerId) {});
// The stream is ready.
fAliplayer.setOnTrackReady((playerId) {});
// Snapshot result.
fAliplayer.setOnSnapShot((path,playerId) {});
// Error result.
fAliplayer.setOnError((errorCode, errorExtra, errorMsg,playerId) {});
// The stream is switched.
fAliplayer.setOnTrackChanged((value,playerId) {});
Oynatma durumunu dinleyin
Oynatıcı durumundaki değişiklikleri dinleyin. onStateChanged geri araması geçerli durumu sağlar. Örnek:
fAliplayer.setOnStateChanged((newState, playerId) {
// newState is the playback status.
switch (newState) {
case FlutterAvpdef.AVPStatus_AVPStatusIdle: // Idle
break;
case FlutterAvpdef.AVPStatus_AVPStatusInitialzed: // Initialization is complete.
break;
case FlutterAvpdef.AVPStatus_AVPStatusPrepared: // Preparation is complete.
break;
case FlutterAvpdef.AVPStatus_AVPStatusStarted: // Playing.
break;
case FlutterAvpdef.AVPStatus_AVPStatusPaused: // Paused.
break;
case FlutterAvpdef.AVPStatus_AVPStatusStopped: // Stopped.
break;
case FlutterAvpdef.AVPStatus_AVPStatusCompletion: // Playback is complete.
break;
case FlutterAvpdef.AVPStatus_AVPStatusError: // An error occurred.
break;
default:
}
});
Görüntüleme modunu ayarlayın
Flutter için ApsaraVideo Player SDK, doldurma, döndürme ve yansıtma gibi görüntüleme ayarlarını destekler.
Doldurma
SDK üç doldurma modunu destekler: en-boy oranına sığdır, en-boy oranına doldur ve doldurmak için ölçeklendir. Doldurma modunu ayarlamak için setScalingMode yöntemini kullanın. Örnek:
// Set the mode to aspect fit. The video is scaled down proportionally to fit within the view without distortion.
fAliplayer.setScalingMode(ScaleMode.SCALE_ASPECT_FIT);
// Set the mode to aspect fill. The video is scaled up proportionally to fill the view without distortion.
fAliplayer.setScalingMode(ScaleMode.SCALE_ASPECT_FILL);
// Set the mode to scale to fill. The video may be distorted if its aspect ratio does not match the view's aspect ratio.
fAliplayer.setScalingMode(ScaleMode.SCALE_TO_FILL);
Döndürme
Videoyu belirtilen açıyla döndürmek için setRotateMode yöntemini kullanın. Ayarı yaptıktan sonra döndürme açısını da alabilirsiniz. Örnek:
// Rotate the video 0 degrees clockwise.
fAliplayer.setRotateMode(RotateMode.ROTATE_0);
// Rotate the video 90 degrees clockwise.
fAliplayer.setRotateMode(RotateMode.ROTATE_90);
// Rotate the video 180 degrees clockwise.
fAliplayer.setRotateMode(RotateMode.ROTATE_180);
// Rotate the video 270 degrees clockwise.
fAliplayer.setRotateMode(RotateMode.ROTATE_270);
// Get the rotation angle.
fAliplayer.getRotateMode();
Yansıtma
SDK yatay yansıtma, dikey yansıtma ve yansıtma yok seçeneklerini destekler. Yansıtmayı yapılandırmak için setMirrorMode yöntemini kullanın. Örnek:
// Set no mirroring.
fAliplayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Set horizontal mirroring.
fAliplayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Set vertical mirroring.
fAliplayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);
Oynatma bilgilerini alın
Flutter için ApsaraVideo Player SDK'yı kullanarak geçerli oynatma ilerlemesini ve video süresini alın.
Geçerli oynatma ilerlemesini alın
Geçerli oynatma süresini milisaniye cinsinden onInfo geri aramasından alın. Örnek:
fAliplayer.setOnInfo((infoCode,extraValue,extraMsg,playerId){
if(infoCode==FlutterAvpdef.CURRENTPOSITION){
// extraValue is the current playback progress.
}
});
Video süresini alın
Video yüklendikten sonra, örneğin AVPEventPrepareDone olayından sonra toplam video süresini alın. Örnek:
fAliplayer.getMediaInfo().then((value){
_videoDuration=value['duration'];
});
Sesi ayarlayın
Ses ayarları, ses düzeyi ayarlama ve sesi kapatma işlemlerini içerir.
Ses düzeyi ayarlama
Sesi ayarlamak için setVolume yöntemini kullanın. Desteklenen aralık 0 ile 2 arasındadır. Gürültüye neden olabileceğinden 1'den büyük değerler önerilmez. Örnek:
// The value of volume is a real number from 0 to 2.
fAliPlayer.setVolume(1);
// Get the volume information.
fAliPlayer.getVolume();
Sesi kapatma ayarları
Oynatıcının sesini kapatmak için setMute yöntemini kullanın. Örnek:
fAliplayer.setMute(true);
Oynatma hızını değiştirin
Flutter için ApsaraVideo Player SDK, oynatma hızını değiştirmenize olanak tanır. Normal hızın 0,5x ile 5x katı arasında oynatmak için setSpeed yöntemini kullanın. Ses perdesi değişmeden kalır. Örnek:
// Set the playback speed. Speeds from 0.5x to 5x are supported. The speed is usually set in multiples of 0.5, such as 0.5x, 1x, and 1.5x.
fAliplayer.setSpeed(1.0);
Çoklu çözünürlük ayarları
Oynatma için VID tabanlı bir yöntem (VidAuth veya VidSts) kullanıyorsanız ek ayar gerektirmez. SDK, çözünürlük listesini otomatik olarak ApsaraVideo VOD'dan alır. Çözünürlükleri alabilir ve değiştirebilirsiniz. Bu ayar, UrlSource oynatma için desteklenmez.
Çözünürlüğü alın
Video yüklendikten sonra video çözünürlüğünü alın.
fAliplayer.setOnPrepared((playerId) {
fAliplayer.getMediaInfo().then((value){
AVPMediaInfoinfo info=AVPMediaInfo.fromJson(value);
info.tracks.forEach((element){
if(element.trackType==3){
// Definition
String definition=element.trackDefinition;
// Stream index
int index=element.trackIndex;
}
});
});
});
Çözünürlüğü değiştirin
Çözünürlüğü değiştirmek için selectTrack yöntemini kullanın. İlgili TrackInfo dizinini iletin.
fAliplayer.selectTrack(trackIdx);
Çözünürlük değiştirme bildirimi
Bu geri arama, başarılı bir çözünürlük değiştirmeden sonra tetiklenir.
fAliplayer.setOnTrackChanged((value,playerId){
// A callback indicates that the switch is successful. A method for a failed switch is not yet available.
});
Döngüsel oynatma
Flutter için ApsaraVideo Player SDK döngüsel oynatma sağlar. Döngüsel oynatmayı etkinleştirmek için setLoop öğesini çağırın. Video bittikten sonra otomatik olarak baştan yeniden başlar. Örnek:
fAliplayer.setLoop(true);
Döngü başlatma geri araması, onInfo aracılığıyla bildirim gönderir. Örnek:
fAliplayer.setOnInfo((infoCode, extraValue, extraMsg, playerId) {
if(infoCode == FlutterAvpdef.LOOPINGSTART){
// Loop playback start notification
}
});
Oynatma günlüklerini alın
Flutter için ApsaraVideo Player SDK, oynatma günlüklerini almanıza olanak tanır. Günlük yazdırmayı etkinleştirmek için enableConsoleLog öğesini çağırın. Örnek:
// Enable log printing.
FlutterAliplayer.enableConsoleLog(true);
// Set the log level. The default level is AF_LOG_LEVEL_INFO. To troubleshoot issues, you can set it to AF_LOG_LEVEL_TRACE.
FlutterAliplayer.setLogLevel(FlutterAvpdef.AF_LOG_LEVEL_INFO);
Flutter için ApsaraVideo Player SDK, kare düzeyinde günlükleri almanıza olanak tanır. Kare düzeyinde günlük yazdırmayı yapılandırmak için setLogOption öğesini çağırın. Örnek:
/// Set the log level. To troubleshoot issues, set the log level to AF_LOG_LEVEL_TRACE.
FlutterAliplayer.setLogLevel(LogLevel.AF_LOG_LEVEL_INFO);
/// Enable or disable logs.
FlutterAliplayer.enableConsoleLog(true);
/// Log callback information.
FlutterAliplayer.setLogInfoCallBack((level, msg) {
print("[LOG][LEVEL][$level] $msg");
});
/// Enable the frame log callback. This is typically enabled for troubleshooting.
/// Option value: 0 means disabled, 1 means enabled.
FlutterAliplayer.setLogOption(value);
Kare düzeyindeki günlük özelliği öncelikle sorun giderme amacıyla kullanılır.