ApsaraVideo Player SDK'nın güvenli indirme özelliği, yerel cihazınıza indirilen videoları şifreler. Şifrelenmiş videolar yalnızca belirttiğiniz uygulama için oluşturulan anahtar dosyası kullanılarak oynatılabilir; bu durum kötü amaçlı oynatmayı veya dağıtımı engeller.
Bu konudaki özellikle ilgili tüm kod ve uygulama ayrıntıları için API-Example örnek projesine bakmanızı ve kodu en iyi uygulamalara göre uyarlamanızı öneririz.
Belirli uygulamalar için API-Example-Android ve API-Example-iOS içindeki Video Download and Offline Playback modülünün kaynak koduna bakın.
Genel Bakış
ApsaraVideo VOD, mobil cihazlara çevrimdışı oynatma amacıyla video indirmeyi iki modda destekler:
Güvenli indirme (önerilir): Bu modda indirilen videolar Alibaba Cloud tarafından şifrelenir ve yalnızca anahtar dosyalarıyla çözülebilir. Videolar yalnızca ApsaraVideo Player kullanılarak oynatılabilir.
Normal indirme: Bu modda indirilen videolar Alibaba Cloud tarafından şifrelenmez ve herhangi bir oynatıcı kullanılarak kopyalanıp oynatılabilir. Normal indirme modunu kullanırken dikkatli olun.
Güvenli indirme, indirilen videoların şifrelenmesini sağlar. Şifrelenmiş videolar yalnızca ApsaraVideo VOD konsolunda anahtar dosyasını oluştururken belirttiğiniz uygulama tarafından oynatılabilir. Normal indirmeye kıyasla güvenli indirme, indirilen videoların telif hakkını daha iyi korur ve çoğu senaryo için önerilir.
Sınırlamalar
Güvenli indirme özelliğini kullanmak için ApsaraVideo Player SDK'yı entegre etmeniz gerekir.
ApsaraVideo Player SDK yalnızca VidSts ve VidAuth tabanlı güvenli indirmeyi destekler.
Güvenli indirme modunda indirilen videolar yerel cihazda şifrelenir ve yalnızca belirttiğiniz uygulamadaki ApsaraVideo Player SDK'da oynatılabilir.
Ön Koşullar
ApsaraVideo VOD konsolunda indirme özelliği etkinleştirilmiş ve Download Mode seçeneği Secure Download olarak ayarlanmıştır. Daha fazla bilgi için Güvenli indirmeyi etkinleştirin konusuna bakın.
ApsaraVideo Player SDK entegre edilmiştir. Daha fazla bilgi için Android için ApsaraVideo Player'ın hızlı entegrasyonu veya iOS için ApsaraVideo Player'ın hızlı entegrasyonu konularına bakın.
Video Alibaba Cloud özel kriptografi veya HLS şifrelemesi kullanılarak şifrelenmiştir.
Temel Android uygulaması
Güvenli indirme ayarları
-
Güvenli indirmeleri etkinleştirmek için şifreli doğrulama dosyasını yapılandırın.
ApsaraVideo VOD konsolunda oluşturulan anahtar dosyasını ApsaraVideo Player SDK'da yapılandırın. Anahtar dosyası, indirme ve oynatma için videoları şifrelemek ve şifresini çözmek için kullanılır. Anahtar dosyasının nasıl oluşturulacağı hakkında daha fazla bilgi için Güvenli indirme konusuna bakın.
NotAnahtar dosyasındaki bilgilerin belirttiğiniz uygulama bilgileriyle eşleştiğinden emin olun. Aksi takdirde video indirme işlemi başarısız olur.
Bunu Application sınıfında yalnızca bir kez yapılandırmanızı öneririz. Aşağıda bir örnek verilmiştir:
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 biçimi, indirilen dosya biçimiyle eşleşir; bunun değiştirilmesi desteklenmez.
VOD konsolunda varsayılan parametre adı MtsHlsUriToken olan HLS standart şifreleme parametre aktarımını etkinleştirdiyseniz HLS standart şifreleme parametre aktarımı konusuna bakın ve ardından yukarıda gösterildiği gibi VOD kaynağında MtsHlsUriToken değerini ayarlayın.
-
-
Hazırlama başarılı olduktan sonra indirme öğesini seçin ve indirmeyi başlatın.
Hazırlama başarılı olduktan sonra
OnPreparedListeneryöntemi çağrılır. Dönen TrackInfo, video akışı tanımı gibi bilgiler 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 kimlik bilgilerinin süresinin dolmasını önlemek için indirme kaynağı bilgilerini güncelleyip 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
releaseişlevinionCompletionveyaonErrorgeri aramasında ç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");
İndirilen videoları oynatın
İndirilen videolar yalnızca ApsaraVideo Player SDK'daki oynatma URL'leri kullanılarak oynatılabilir. İndirilen bir videoyu oynatmak için aşağıdaki adımları uygulayın:
-
İ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);
playAuth yöntemi kullanılarak indirilen videolar yalnızca indirme sırasında seçtiğiniz çözünürlükte tek bir video akışı içerir. Video indirildikten sonra farklı bir çözünürlüğe geçemezsiniz. Farklı bir çözünürlükte bir videoya ihtiyacınız varsa ilgili sürümü yeniden indirmeniz gerekir.
Temel iOS uygulaması
Güvenli indirme ayarları
-
Güvenli indirmeleri etkinleştirmek için şifreli doğrulama dosyasını yapılandırın.
ApsaraVideo VOD konsolunda oluşturulan anahtar dosyasını ApsaraVideo Player SDK'da yapılandırın. Anahtar dosyası, indirme ve oynatma için videoları şifrelemek ve şifresini çözmek için kullanılır. Anahtar dosyasının nasıl oluşturulacağı hakkında daha fazla bilgi için Güvenli indirme konusuna bakın.
NotAnahtar dosyasındaki bilgilerin belirttiğiniz uygulama bilgileriyle eşleştiğinden emin olun. Aksi takdirde video indirme işlemi başarısız olur.
Bu ayarı uygulama başına yalnızca bir kez yapılandırmanızı öneririz. Aşağıda bir örnek verilmiştir:
NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"]; [AliPrivateService initKey:encrptyFilePath]; -
İndiriciyi oluşturun ve yapılandırın.
Aşağıdaki kod bir örnektir:
AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init]; [downloader setSaveDirectory:self.downLoadPath]; [downloader setDelegate:self]; -
Olay dinleyicilerini ayarlayın.
İndirici birden çok olay dinleyicisini destekler. Aşağıdaki kod bir örnektir:
-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { // A download item is successfully prepared. } -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel { // An error occurred during download. } -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // Download progress percentage. } -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent { // Processing progress percentage. } -(void)onCompletion:(AliMediaDownloader *)downloader { // The download is successful. } -
İndirme kaynağını hazırlayın.
İndirme kaynağını hazırlamak için
prepareyöntemini çağırın. VidSts ve VidAuth kaynakları desteklenir. Aşağıdaki kod bir örnektir:-
VidSts
// Create a VidSts source. AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init]; stsSource.region = @"your_region"; // Your ApsaraVideo VOD service region. Default value: cn-shanghai. stsSource.vid = @"your_video_id"; // The video ID. stsSource.securityToken = @"<yourSecurityToken>"; // The STS security token. To get this token, call the STS AssumeRole operation. stsSource.accessKeySecret = @"<yourAccessKeySecret>"; // The AccessKey secret of the temporary STS credential. To get this secret, call the STS AssumeRole operation. stsSource.accessKeyId = @"<yourAccessKeyId>"; // The AccessKey ID of the temporary STS credential. To get this ID, call the STS AssumeRole operation. // If you have enabled parameter pass-through for HLS encryption in the ApsaraVideo VOD console // and the default parameter name is MtsHlsUriToken, you must set the config and pass it to the VidSts source. // If this feature is not enabled, you can skip the following code. VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; stsSource.playConfig = [vp generatePlayerConfig]; // Prepare the download source. [downloader prepareWithVid:stsSource]; -
VidAuth
// Create a VidAuth source. AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"your_video_id"; // The video ID. authSource.playAuth = @"<yourPlayAuth>"; // The playback credential. To get this credential, call the ApsaraVideo VOD GetVideoPlayAuth operation. authSource.region = @"your_region"; // Deprecated in ApsaraVideo Player SDK V5.5.5.0 and later because the player automatically parses the region. // Required for earlier versions. // Your ApsaraVideo VOD service region. Default value: cn-shanghai. // If you have enabled parameter pass-through for HLS encryption in the ApsaraVideo VOD console // and the default parameter name is MtsHlsUriToken, you must set the config and pass it to the VidAuth source. // If this feature is not enabled, you can skip the following code. VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init]; [vp setHlsUriToken:yourMtsHlsUriToken]; authSource.playConfig = [vp generatePlayerConfig]; // Prepare the download source. [downloader prepareWithVid:authSource];
NotApsaraVideo VOD konsolunda HLS şifrelemesi için parametre aktarımını etkinleştirirseniz ve varsayılan parametre adı MtsHlsUriToken ise yukarıdaki kodda gösterildiği gibi indirme kaynağında MtsHlsUriToken değerini ayarlamanız gerekir. Daha fazla bilgi için HLS şifrelemesi için parametre aktarımı konusuna bakın.
-
-
Kaynak hazırlandıktan sonra bir video parçası seçin.
İndirme kaynağı hazırlandıktan sonra
onPreparedyöntemi çağrılır. Geri aramanınmediaInfoparametresi video kalitesi gibi her kullanılabilir video parçası hakkında bilgi içerir. İndirmek için bir parça seçin. Aşağıdaki kod bir örnektir:-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; // For example, to download the first track: [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; } -
İndirme kaynağını güncelleyin ve indirmeyi başlatın.
VidSts ve VidAuth kimlik bilgilerinin süresinin dolmasını önlemek için indirmeyi başlatmadan önce kaynak bilgilerini güncellemenizi öneririz. Aşağıdaki kod bir örnektir:
// Update the download source. [downloader updateWithVid:vidSource] // Start the download. [downloader start]; -
İndirme tamamlandıktan veya başarısız olduktan sonra indiriciyi serbest bırakın.
İndiriciyi serbest bırakmak için
destroyyöntemini çağırın.[self.downloader destroy]; self.downloader = nil;
İndirilen videoları oynatın
İndirilen videolar yalnızca ApsaraVideo Player SDK'daki oynatma URL'leri kullanılarak oynatılabilir. İndirilen bir videoyu oynatmak için aşağıdaki adımları uygulayın:
-
İndirilen video dosyasının mutlak yolunu alın.
Notİndirilen bir video dosyasının mutlak yolunu şu şekilde oluşturmanızı öneririz:
downloadedFilePathiçinden özel depolama yolunu ve dosya adını alın, sandbox dizinini alın ve ardından bunları birleştirin.NSString *downloadedFilePath = downloader.downloadedFilePath; -
Oynatma için mutlak yolu ayarlamak üzere bir VOD UrlSource kullanın.
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downloadedFilePath]; [self.player setUrlSource:urlSource];
playAuth yöntemi kullanılarak indirilen videolar yalnızca indirme sırasında seçtiğiniz çözünürlükte tek bir video akışı içerir. Video indirildikten sonra farklı bir çözünürlüğe geçemezsiniz. Farklı bir çözünürlükte bir videoya ihtiyacınız varsa ilgili sürümü yeniden indirmeniz gerekir.