HLTML5播放HLS流(.m3u8文件)出现 跨域访问 No Access-Control-Allow-Origin的解决方案

我用ckplayer播放器实现在HTML5环境中播放.m3u8文件时出现No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
这里写图片描述
在网上查找说需要在网站根目录下添加crossdomain.xml文件,我也添加了,结果还是无效。最后摸索了半天才找到了如下解决方案(不需要添加crossdomain.xml文件)

修改nginx.conf

修改nginx.conf,在location /hls模块下添加add_header Access-Control-Allow-Origin *;
这里写图片描述

我的nginx配置如下。

rtmp {

        server {

            listen 1935;  #监听的服务端口

            chunk_size 4096; #数据传输块的大小

            #设置直播的application名称是hls

            application hls {  
                live on;
                hls on;
                hls_path /home/wwwroot/hls;
                hls_fragment 5s;
            }
        }
}

http{
    server {
        listen       80;
        server_name  www.vmliveroom.io vmliveroom.io;

        root    "/home/wwwroot/liveroom/public";
        include /usr/local/nginx/conf/enable-php-pathinfo.conf;
        location / {
            index  index.html index.htm index.php l.php;
            autoindex  off;

            if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            }
        }

        location /hls {
            # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /home/wwwroot;
            add_header Cache-Control no-cache;
            #添加下面一行
            add_header Access-Control-Allow-Origin *;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
参考资源链接:[Windows环境下搭建nginx HLS m3u8点播服务器配置教程](https://wenku.csdn.net/doc/6412b72ebe7fbd1778d495f6?utm_source=wenku_answer2doc_content) 问题是构建Web服务时常常需要面对的挑战之一,尤其是当你的Nginx服务器需要处理来自不同源的HTTP请求时。为了解决Nginx中的问题,你可以通过配置`add_header`指令来允许请求。具体操作步骤如下: 在Nginx的`nginx.conf`文件中,找到你设置的用于处理HLS的`location`块,并在其内部添加`add_header Access-Control-Allow-Origin *;`指令。这将允许来自任何的请求访问这些资源。请注意,使用`*`虽然方便,但在生产环境中,出于安全考虑,最好指定具体的。 示例配置如下: ```nginx server { location /hls/ { root /path/to/media/files; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; add_header Access-Control-Expose-Headers 'Content-Length,Content-Range'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } } } ``` 在以上配置中,我们不仅允许了请求,还处理了预检请求(OPTIONS),这是实现CORS(源资源共享)所必需的。通过这种方式,你的Nginx服务器就能够处理来自不同的请求,而不会受到浏览器同源策略的限制。 通过`ffmpeg`将视频文件转换为HLS兼容的m3u8和ts文件后,将它们放置在Nginx指定的根目录下,然后重启Nginx服务器使配置生效。此时,你就可以在浏览器中尝试访问m3u8文件,或者使用支持HLS播放器来检查媒体服务是否正常工作,并且问题是否得到了正确处理。 然而,需要注意的是,虽然`*`允许了所有的请求,但在生产环境中,为了安全起见,最好指定明确的源地址。此外,对于实际部署的点播服务,你可能还需要考虑性能优化、负载均衡、日志记录、安全认证等其他高级配置,以确保服务的稳定性和安全性。 为了更深入地理解和掌握Nginx在Windows环境下搭建HLS m3u8点播服务器的整个程,建议参考《Windows环境下搭建nginx HLS m3u8点播服务器配置教程》这份资源。它不仅涵盖了上述问题的解决方案,还包括了详细的配置步骤、媒体文件的切片处理以及测试验证等多个方面,为读者提供了一个全面的学习平台。 参考资源链接:[Windows环境下搭建nginx HLS m3u8点播服务器配置教程](https://wenku.csdn.net/doc/6412b72ebe7fbd1778d495f6?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值