2012-06-19 49 views
0

我在我的計算機上有一個名爲video_2.m4v的文件,該文件正在被另一個程序用來在那裏寫入數據(視頻),因此文件大小每秒都在增加。我想要做的就是做一個流式上傳: 當文件被寫入時,它會將其上傳到服務器。我使用這個bash腳本在Windows 7下:可以使用當前正在使用的FTP流文件嗎?

@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 

回答

0

因爲這是一個編程社區,我會從這個角度回答。從技術上講,你可以實現一個FTP客戶端,它可以做你想做的事(換句話說,協議允許這樣做),但是你的客戶端需要知道文件在運行中改變其大小的可能性。客戶端的上傳代碼可以通過兩種方式寫入:(1)獲取文件大小到X並上傳X字節,(2)從文件中讀取數據塊並上傳,直到文件結束。

在你的特殊情況下,我很難理解什麼是停止傳輸的命令,因爲數據是由另一個應用程序生成的。

如果你想通過一個批處理文件來做你所需要的,那麼你就是在錯誤的社區中,並且無論如何你想要的都不可能與ftp.exe一起使用。

+0

感謝您的詳細解答。我同意,我想用非標準的內部系統工具來實現這樣的事情是非常困難的。 –

+0

@AndyFenton只是一個說明:在StackOverflow上,如果您得到滿意的答案,您可以接受它 - 詳情請參閱http://meta.stackexchange.com/a/5235/153597。 –

0

這取決於您用來寫入流的程序是否需要獨佔訪問文件。某些轉換器可能會提供不需要獨佔訪問的功能,而其他轉換器則可能不會。您的上傳應用程序可能有類似的限制,或者只能檢查一次大小,然後正確上傳該數量,在這種情況下,它似乎可以正常工作,但只會上傳文件中已完成轉換的部分上傳。

您可以通過嘗試播放當前正在轉換的文件來檢查您的轉換器是否需要獨佔訪問。如果它可以在轉換器寫入文件時播放該文件,則它將僅取決於您用於上傳的軟件。您正在使用FTP傳輸文件。 FTP協議不需要在文件之前發送文件大小(我認爲?引用需要),因此您可以使用所使用的工具完成此操作。

+0

正如OP所提到的,上傳可以工作(這表明文件不是專門打開的),只是不會上傳新添加的數據。 –

+0

Windows內置的FTP系統當時不能支持它。 OP可能會有更強大的FTP客戶端運行,比如FileZilla,SmartFTP或WinSCP。 – Wug

相關問題