0

我的计算机上有一个名为 video_2.m4v 的文件,另一个程序正在使用该文件在其中写入数据(视频),因此文件大小每秒都在增加。我想做的是制作类似流式上传的东西:在写入文件时,它会将其上传到服务器。我在 Windows 7 下使用这个 bash 脚本:

@echo off
echo user USER_NAME> ftpcmd.dat
echo PASSWORD>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo cd ROOT_PATH>> ftpcmd.dat
echo put %1>> ftpcmd.dat

ftp -n -s:ftpcmd.dat ftp.example.com
del ftpcmd.dat

这工作正常,但它捕获当前文件状态(大小)并上传它。请不要告诉我我需要使用 RTMP 服务器 :)。

VLC 实际上做了我想要的,但我不能切换到二进制模式。我正在使用以下代码:

set VLC_EXE=C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
set SOUT_FTP_DOMAIN=ftp.example.com
set SOUT_FTP_PORT=21

set SOUT_FTP_USERNAME=user
set SOUT_FTP_PASSWORD=password
set SOUT_FTP_PATH=www/example.com
set SOUT_FILENAME=test

"%VLC_EXE%"  D:\video_1.m4v :sout=#std{access=ftp,mux=mp4,dst=ftp://%SOUT_FTP_USERNAME%:%SOUT_FTP_PASSWORD%@%SOUT_FTP_DOMAIN%:%SOUT_FTP_PORT%/%SOUT_FTP_PATH%/%SOUT_FILENAME%.mp4} :sout-keep vlc://quit
4

2 回答 2

0

由于这是一个编程社区,我将从这个角度回答。从技术上讲,您可以实现一个 FTP 客户端,它可以执行您想要的操作(换句话说,协议允许这样做)但是您的客户端需要知道文件动态更改其大小的可能性。客户端的上传代码可以写成两种方式:(1)获取文件大小为 X 并上传 X 字节,(2)从文件中读取数据块并上传,直到出现文件结束。

在您的特定情况下,我几乎无法理解停止传输的命令是什么,因为数据是由另一个应用程序生成的。

如果你只是想通过一个批处理文件来做你需要的事情,那么你就在错误的社区中,并且以任何方式你想要的都是 ftp.exe 不可能的。

于 2012-06-19T18:59:26.340 回答
0

这将取决于您用于编写流的程序是否需要对文件的独占访问。一些转换器可能提供不需要独占访问的功能,而另一些可能不提供。您的上传应用程序可能有类似的限制,或者可能只检查一次大小,然后准确地上传该数量,在这种情况下,它似乎可以工作,但只会上传文件在您启动时完成转换的部分上传。

You can check if your converter requires exclusive access by attempting to play a file that is currently being converted. If it can play the file as the converter writes to it, it will only depend on the software you are using to upload. You are using FTP to transfer the file. The FTP protocol does not require the filesize to be sent before the file (I think? citation needed) so you may be able to accomplish this with the tools you are using.

于 2012-06-19T19:02:51.207 回答