如何从gridfs获取文件并使用Nginx将其作为流播放



我用Nginx设置了一个web服务器,我使用Nginx gridfs模块访问Mongodb内容,并使用http_mp4_module在客户端上以流的形式播放mp3文件,以上两个服务都可以独立运行,但当我尝试将这两个服务结合起来,并尝试访问存储在Mongodb中的mp3文件并在客户端上作为流播放时,出现了404错误,这听起来httpmp4module不能与Gridfs一起工作,它需要一个存在于文件系统中的真实文件。以下是我的Nginx配置设置:

访问Mongodb内容:(我可以访问URL为http://myhost/voice/mp3/xxxxxxx.mp3的mp3文件)

     location /voice/mp3/ {
                     gridfs whatsup
                            field=filename
                            type=string
                            root_collection=storage.voice.mp3;
                     mongo localhost:27017;
     }

用于在客户端上以流形式播放mp3文件(我可以使用URL为http://myhost/mp3/xxxxxxx.mp3的浏览器播放mp3,mp3文件存在于文件系统中)

     location /mp3 {
              root /var/www/html/;
              mp4;
     }

以上两个服务都运行良好,但当我将它们组合在一起时,它不起作用,配置如下:

     location /play/mp3 {
                     gridfs whatsup
                            field=filename
                            type=string
                            root_collection=storage.voice.mp3;
                     mongo localhost:27017;
                     mp4;
        }

当我尝试用浏览器访问URL http://myhost/play/mp3/xxxxxxx.mp3并用它播放时,它显示404错误。

有没有把这两种服务结合起来的想法?或者我是否错过了什么?

不要使用gridfs fuse将您的gridfs挂载到文件系统,请检查以下内容:http://blog.vladimirm.com/2011/06/export-files-from-mongodb-gridfs-with-directory-paths/

这是一个bash脚本,用于将gridfs文件装载到文件系统

用法:

  • 创建一个名为gridfs.sh的文件(放在链接中的bash脚本中)。

  • 运行此命令:$/gridfs.sh主机数据库名称(这将在您所在的目录中装载文件)。

一些媒体播放器需要HTTP范围请求协议,因为时间搜索。这些播放器在播放媒体之前检查网络服务器是否支持该协议。

原来的nginx-gridfs模块没有实现range请求。这个快速破解补丁添加了范围请求支持,我确认它解决了问题。

然而,这个实现会阻塞整个nginx进程,直到一个流结束。这对nginx来说非常糟糕,因为在事件驱动的架构中应该避免阻塞IO。因此,我认为我们应该使用其他实现来服务于大文件或流媒体,例如gidfs-fuse和others节点代理。

首先,将mongodb-gridfsurl重定向到本地文件系统,将nginx服务器配置为:

location / {
        root mp3;
        mp4;
}
location /tushuo/voice/mp3/ {
    rewrite ^/tushuo/voice/mp3/(.*) /$1;
}

然后,您可以使用gridfs fuse将您的mongodb gridfs安装到您的本地文件系统树上,以便nginx mp4模块可以找到它。(注意:您必须以root身份运行nginx。)

sudo ./mount_gridfs --db=whatsup.storage.tushuo.voice --host=localhost --fsnode=mp3 -/usr/local/nginx/mp3/

相关内容

  • 没有找到相关文章

最新更新