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

从S3将MP4视频文件从Grails控制器流到video.js播放器,grails,amazon-s3,video.js,Grails,Amazon S3,Video.js,我在尝试通过grails控制器从AmazonS3流式传输MP4视频文件时遇到了一个问题。我想在S3上托管一个视频文件,并通过grails控制器传输(或发送),前端是html页面中的video.js播放器,可以访问该控制器 我需要将S3上的视频保持私有,因此在S3上公开视频并使用直接url是不可能的。感谢您的帮助 控制器: def video = { def s3 = amazonWebService.s3 def file = s3.getObject(params.bucketName

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

我需要将S3上的视频保持私有,因此在S3上公开视频并使用直接url是不可能的。感谢您的帮助

控制器:

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()
def视频={
def s3=amazonWebService.s3
def file=s3.getObject(params.bucketName,params.key)
response.status=206
response.contentType=“视频/mp4”

response.outputStream您不需要下载视频

  • 使用AWS Java SDK,使用您的bucket和key详细信息获取视频的预签名URL。如果您的视频不属于机密性质,您还可以为视频创建get公共URL
  • 使用预先签名的URL代替SRC
  • 视频仍无法在所有浏览器中正确播放,因为您的视频中只有一种格式MP4,这在所有浏览器中都不受支持。您还需要将webm格式上传到S3,并在videojs SRC中提供该格式的URL。为此,您可以使用AWS视频编码器,也可以使用ffmpeg to进行转换
  • 最后,您将能够在所有主要浏览器中播放视频


    希望这能有所帮助。

    您遇到了什么错误?您遇到了什么问题?您的问题没有说明实际问题是什么,只是说明了您正在尝试执行的操作。很抱歉,我应该更清楚一些。我没有收到错误,但我尝试在video.js中播放的视频文件没有播放。我不确定我丢失了什么。有什么问题吗关于设置更好的调试环境的建议也会有所帮助。
    <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>