O recurso de baixe seguro do ApsaraVideo Player SDK criptografa os vídeos baixados para o dispositivo local. A reprodução dos vídeos criptografados ocorre apenas com o arquivo de chave gerado pelo aplicativo especificado, o que impede a reprodução ou distribuição maliciosa.
Para todo o código e detalhes de implementação relacionados aos recursos neste tópico, consulte o projeto de demonstração API-Example e adapte o código conforme as melhores práticas.
Para implementações específicas, consulte o código-fonte do módulo Video Download and Offline Playback em API-Example-Android e API-Example-iOS.
Visão geral
O ApsaraVideo VOD permite baixar vídeos para dispositivos móveis para reprodução offline em dois modos:
Baixe seguro (recomendado): a Alibaba Cloud criptografa os vídeos baixados neste modo, e a descriptografia exige arquivos de chave. A reprodução dos vídeos é possível apenas no ApsaraVideo Player.
Baixe normal: a Alibaba Cloud não criptografa os vídeos baixados neste modo; você pode copiá-los e reproduzi-los em qualquer player. Tenha cautela ao usar o modo de baixe normal.
O baixe seguro garante a criptografia dos vídeos baixados. Apenas o aplicativo especificado durante a geração do arquivo de chave no console do ApsaraVideo VOD consegue reproduzir esses vídeos. Comparado ao baixe normal, o baixe seguro protege melhor os direitos autorais dos vídeos e é recomendado para a maioria dos cenários.
Limites
Integre o ApsaraVideo Player SDK para usar o recurso de baixe seguro.
O ApsaraVideo Player SDK oferece suporte a baixe seguro apenas com VidSts e VidAuth.
Os vídeos baixados no modo seguro permanecem criptografados no dispositivo local e só podem ser reproduzidos pelo ApsaraVideo Player SDK no aplicativo definido por você.
Pré-requisitos
O recurso de baixe está ativado e o Download Mode está definido como Secure Download no console do ApsaraVideo VOD. Para mais informações, consulte Ativar baixe seguro.
O ApsaraVideo Player SDK está integrado. Para mais informações, consulte Integração rápida do ApsaraVideo Player para Android ou Integração rápida do ApsaraVideo Player para iOS.
O vídeo está criptografado com Criptografia proprietária da Alibaba Cloud ou Criptografia HLS.
Implementação principal no Android
Configurações de baixe seguro
-
Configure o arquivo de verificação criptografado para ativar downloads seguros.
Defina no ApsaraVideo Player SDK o arquivo de chave gerado no console do ApsaraVideo VOD. Esse arquivo serve para criptografar e descriptografar vídeos durante o baixe e a reprodução. Para saber como gerar um arquivo de chave, consulte Baixe seguro.
NotaCertifique-se de que as informações no arquivo de chave correspondam às informações do aplicativo especificadas. Caso contrário, o baixe do vídeo falhará.
Realize essa configuração apenas uma vez na Application. Visualize o exemplo:
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. -
Crie e defina o downloader.
Use o AliDownloaderFactory para criar um downloader. Exemplo:
AliMediaDownloader mAliDownloader = null; ...... // Create downloader. mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // Configure download save path. mAliDownloader.setSaveDir("Save folder path"); -
Defina os listeners de eventos.
O downloader disponibiliza diversos listeners de eventos. Exemplo:
-
Prepare a fonte de baixe.
Use o método
preparepara preparar a fonte de baixe. As fontes oferecem suporte aos métodos VidSts e VidAuth. Exemplos:-
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);
NotaO formato do arquivo de origem corresponde ao formato do arquivo baixado; não há suporte para alteração.
Se você ativou o repasse de parâmetros de criptografia padrão HLS no console do VOD com o nome de parâmetro padrão MtsHlsUriToken, consulte Repasse de parâmetros de criptografia padrão HLS e defina o valor MtsHlsUriToken na fonte VOD conforme mostrado acima.
-
-
Após a preparação bem-sucedida, selecione o item de baixe e inicie o baixe.
Quando a preparação é concluída com sucesso, o método
OnPreparedListeneré chamado. O TrackInfo retornado contém informações como a definição do fluxo de vídeo. Selecione uma Track para baixe. Exemplo: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(); } -
(Opcional) Atualize a fonte de baixe.
Para evitar a expiração de VidSts e VidAuth, atualize as informações da fonte de baixe antes de iniciar o processo. Exemplo:
// Update download source. mAliDownloader.updateSource(VidSts); // Start download. mAliDownloader.start(); -
Após o sucesso ou falha do baixe, libere o downloader.
Ao concluir o baixe, chame
releaseno callbackonCompletionouonErrorpara liberar o downloader. Exemplo:mAliDownloader.stop(); mAliDownloader.release(); -
Opcional: Exclua os arquivos baixados.
É possível excluir arquivos baixados durante ou após o baixe. Exemplo:
// 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");
Reproduzir vídeos baixados
A reprodução de vídeos baixados só é possível mediante URLs de reprodução no ApsaraVideo Player SDK. Siga as etapas abaixo para reproduzir um vídeo baixado:
-
Após a conclusão do baixe, obtenha o caminho absoluto do arquivo de vídeo.
String path = mAliDownloader.getFilePath(); -
Defina o caminho absoluto via UrlSource do VOD para reprodução.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback address");// Set absolute path of downloaded video. aliPlayer.setDataSource(urlSource);
Implementação principal no iOS
Configurações de baixe seguro
-
Configure o arquivo de verificação criptografado para ativar downloads seguros.
Defina no ApsaraVideo Player SDK o arquivo de chave gerado no console do ApsaraVideo VOD. Esse arquivo serve para criptografar e descriptografar vídeos durante o baixe e a reprodução. Para saber como gerar um arquivo de chave, consulte Baixe seguro.
NotaCertifique-se de que as informações no arquivo de chave correspondam às informações do aplicativo especificadas. Caso contrário, o baixe do vídeo falhará.
Realize essa configuração apenas uma vez por aplicativo. Visualize o exemplo:
NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"]; [AliPrivateService initKey:encrptyFilePath]; -
Crie e configure o downloader.
Visualize o exemplo de código:
AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init]; [downloader setSaveDirectory:self.downLoadPath]; [downloader setDelegate:self]; -
Defina os listeners de eventos.
O downloader oferece suporte a vários listeners de eventos. Visualize o exemplo de código:
-(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. } -
Prepare a fonte de baixe.
Chame o método
preparepara preparar a fonte de baixe. Há suporte para fontes VidSts e VidAuth. Visualize o exemplo de código:-
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];
NotaSe você ativar o repasse de parâmetros para criptografia HLS no console do ApsaraVideo VOD e o nome do parâmetro padrão for MtsHlsUriToken, será necessário definir o valor MtsHlsUriToken na fonte de baixe conforme mostrado no código acima. Para mais informações, consulte Repasse de parâmetros para criptografia HLS.
-
-
Selecione uma faixa de vídeo após a preparação da fonte.
Quando a fonte de baixe estiver preparada, o método
onPreparedserá chamado. O parâmetromediaInfodo callback contém informações sobre cada faixa de vídeo disponível, como a qualidade do vídeo. Selecione uma faixa para baixe. Visualize o exemplo de código:-(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]; } -
Atualize a fonte de baixe e inicie o baixe.
Para evitar a expiração das credenciais VidSts e VidAuth, atualize as informações da fonte antes de iniciar o baixe. Visualize o exemplo de código:
// Update the download source. [downloader updateWithVid:vidSource] // Start the download. [downloader start]; -
Libere o downloader após a conclusão ou falha do baixe.
Chame o método
destroypara liberar o downloader.[self.downloader destroy]; self.downloader = nil;
Reproduzir vídeos baixados
A reprodução de vídeos baixados só é possível mediante URLs de reprodução no ApsaraVideo Player SDK. Siga as etapas abaixo para reproduzir um vídeo baixado:
-
Obtenha o caminho absoluto do arquivo de vídeo baixado.
NotaGere o caminho absoluto de um arquivo de vídeo baixado da seguinte forma: obtenha o caminho de armazenamento personalizado e o nome do arquivo em
downloadedFilePath, recupere o diretório sandbox e concatene-os.NSString *downloadedFilePath = downloader.downloadedFilePath; -
Use um UrlSource do VOD para definir o caminho absoluto para reprodução.
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downloadedFilePath]; [self.player setUrlSource:urlSource];