从S3将MP4视频文件从Grails控制器传输到video.js播放器

时间:2015-08-13 01:16:21

标签: grails amazon-s3 video.js

尝试通过Grails控制器从Amazon S3流式传输MP4视频文件时出现问题。我想在S3上托管一个视频文件,然后通过grails控制器对其进行流式处理(或发送),该控制器将由html页面中的video.js播放器前端访问。

我需要将S3上的视频保密,所以只能在S3上公开视频并使用直接网址是不可能的。任何帮助表示赞赏。

控制器:

def video = {
  def s3 = amazonWebService.s3
  def file = s3.getObject(params.bucketName, params.key)

  response.status = 206
  response.contentType = "video/mp4"
  response.outputStream << file.objectContent
  response.outputStream.flush()
  response.outputStream.close()

}

视频(GSP前端):

<video id="example_video_1" class="video-js vjs-default-skin"
      controls preload="auto" width="640" height="264"
      poster="http://video-js.zencoder.com/oceans-clip.png"
      data-setup='{"example_option":true}'>
        <source src="${createLink(controller:'home', action:'video', params:[bucketName:bucketInstance, key:videoFileInstance])}" type='video/mp4' />
    </video>

1 个答案:

答案 0 :(得分:1)

您无需下载视频。

  1. 使用您的存储桶和密钥详细信息,使用AWS Java SDK,获取视频的pre_signed URL。如果您的视频不具有保密性,您还可以创建视频的公开网址。
  2. 在SRC的位置使用该预先签名的URL。
  3. 视频仍然无法在所有浏览器中正常播放,因为您的视频中只有一种格式的MP4,并非所有浏览器都支持这种格式。您还需要将webm格式上传到S3,并在videojs SRC中为该格式提供URL。为此,您可以使用AWS视频编码器,也可以使用ffmpeg进行转换。
  4. 最后,您可以在所有主流浏览器中播放视频。

    希望这有帮助。