FTP流文件当前正在使用吗?

时间:2012-06-19 18:51:53

标签: video upload ftp streaming vlc

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

2 个答案:

答案 0 :(得分:0)

由于这是一个编程社区,我将从这个角度回答。从技术上讲,你可以实现一个FTP客户端,它可以做你想要的(换句话说协议允许这样做)但是你的客户需要知道文件在运行中改变其大小的可能性。客户端的上传代码可以用两种方式编写:(1)将文件大小设置为X并上传X字节,以及(2)从文件中读取数据块并上传它们直到某些内容指示文件结束。

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

如果你想通过一个批处理文件来做你需要的东西,那么你就是在错误的社区中,并且无论如何你都不能使用ftp.exe。

答案 1 :(得分:0)

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

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