星辰北聂 2024-08-13 12:07 采纳率: 0%
浏览 7

Ubuntu搭建基于nginx-http-flv-module的流媒体服务

Ubuntu搭建基于nginx-http-flv-module的流媒体服务,从海康摄像头获取视频流正常,但从海康的硬盘录像机获取视频回放则出现跨域问题(推流正常,但获取返回数据被拦截)。
已采用nginx和core,nginx.conf关键配置如下:

rtmp {
            out_queue           4096; 
            out_cork            8;
            max_streams         128;   
            timeout             15s;  
            drop_idle_publisher 15s;   

            server {
                  listen 18703;
                  application myapp {
                     live on;
                     record off;
                     gop_cache on;
                  }
            }
         }

server {
            listen 80; 
            server_name localhost;

            # rtmpLive 自定义
            location /rtmpLive {
               flv_live on;
               chunked_transfer_encoding  on; #open 'Transfer-Encoding: chunked' response
               add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header
               add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header
               add_header Access-Control-Allow-Headers X-Requested-With;
               add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
               add_header 'Cache-Control' 'no-cache';
            }

            location / {
                  root   html;
                  index  index.html index.htm;
            }
      }

  • 写回答

1条回答 默认 最新

  • 肾透侧视攻城狮 2024-08-13 12:16
    关注

    望采纳一下,来之不易的答案
    虽然你已经设置了跨域资源共享(CORS)头部,但仍然出现跨域问题可能有几个原因。这里有一些可能的原因及解决方案:

    1. CORS 设置的准确性

    确保 add_header 指令设置的准确性。特别是在使用 flv_live 模块时,CORS 头部设置的准确性尤为重要。确保所有需要的 CORS 头部都已经正确设置。

    尝试在 location /rtmpLive 块中设置 CORS 头部时,也包括响应预检请求的 OPTIONS 方法。例如:

    
    location /rtmpLive {
        flv_live on;
        chunked_transfer_encoding on;
        
        # CORS headers
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
        
        # Handle OPTIONS requests
        if ($request_method = OPTIONS) {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
            add_header 'Content-Length' 0;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            return 204;
        }
    
        add_header 'Cache-Control' 'no-cache';
    }
    
    
    
    1. 检查 Nginx 日志

    检查 Nginx 错误日志和访问日志,以确定是否有其他可能导致问题的错误或警告信息。

    
    sudo tail -f /var/log/nginx/error.log
    sudo tail -f /var/log/nginx/access.log
    
    
    1. 确保流媒体应用正常

    确保你的 rtmp 配置部分(如 listen 18703)和流媒体应用(如 myapp)的设置是正确的,且推流和拉流都可以正常工作。检查是否可以通过 RTMP 客户端正确推流和拉流。

    1. Nginx 版本

    确保你使用的 Nginx 版本及其模块(如 nginx-http-flv-module)是最新版本,有些 CORS 相关的功能可能会因为版本问题而表现不如预期。

    1. 浏览器开发者工具

    使用浏览器的开发者工具检查网络请求,特别是 CORS 相关的响应头,确认是否存在跨域请求问题。

    1. 防火墙和网络设置

    检查是否有其他防火墙或网络设置可能影响跨域请求的传输,特别是在你的 Ubuntu 服务器上。

    1. 客户端配置

    确保客户端请求头中没有被其他设置(如请求头或代理)干扰 CORS 头部的处理。确认浏览器的请求和响应的实际内容。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月13日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?