Рендеринг видеоконтента с контроллера Grails - PullRequest
4 голосов
/ 26 ноября 2011

Без сомнения, еще один глупый вопрос новичка!У меня есть байтовый массив в контроллере Grails, который содержит содержимое видеофайла (точнее, файла * .mp4).Я знаком с тем, как отображать JSON, XML и другие базовые типы из контроллера Grails, но я не могу найти примеров, показывающих, как выводить видео.По сути, я хочу сделать следующее:

  render bytes as MP4

Я понимаю, что мне, вероятно, нужна такая конструкция, как:

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

, но я не понимаю, как получить массив байтовв там. Очевидно, я не эксперт в рендеринге HTML-подобного контента.Я слишком долго прятался за библиотечными функциями!Любые указатели на ссылку или пример будут высоко оценены.

Так что, если это поможет направить совет в правильном направлении, байты с видео приходят из объекта S3, который я читаю с библиотекой jets3t.

Ответы [ 2 ]

1 голос
/ 16 января 2012

Хотя, безусловно, возможно передавать видео с контроллера, может быть гораздо более простое решение, если ваша цель - представить видео 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

1 голос
/ 27 ноября 2011
    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()

Это должно сработать.

...