星期四, 九月 10, 2009

Streaming upload by wput

一般 FTP 檔案的續傳設計, 是當檔案上傳到一半時斷線, 之後上傳可以將未上傳的部份再上傳, 不用重新將檔案整個重新上傳過. (示意圖如下)



目前作的監控系統有個功能是將監控觸發畫面錄下來上傳到 FTP或存入到SD卡中. 作法是將抓到的 MPEG4 Frame 存成檔案放在 RootFS(ramdisk) 之中. 不過我們這系統開機完 RootFS 空間剩下不多,如果要錄長時間的話會有容量上的問題. 如果使用上面存到單一檔案的話,空間一定會不足. 所以我們用的方法修正如下:


在本地端使用多個檔案來儲存 MPEG4 Frames, 目前是30個 Frame存成一個檔案, 本地檔案只要存好一個, 就馬上 Append 到 FTP 端的檔案(如上圖), 這樣一來, 只要網路頻寬足夠的話, 就不用擔心本機 Embedded System 空間是否足夠儲存.

回到第一段, 如果使用一般 FTP 的設定方法, 勢必是達不到我們目地的. 正常的 FTP 續傳 Local File 和 Remote File 都各只有一個, 流程如下:
  1. 看看 Remote File 是否存在, 如果存在就利用 SIZE 來取得 Remote File 的檔案大小, 如果不存在就產生一個同名的空檔案.
  2. 取得 Remote File 的檔案大小之後, 和本地的檔案相減, 計算還有多少檔案未上傳.
  3. 利用 REST 重設 Remote File 起始點之後, 將剩下的未傳輸檔案上傳.
在我們上面第二圖的 Scenario 下,  會變成 Local File 有 n 個, Remote File 只有一個. 流程要小修改成下面的樣子:
  1. 看看 Remote File 是否存在, 如果存在就利用 SIZE 來取得 Remote File 的檔案大小, 如果不存在就產生一個空檔案, 名字要記下來.
  2. 將 Local File 第一個上傳上去, 利用 REST 來重新設定上傳起始點.
  3. 上傳完將剛上傳的 Local File 刪除.
  4. 重復 1-3, 直到所有檔案都上傳完畢.
這樣一來, 我們想要使用的 Stream Upload 功能就算是完成了, 所需只要本地一部份的暫存空間, 和足夠的網路頻寬, 就可以實現連續上傳到同一個檔案的功能了.


0 意見:

 
template hacks by: [ METAMUSE ]