2011-11-26 6 views
4

의심 할 바없이 또 다른 바보 같은 질문입니다! 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

이 부분을 자세히 살펴 보았을 때, 새로운 현대 웹킷 기반 html5 브라우저는 다운로드 만하고 싶지 않으면 더 복잡하다는 것을 알게되었습니다. 제자리에서 연주하고 싶다면 "Accept-Ranges"및 "Content-Range"헤더와 관련된 문제가 있습니다. 우리는이 브라우저에 파일을 점진적으로 다운로드 한 다른 서버가 무엇을했는지 살펴봄으로써이를 알게되었습니다. 우리는 위의 코드로 여전히 큰 파일에 문제가있을 때만 보았습니다. 최종선은 처음에는 눈을 맞추기보다 더 복잡하며 어딘가에 대한 포괄적 인 기사를보고 싶습니다. –

+1

나는 큰 (거대한, 정말로 .. 100gb ++) 파일을 점차적으로 스트리밍하는 것을 파헤칠 예정이며, 기사를 머리 뒤로 가져다가 작업을하면서 뭔가를 요리 할 것입니다. –

+2

음, 그 기사는 어디 있습니까? :) – mtyson

1

컨트롤러에서 비디오를 제공하는 것이 가능하지만 브라우저에서 QuickTime 비디오를 표시하는 것이 목적이라면 훨씬 간단한 솔루션이 될 수 있습니다. 당신이 플레이어가 설치 얻을 일단

grails install-plugin flash-player 

, 당신은 단순히보기의 GSP에 다음 줄을 삽입 할 수 있습니다 :

이 경우 대신 플러그인 명령과 함께 사용할 수있는 FlashPlayer를 시도하실 수 있습니다

Grails V2에서 플러그인을 작동시키는 데 약간의 시간이 걸렸지 만 이제는 플러그인을 통해 피할 수 있었던 작업이 얼마나 많은지 알게되었습니다. 더 자세히 알고 싶다면 http://grails.org/FlashPlayer+Plugin

관련 문제