grails - 从 S3 将 MP4 视频文件从 Grails Controller 流式传输到 video.js 播放器

标签 grails amazon-s3 video.js

我在尝试通过 grails Controller 从 Amazon S3 流式传输 MP4 视频文件时遇到问题。我想在 S3 上托管一个视频文件并通过 grails Controller 流式传输(或发送它),该 Controller 将由 html 页面中的 video.js 播放器的前端访问。

我需要将 S3 上的视频保密,因此仅在 S3 上公开视频并使用直接 url 是不可能的。任何帮助表示赞赏。

Controller :

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>

最佳答案

您无需下载视频。

  • 使用 AWS Java 开发工具包,使用您的存储桶和 key 详细信息获取视频的预签名 URL。如果您的视频不属于 secret 性质,您还可以为该视频创建一个公共(public) URL。
  • 使用该预签名 URL 代替 SRC。
  • 视频仍然无法在所有浏览器中正确播放,因为您的视频中只有一种格式的 MP4,并非所有浏览器都支持这种格式。您还需要将 webm 格式上传到 S3,并在 videojs SRC 中提供该格式的 URL。为此,您可以使用 AWS 视频编码器,也可以使用 ffmpeg 进行转换。

  • 最后,您将能够在所有主要浏览器中播放视频。

    希望这可以帮助。

    关于grails - 从 S3 将 MP4 视频文件从 Grails Controller 流式传输到 video.js 播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977968/

    相关文章:

    plugins - VideoJS 5 插件添加按钮

    node.js - 无法使用node.js将blob文件上传到S3

    c# - 像 Dropbox 这样的同步服务,文件索引背后的理论?

    angular - 在 angular2 上设置 video.js

    Grails 集成测试 - 重复表单提交总是 invalidToken

    node.js - 分段上传node.js aws-sdk中的AWS s3进度条

    javascript - 如何在video.js 4.2.1中添加视频文件?

    grails - 从 Controller 发送InputStream作为图像发送到gsp

    json - Grails对请求和响应的通用JSON处理

    grails - 在没有 View 的情况下调用 Grails Controller 方法