Comment utiliser VLC pour regarder un fichier (pendant qu'il est modifié) sur un serveur SSH (en utilisant sftp ou autrement)?

J'utilise mon serveur ssh pour enregistrer des vidéos et j'aimerais pouvoir les regarder (sur un PC à l'aide de Windows 7 ou 8) pendant l'enregistrement. Je peux bien sûr transférer le fichier lorsque je l'ai terminé et je le regarde, mais je le regarde pendant l'enregistrement, qui peut durer 2 heures.

Je ne veux pas utiliser un serveur VLC car il encode la vidéo et mon serveur SSH est sur un Odroid C1 (pas assez puissant pour ce que je pense), et je perdrais une certaine qualité.

J'ai vu quelques idées VLC: Puis-je diffuser sur SSH? Mais ce n'est pas suffisant.

J'ai pensé à 2 angles ici:

  • Trouver un moyen de télécharger le fichier "indéfiniment": ce qui signifie que, tant que le fichier sera plus grand, le téléchargement se poursuivra. Mais je ne sais pas si cela est possible, j'ai essayé WinSCP, mais le téléchargement finit même par penser que le fichier est constamment mis à jour.
  • En streaming du fichier avec quelque chose comme ça dans VLC "sftp: ///" mais je ne sais pas comment configurer la connexion avec VLC (ma connexion SSH n'est pas sur le port 22 et j'utilise des clés publiques / privées).

Est-ce que quelqu'un a des idées?

One Solution collect form web for “Comment utiliser VLC pour regarder un fichier (pendant qu'il est modifié) sur un serveur SSH (en utilisant sftp ou autrement)?”

Étant donné que toutes mes tentatives de transmission directe avec VLC avec un lien "sftp: //" ont échoué, j'ai réussi à écrire un petit programme java qui ferait exactement ce dont j'avais besoin en téléchargeant le fichier et en vérifiant toujours si la taille du fichier distant A changé pour reprendre le téléchargement si nécessaire.

La clé ici est ce code:

sftpChannel.get(remotePath, outstream, monitor, ChannelSftp.OVERWRITE, 0); long localSize; Thread.sleep(1000); while(sftpChannel.lstat(remotePath).getSize() > (localSize = new File(localPath).length())){ sftpChannel.get(remotePath, outstream, monitor, ChannelSftp.RESUME, localSize); Thread.sleep(timeToWaitBeforeUpdatingFile); } System.out.println("The download is finished."); 

Je publie également le code entier du programme si quelqu'un est intéressé:

 package streamer; import java.io.Console; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.InputMismatchException; import java.util.Scanner; import java.util.Vector; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; import com.jcraft.jsch.SftpProgressMonitor; public class Streamer { public static void main(String[] args) throws InterruptedException, IOException { JSch jsch = new JSch(); if(args.length != 7){ System.out.println("Incorrect parameters:"); System.out.println("Streamer user host port privateKeyPath remotePath localPath vlcPath"); System.exit(-1); } String user = args[0]; String host = args[1]; int port = -1; try { port = Integer.parseInt(args[2]); } catch (NumberFormatException e3) { System.out.println("Port must be an integer"); System.exit(-1); } String privateKeyPath = args[3]; String remotePath = args[4]; String localPath = args[5]; String vlcPath = args[6]; int timeToWaitBeforeUpdatingFile = 5000; String password = ""; Console console = System.console(); if (console == null) { System.out.println("Couldn't get Console instance"); //password = ""; System.exit(-1); }else{ char passwordArray[] = console.readPassword("Enter your password: "); password = new String(passwordArray); Arrays.fill(passwordArray, ' '); } try { jsch.addIdentity(privateKeyPath, password); } catch (JSchException e) { System.out.println(e.getMessage()); System.out.println("Invalid private key file"); System.exit(-1); } Session session; try { session = jsch.getSession(user, host, port); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); System.out.println("Establishing connection..."); session.connect(); System.out.println("Connection established."); System.out.println("Creating SFTP Channel..."); ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); sftpChannel.connect(); System.out.println("SFTP Channel created."); try { @SuppressWarnings("unchecked") Vector<ChannelSftp.LsEntry> recordings = sftpChannel.ls(remotePath + "*.mpeg"); if(recordings.isEmpty()){ System.out.println("There are no recordings to watch."); System.exit(0); } int choice = 1; System.out.println("Chose the recording to watch:"); for (ChannelSftp.LsEntry e : recordings){ System.out.println("[" + choice++ + "] " + e.getFilename()); } Scanner sc = new Scanner(System.in); try { String fileName = recordings.get(sc.nextInt() - 1).getFilename(); remotePath += fileName; localPath += fileName; } catch (InputMismatchException e) { System.out.println("Incorrect choice"); System.exit(-1); } System.out.println("You chose : " + remotePath); sc.close(); } catch (SftpException e2) { System.out.println("Error during 'ls': the remote path might be wrong:"); System.out.println(e2.getMessage()); System.exit(-1); } OutputStream outstream = null; try { outstream = new FileOutputStream(new File(localPath)); } catch (FileNotFoundException e) { System.out.println("The creation of the file" + localPath + " failed. Local path is incorrect or writing permission is denied."); System.exit(-1); } try { SftpProgressMonitor monitor = null; System.out.println("The download has started."); System.out.println("Opening the file in VLC..."); try { Runtime.getRuntime().exec(vlcPath + " " + localPath); } catch (Exception ex) { System.out.println("The file couldn't be opened in VLC"); System.out.println("Check your VLC path."); System.out.println(ex); } sftpChannel.get(remotePath, outstream, monitor, ChannelSftp.OVERWRITE, 0); long localSize; Thread.sleep(1000); while(sftpChannel.lstat(remotePath).getSize() > (localSize = new File(localPath).length())){ sftpChannel.get(remotePath, outstream, monitor, ChannelSftp.RESUME, localSize); Thread.sleep(timeToWaitBeforeUpdatingFile); } System.out.println("The download is finished."); outstream.close(); System.exit(0); } catch (SftpException e1) { System.out.println("Error during the download:"); System.out.println(e1.getMessage()); System.exit(-1); } } catch (JSchException e) { System.out.println("Connection has failed (check the user, host, port...)"); System.exit(-1); } } } 
  • Comment extraire un DVD en utilisant un lecteur multimédia VLC sur Mac OSX?
  • Rejoindre des vidéos à l'aide de la ligne de commande
  • Utilisation des touches d'accès rapide de VLC via la ligne de commande
  • Comment puis-je installer vlc-srpos-plugin sur Ubuntu?
  • Comment convertir le format de fichier FLV en un format que Picasa reconnaît (p. Ex. AVI, MPEG, WMV)?
  • Comment ouvrir VLC dans une nouvelle instance de fenêtre?
  • Problème d'affichage étrange avec VLC
  • Comment utiliser la fonction de répétition AB de VLC?
  • Convertir le fichier vidéo MOV encodé en tant que `qtrle` dans Windows en utilisant FFMPEG
  • Lecture / pause VLC avec clic de la souris
  • Comment enregistrer le bureau dans le lecteur multimédia VLC - deuxième écran
  • Soyons le génie de l'ordinateur et du réseau.