【问题标题】:Can FTP stream files that are currently in use?FTP 可以流式传输当前正在使用的文件吗?
【发布时间】:2012-06-19 18:51:52
【问题描述】:

我的计算机上有一个名为 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

【问题讨论】:

    标签: video upload ftp streaming vlc


    【解决方案1】:

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

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

    如果你只是想通过一个批处理文件来做你需要的事情,那么你就在错误的社区中,并且在任何情况下你想要的都是 ftp.exe 无法实现的。

    【讨论】:

    • 感谢您的详细解答。我同意,我想用标准的内部系统工具来实现这些东西真的很困难。
    • @AndyFenton 请注意:在 StackOverflow 上,如果您得到满意的答案,您可以接受 - 详情请参阅 meta.stackexchange.com/a/5235/153597
    【解决方案2】:

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

    您可以通过尝试播放当前正在转换的文件来检查您的转换器是否需要独占访问权限。如果它可以在转换器写入文件时播放文件,则仅取决于您用于上传的软件。您正在使用 FTP 传输文件。 FTP 协议不需要在文件之前发送文件大小(我认为?需要引用),因此您可以使用您正在使用的工具来完成此操作。

    【讨论】:

    • 正如 OP 所提到的,上传确实有效(这表明文件不是以独占方式打开的),只是不会上传新添加的数据。
    • Windows 内置的 FTP 系统肯定不支持。使用更强大的 FTP 客户端(例如 FileZilla、SmartFTP 或 WinSCP)可能会使 OP 更幸运。
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    相关资源
    最近更新 更多