2011-11-26 46 views
4

毫無疑問,另一個愚蠢的newb問題!我在Grails控制器中有一個字節數組,它包含視頻文件的內容(準確地說是一個* .mp4文件)。我熟悉如何從Grails控制器呈現JSON,XML和其他基本類型,但我找不到任何示例顯示如何輸出視頻。從本質上說我要做到以下幾點:從Grails控制器呈現視頻內容

render bytes as MP4 

我意識到,我可能需要一個結構,如:

render(text:"<xml>some xml</xml>",contentType:"video/mpeg",encoding:"UTF-8") 

,但我不清楚我是怎麼在there.Obviously字節數組我不擅長渲染類似html的內容。我一直躲在圖書館功能後面太久了!任何指向參考或示例的指針都會很感激。

所以,如果它有助於指向正確方向的建議,與視頻中的字節是從我用的JetS3t庫讀取S3對象來。

+0

它看起來像我會更好使用「響應」對象,而不是渲染語法。我仍然可以使用指針或示例。我用渲染語法試了一下,發現內存不足錯誤!很顯然,我需要使用某種類型的緩衝流。 –

+0

你想嵌入視頻還是直接發送文件? –

+0

使用響應對象和'video/quicktime'的上下文類型我可以在返回QuickTime * .mov文件時使其工作。我有點不清楚我應該發送什麼類型的頭文件。目前我正在做的唯一事情就是設置內容類型。我即將找到一個簡單的媒體服務器的源代碼或一個易於閱讀的參考資料,討論標題和視頻下載。我想要的行爲是「漸進式下載」,所以我不需要流媒體協議的複雜性。 –

回答

1
OutputStream out = response.getOutputStream() 
    //set up byte array 
    byte[] content = yourS3Object.getBytes() 


    response.setContentLength(content.size()) 
    response.addHeader("Content-disposition", "attachment; filename=${yourS3Object.fileName}") 
    response.addHeader("Content-type", "video/quicktime") 
    out.write(content) 
    out.close() 

這應該做的伎倆。

+3

隨着我對這個問題的深入研究,我發現如果您不想僅僅下載,那麼基於webkit的新型html5瀏覽器會更加複雜。如果您想在原地播放,則存在與「Accept-Ranges」和「Content-Range」標題相關的問題。我們通過查看其他服務器向這些瀏覽器逐步下載文件的過程瞭解了這一點。我們只看到,當我們仍然有與上述代碼的真正大文件的問題。底線是比最初見面更復雜,我很想在這個地方看到一篇綜合性文章。 –

+1

我將盡快挖掘流媒體大文件(巨大的,真正的100GB +)文件,將您的文章需求放在我的腦海中,也許會在我做這些工作時做出一些事情。 –

+2

那麼,那篇文章在哪裏? :) – mtyson

1

雖然的確可以從控制器提供的影片,有可能是一個更簡單的解決方案,如果你的目標只是從瀏覽器中出現的QuickTime視頻。在這種情況下,你可能會想嘗試的FlashPlayer插件,可使用以下命令:

grails install-plugin flash-player 

一旦你安裝了這個播放器,你就可以簡單地插入以下行到您的視圖GSP:

<div id="test"> 
    <p>You need Flash Player installed to play this media.</p> 
</div> 
<g:flashPlayer id="test" varFile="${createLinkTo(dir: 'movies', file: 'my.mov')}"/> 

花了一點點擺弄獲得插件使用Grails V2工作,但現在,它在的地方我知道多少工作,該插件幫我避免。如果您想了解更多信息,請訪問:http://grails.org/FlashPlayer+Plugin

相關問題