2013-05-28 41 views
0

我想知道如果有人曾經做過這樣的事情。我有一部高清電影(甚至是720p),我想將它發送到Flash客戶端。我正在考慮在C++中使用OpenCV作爲解碼和發送部分。我甚至已經實現了一些這樣的功能,但是有錯誤的數據包大小的問題。通過套接字發送高清電影幀到閃存

但我的問題是不同的,有沒有人做過類似的事?這是否可以提高性能?我對此有強烈的懷疑,因爲我認爲Flash機器的發送和解碼仍然很困難。期待聽到更有經驗的人的一些意見。

回答

0

不是一個真正的答案,更像是關於您的問題的想法:

  • 是的,你必須編碼高清圖像,發送過網25 fps的X 1.5MB是一個不走。
  • 的GStreamer是建立正是出於這個目的。也許,複雜,但看看它呢!
  • 爲什麼寫一個程序,當VLC能做到這一切了嗎? (甚至無頭/腳本!)
  • 如果有音頻流 - 也忘記opencv。這是一個電腦視覺庫,不是爲你的問題而建立的
+0

我在這裏尋求想法和不同的觀點,所以謝謝;-)你注意到使用OpenCV時缺乏聲音 - 這可能是一個問題,我必須考慮它。 – Tomcatus

0

基本上有兩種網絡協議,通常用於將視頻從服務器發送到Flash客戶端,HTTP和RTMP。

HTTP是一個衆所周知的標準,易於實現,因爲它是一種純文本協議,允許Flash Player播放點播視頻文件或執行所謂的pseudo-streaming

RTMP是由Adobe創建的專有協議,允許實時流式傳輸以及視頻點播,還可以傳輸結構化二進制數據(AMF格式)作爲遠程過程調用協議。 雖然現在證明,它要複雜得多HTTP實現,但實現該協議的開放源碼庫,librtmp,在http://rtmpdump.mplayerhq.hu/發現。

請注意,我用librtmp成功,在客戶端,有一個C程序的行爲作爲一個Flash客戶端發佈一個FMS服務器上的視頻。我沒有在服務器端使用它的經驗,我甚至不知道它是否可能。

在你的情況,我當然推薦使用HTTP。

現在有克服另一個問題,這是一個事實,即對於要正確識別視頻幀,它們必須嵌入在Flash播放器可以讀取的容器。

閃存目前支持兩種容器格式,FLV和F4V,後者是MPEG-4容器格式的子集。

此外,視頻流必須能夠讀取由Flash,因此它必須被正確編碼成支撐在客戶端的格式,例如H.264,索倫森,或VP6。

可以直接發送GIF,JPEG或PNG圖像作爲幀,如官方Flash Video Specification的第8頁所示,但您必須認識到,在高清分辨率下,這將是非常低效的,想象一下,在25 FPS,JPEG中的1920x1080像素的單幅圖像比等效的H.264幀大得多。

所以,最後,我的建議是:不要解碼服務器上的視頻,確保它的格式與Flash兼容,並且使用一個記錄良好的協議按原樣發送。

+0

你的回答幫助我意識到,這似乎是一種甚至最糟糕的方式。我正在尋求改進我的Flash應用程序的性能,我想在其中播放3或4個高清視頻。使用我在Flash中本地發現的所有內容,我仍然沒有發現任何可以接受的質量支持。雖然這可能會做到 - 似乎我錯了 – Tomcatus