2016-04-13 2 views
0

Je dois télécharger (ou éventuellement streamer) une chanson à partir d'un compartiment Amazon s3. Le problème est que si la chanson est longue de 270 secondes, je veux commencer le téléchargement/flux à 150 secondes dans la chanson et ensuite jouer à partir de là. Comment j'accomplis cela en utilisant les services Web Amazon s3 et la technologie de servlet Java EE?Amazon s3 Chargement de fichiers musicaux plus rapidement

Répondre

1

En utilisant le AWS Java SDK, vous devez utiliser AmazonS3Client et appeler le getObject avec une instance de GetObjectRequest. Lorsque vous créez votre demande, appelez setRange avec la plage d'octets à obtenir. Cela vous permettra d'obtenir une partie du fichier sans télécharger le tout. getObject() renvoie un objet S3Object que vous pouvez utiliser pour diffuser le contenu du fichier vers un lecteur de musique ou un fichier local ou ce que vous voulez.

Il y a deux parties délicates:

Une partie délicate est que vous avez probablement besoin de l'en-tête de la chanson octets ainsi. Par exemple. Si le fichier est au format MP3, vous avez besoin du MP3 header. Vous pouvez utiliser la même méthode ci-dessus pour extraire la plage d'octets de l'en-tête.

L'autre partie délicate est comment déterminer le décalage d'octets dans un fichier d'un certain nombre de secondes dans le morceau. Voir this question à ce sujet. Vous pouvez facilement estimer le décalage d'octets en obtenant la taille entière du fichier en octets (voir getObjectMetadata), en divisant par la longueur totale de la chanson en secondes, et en multipliant par le nombre de secondes pour compenser le téléchargement.

+0

J'ai déjà essayé cela et j'ai envisagé ces parties difficiles avant d'avoir posé cette question. J'ai continué à obtenir une io.eofexception java que je ne pouvais pas sembler résoudre. Je vais essayer de recréer mon code puis éditer ma question avec le code inclus si l'erreur persiste –

+0

Je l'ai fait fonctionner Je n'ai aucune idée de ce que j'ai fait différemment merci mais sans votre rassurant de mes soupçons je n'y serais pas retourné –

+0

en fait cela a fonctionné quand j'ai placé la gamme de (0-quoi que ce soit) mais si j'essaye (quelquechose-quoi que ce soit) cela ne fonctionne pas et j'obtiens un javax.sound.sampled.UnsupportedAudioFileException –