Nginx 伪流媒体服务器搭建

创建于 2024-12-03 / 28
字体: [默认] [大] [更大]

Nginx 支持伪流媒体播放功能,其可以和客户端的 Flash 播放器结合,对以 .flv、.f4f、.mp4、.m4v、.m4a 为扩展名的文件实现流媒体的播放功能。若启用伪流媒体的支持功能,需要按媒体文件格式在配置编译时增加 --with-http_f4f_module、--with-http_flv_module 和 --with-http_mp4_module 这 3 个参数。

1、模块配置指令

伪流媒体模块配置指令如下表所示。

指令名称 指令值格式 默认值 指令说明
f4f -- -- 启用 F4F 文件支持
f4f_buffer_size size 512k 设置读取 .f4x 索引文件的缓冲区大小
flv -- -- 启用 FLV 文件支持
mp4 -- -- 启用 MP4 文件支持
mp4_buffer_size size 512k 设置处理 MP4 文件的缓冲区大小
mp4_max_buffer_size size 512k Metadata 数据处理过程中的最大缓冲区大小
mp4_limit_rate on 或 off 或 facto off 限制客户单媒体流请求的最大速率。仅在 Nginx 商业版本中提供
mp4_limit_rate_after time 60s 客户单媒体流请求的速率达到指定值时开始限速。仅在 Nginx 商业版本中提供

F4F 格式仅在 Nginx 商业版本中提供。

2、伪流媒体配置样例

伪流媒体配置样例是利用 Nginx 的自动索引功能生成 XML 格式的目录列表,通过 XSLT 生成前端页面,使用 jQuery 插件 video.js 的 Flash 播放器播放 FLV 及 MP4 格式的流媒体文件。页面效果如下图所示。

Nginx 配置样例如下:
server {
    listen 8081;
    server_name localhost;
    charset utf-8;
    root /opt/nginx-web/files;
    default_type text/xml;

    location / {
       autoindex on;                                    # 启用自动页面功能
       autoindex_localtime on;                          # 使用Nginx服务器时间
       autoindex_format xml;                            # 自动页面输出格式为XML
       xslt_stylesheet conf/conf.d/example/test.xslt;   # 引入XSLT模板文件
    }

    location ~ .flv$ {
        flv;                                            # FLV文件启用伪流媒体支持
    }
    location ~ .mp4$ {
        mp4;                                            # MP4文件启用伪流媒体支持
        mp4_buffer_size       1m;                       # MP4文件的缓冲区大小为1MB
        mp4_max_buffer_size   5m;                       # MP4文件最大缓冲区大小为5MB
    }
}
文件test.xslt内容如下:

纯文本
复制
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4. <html>
  5. <head>
  6. <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  7. <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/ 3.3.7/css/bootstrap.min.css"/>
  8. <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
  9. <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
  10. <link href="https://cdn.bootcss.com/video.js/6.6.2/video-js.css" ref= "stylesheet"/>
  11. <script src="https://cdn.bootcss.com/video.js/6.6.2/video.js"></script>
  12. </head>
  13. <body>
  14. <h3>Nginx流媒体示例</h3>
  15. <table class="table table-striped table-bordered">
  16. <thead>
  17. <th>文件名</th>
  18. <th>文件类型</th>
  19. <th>文件大小</th>
  20. <th>文件修改时间</th>
  21. </thead>
  22. <xsl:for-each select="list/*">
  23. <xsl:sort select="mtime"/>
  24.  
  25. <xsl:variable name="name">
  26. <xsl:value-of select="."/>
  27. </xsl:variable>
  28. <xsl:variable name="ext">
  29. <xsl:value-of select="substring($name,string-length($name)-2,3)"/>
  30. </xsl:variable>
  31. <xsl:variable name="size">
  32. <xsl:if test="string-length(@size) &gt; 0">
  33. <xsl:if test="number(@size) &gt; 0">
  34. <xsl:choose>
  35. <xsl:when test="round(@size div 1024) &lt; 1"> <xsl:value-of select="@size" /></xsl:when>
  36. <xsl:when test="round(@size div 1048576) &lt; 1"><xsl:value-of select="format-number((@size div 1024), '0.0')" />K</xsl:when>
  37. <xsl:otherwise><xsl:value-of select="format-number((@size div 1048576), '0.00')" />M</xsl:otherwise>
  38. </xsl:choose>
  39. </xsl:if>
  40. </xsl:if>
  41. </xsl:variable>
  42. <xsl:variable name="date">
  43. <xsl:value-of select="substring(@mtime,1,4)"/>-<xsl:value-of select= "substring(@mtime,6,2)"/>-<xsl:value-of select="substring(@mtime,9,2)"/><xsl:text> </xsl:text>
  44. <xsl:value-of select="substring(@mtime,12,2)"/>:<xsl:value-of select="substring(@mtime,15,2)"/>:<xsl:value-of select="substring(@mtime,18,2)"/>
  45. </xsl:variable>
  46.  
  47. <tr>
  48. <td>
  49. <a href="{$name}"><xsl:value-of select="."/></a>
  50. </td>
  51. <td>
  52. <xsl:choose>
  53. <xsl:when test="$ext='mp4' or $ext='flv'">
  54. <video id="example_video_1" class="video-js vjs-default-skin" controls="true" preload="none" width="640" height="264" poster="http://vjs.zencdn.net/v/oceans.png">
  55. <source src="{$name}" type="video/mp4"/>
  56. </video>
  57. </xsl:when>
  58. <xsl:otherwise>
  59. <xsl:value-of select="$ext"/>
  60. </xsl:otherwise>
  61. </xsl:otherwise>
  62. </xsl:choose>
  63. </td>
  64. <td align="center"><xsl:value-of select="$size"/></td>
  65. <td><xsl:value-of select="$date"/></td>
  66. </tr>
  67. </xsl:for-each>
  68. </table>
  69. </body>
  70. <script>


0 人点赞过