2 votes

Comment télécharger rapidement des fichiers vidéo volumineux vers un serveur sous Android ?

Bonjour, je charge des fichiers vidéo volumineux sur le serveur en utilisant l'Api Volley Multi-part mais le chargement sur le serveur prend beaucoup de temps.

Est-il préférable de diviser mes fichiers vidéo et de les envoyer au serveur ? Si c'est le cas, veuillez me fournir le code qui me permettra de le faire. Sinon, quel est le meilleur moyen de télécharger rapidement de gros fichiers vidéo vers le serveur ?

3voto

Pour diviser un fichier en parties (morceaux) :

public static List<File> splitFile(File f) throws IOException {
    int partCounter = 1;
    List<File> result = new ArrayList<>();
    int sizeOfFiles = 1024 * 1024;// 1MB
    byte[] buffer = new byte[sizeOfFiles]; // create a buffer of bytes sized as the one chunk size

    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
    String name = f.getName();

    int tmp = 0;
    while ((tmp = bis.read(buffer)) > 0) {
        File newFile = new File(f.getParent(), name + "." + String.format("%03d", partCounter++)); // naming files as <inputFileName>.001, <inputFileName>.002, ...
        FileOutputStream out = new FileOutputStream(newFile);
        out.write(buffer, 0, tmp);//tmp is chunk size. Need it for the last chunk, which could be less then 1 mb.
        result.add(newFile);
    }
    return result;
}

Cette méthode divisera votre fichier en morceaux d'une taille de 1 Mo (à l'exception du dernier morceau). Ensuite, vous pouvez envoyer tous ces morceaux vers le serveur.

Aussi, si vous devez fusionner ces fichiers :

public static void mergeFiles(List<File> files, File into)
        throws IOException {
   BufferedOutputStream mergingStream = new BufferedOutputStream(new FileOutputStream(into))
    for (File f : files) {
        InputStream is = new FileInputStream(f);
        Files.copy(is, mergingStream);
        is.close();
    }
    mergingStream.close();
}

Juste au cas où votre serveur est aussi en Java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X