2012-06-11 153 views
4

可以實現一項功能,允許用戶在視頻上傳到其他人時上傳到服務器。 html 5適合這項任務嗎?但閃光?是否有任何解讀,不想重新發明輪子。該應用程序將託管在專用服務器上。在上傳視頻時觀看視頻

謝謝。

+0

網絡化,它很容易實現。問題是,你使用的是什麼技術?您的用戶正在上傳什麼視頻編解碼器?所有其他用戶容易理解,無需預處理?您擁有多少用戶,以及您可以備用多少處理能力以便即時重新編碼視頻?您是否可以相信上傳用戶足以分發數據而不過濾潛在威脅?你需要更好地處理你的問題。 – lvella

+0

Torrent協議的創建者現在正在研究這種技術,並且他長期以來一直致力於這項技術。 – megas

回答

3

當然有可能,數據不存在嗎?

然而,它很難實現。

另外我不是很喜歡Python,我不知道一個圖書館或服務適合您的要求,但我可以涵蓋視頻流的基本知識。

我假設你正在談論上傳的視頻文件,而不是流。因爲,爲此,顯然有數以千計的解決方案...

在最簡單的情況下,上傳的視頻已準備好提供給您的客戶,並有一個所謂的「faststart原子」。它們是特定的容器格式,有時候會有一堆。最常見的是moov原子。它包含大量數據並且非常複雜,但在我們的用例中,簡而言之,它包含的數據使客戶端可以立即開始使用可用數據開始播放視頻。

如果您有漸進式下載視頻(youtube ...),則表示從Web服務器提供文件的位置。你顯然沒有下載完整的文件,玩家已經可以開始玩了。

如果fastastart原子不存在,那是不可能的。 有時候是這樣,但例如播放器無法顯示進度條,因爲它不知道文件有多長。

覆蓋該文件可以上傳。您需要一個將數據直接寫入緩衝區或文件的上傳解決方案。 (文件會更容易...)。

這幾乎總是如此,例如PHP在tmp_dir中創建一個文件。如果您想要在上傳視頻時查找視頻,也可以指定它。

那麼,現在您可以逐字節地讀取該文件並將該數據打印到與另一個客戶端的連接。只要確保不要超過已經收到和寫過的東西。您可以通過在內存中設置的元數據啓動您的上傳,該元數據保存當前接收到的文件的字節位置和位置。

任何在上傳啓動後請求文件的人都可以收到整個文件,或者如果上傳尚未完成,請從您的應用程序獲取。

當數據變短時,您將不得不限制數據傳輸或暫停數據傳輸。這對客戶來說幾乎是一個「慢速連接」。但是,您必須不時地回覆一些數據以防止連接關閉。但是,如果你的上傳不停止,爲​​什麼要這麼做?那不應該是一個問題。

現在,如果您想要將各種輸入格式的代碼轉換爲您想要的輸出格式,那麼情況會變得很有趣。

AFAIK ffmpeg具有巧妙的apis,可讓您直接處理datasterams。

另外手剎是一個非常好的工具,但是你需要採用外部可執行的漫長道路。

我沒有真正意識到您的要求,但是如果您的客戶端已經調整好了,例如在紅色5流式服務器上,將數據提供給流應該也可以正常工作。

1

是的,看看Qik的,http://qik.com/

「即時視頻分享......影片可以現場(右因爲他們正在記錄)或之後隨時觀看。」

的Qik爲開發人員提供的API,包括那些像這樣:

  • qik.stream.subscribe_public_recent - 訂閱視頻(直播和錄製)

  • qik.user.following - 提供人列表中的用戶是繼

  • qik.stream.public_info - 獲取公共信息的特定視頻

1

這是最肯定的,但它不會微不足道。不,我不認爲你會找到一個「開箱即用」的解決方案,而不需要你的努力。

你說你不想讓:

users watch videos as they are uploaded to server by others 

那麼,這可以被解釋兩種不同的方式:

  1. 你的意思是你不希望用戶需要刷新在看到其他用戶剛完成上傳的新視頻之前的頁面?
  2. 或者你的意思是你想要一個用戶能夠觀看部分上傳的視頻(又名另一個用戶仍在上傳它,現在服務器只包含部分上傳的視頻)?

執行#1根本不會有任何困難。您只需要一個AJAX腳本來檢查新上傳的視頻,然後可以以您選擇的任何方式將這些視頻提供給用戶。 HTML5與Flash並不是真正的考慮因素。

另一方面,第二種情況需要付出相當大的努力。我猜測HTML5可能不夠成熟,無法應對這種情況。如果你不看 重新發明輪子,並沒有很多時間專門用於這個功能比我會說你會運氣不好。您可能可以使用ffmpeg來解析部分視頻文件並將它們提供給Flash播放器,但我認爲這是一項艱鉅的任務。