V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
xQmQ
V2EX  ›  NGINX

关于 Nginx 实现视频点播的流媒体服务器

  •  
  •   xQmQ · 2022-02-25 16:03:23 +08:00 · 1772 次点击
    这是一个创建于 1009 天前的主题,其中的信息可能已经有所发展或是发生改变。

    毕设项目要求利用 Nginx 实现一个流媒体服务器,提供视频点播功能

    初步设想的处理步骤:

    1. 利用 Nginx-upload-module 实现视频文件从前端上传到服务器的资源目录
    2. 编写一个模块,将资源目录下的 .mp4 文件通过 ffmpeg 转码切片成符合 HLS 协议的 .m3u8 和 一系列小 ts 文件,存放到片源目录中
    3. Nginx 直接发布片源目录中的资源

    目前测试了 Nginx 对 .m3u8 的支持,可以直接拉片源目录中的 .m3u8 到播放器里播放;也测试了 Nginx-upload-module 在 upload_pass 中启动其他模块的功能

    想请教各位大佬:

    1. 这个思路是否可行
    2. 如果可以的话,关于 Nginx-upload-module 这个模块,需要利用其他脚本语言实现对上传资源的存储。因为我不想引入其他语言实现,打算直接在我自己编写的模块中处理上传资源并转码切片。那么下面配置中诸如 $upload_file_name 等是变量吗,如何在自己编写的模块中引用他们的数据呢

    感谢大佬指点

    server {
        client_max_body_size 100m;
        listen 80;
    
        # Upload form should be submitted to this location
        location /upload/ {
            # Pass altered request body to this location
            upload_pass @test;
    
            # Store files to this directory
            # The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
            upload_store /tmp 1;
    
            # Allow uploaded files to be read only by user
            upload_store_access user:r;
    
            # Set specified fields in request body
            upload_set_form_field $upload_field_name.name "$upload_file_name";
            upload_set_form_field $upload_field_name.content_type "$upload_content_type";
            upload_set_form_field $upload_field_name.path "$upload_tmp_path";
    
            # Inform backend about hash and size of a file
            upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
            upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
    
            upload_pass_form_field "^submit$|^description$";
    
            upload_cleanup 400 404 499 500-505;
        }
    
        # Pass altered request body to a backend
        location @test {
            proxy_pass http://localhost:8080;
        }
    }
    
    3 条回复    2022-02-26 12:32:22 +08:00
    hanguofu
        1
    hanguofu  
       2022-02-26 07:52:38 +08:00
    难道 Nginx 不是 支持 webdav 的吗 ? 通过浏览器直接看 webdav 里面的内容不就行了 ?
    dream4ever
        2
    dream4ever  
       2022-02-26 08:10:18 +08:00
    毕设是要求只能用 Nginx 完成这几项功能?第一条和第二条我觉得用常规编程语言写个服务来实现更合适。
    xQmQ
        3
    xQmQ  
    OP
       2022-02-26 12:32:22 +08:00
    @hanguofu 我查了你提到的 webdav ,这种实现的话跟毕设要求不相符

    @dream4ever 单纯的实现功能,已经有诸如 Nginx-rtmp-module 这样的方案。写论文的话没有内容,写模块集成进 Nginx 可以借用他的架构,这样在调优方面也可以写一些内容进论文;直接用别的语言实现,不太切开题报告
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.