第三方程序播放M3U8失败
1 年前

常见问题

一般使用第三方CMS播放切好的M3U8链接时,最常见的问题就是跨域问题,其次是HTTPS问题。

注意:看该问题前,请先保证转码程序本身的M3U8地址可以正常播放,如不能可查看左侧【转码后台的m3u8播放不了】进行解决。

https协议与http协议问题

调试确定

pc上使用谷歌浏览器打开播放页面,按下f12,点击播放的时候查看控制台,看到以下类似错误即为该问题。

解决办法

由于https引用http资源的时候,可能会引用失败,所以如果你的第三方CMS程序开启了https,而转码程序(M3U8)访问链接为http的话,播放可能会失败,解决办法将2者都调整为https或者http

跨域问题

提示:如果确认为跨域问题,而你切片地址使用的ip:3000访问,那么在不会解决的情况下,请先看文档安装教程绑定域名后,再进行解决。

调试确定

pc上使用谷歌浏览器打开播放页面,按下f12,点击播放的时候查看控制台,看到以下类似错误即为该问题。

确定跨域后缀

首先从调试的截图中,获取下跨域后缀,如下图:

该图显示ts后缀跨域,当然有时候可能是其他后缀,这里以实际情况为准。

解决方法

这里以宝塔面板为例,先点击域名设置-反向代理-编辑配置文件,再以下代码复制进去:

#单个ts后缀跨域
location ~ .*\.ts$
{
    add_header Access-Control-Allow-Origin *;
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr; 
}

#多个后缀跨域,比如m3u8和ts,中间用|分开
location ~ .*\.(m3u8|ts)$
{
    add_header Access-Control-Allow-Origin *;
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr; 
}

proxy_pass为反代地址,可参考初始反代配置的地址。

参考示例图(本截图只做参考,具体情况以实际为准):

APP或者部分手机浏览器不能播放

仅IOS设备或APP出现

1、可能在【转码设置】中开启了防下载合并功能,关闭即可。
2、对于APP,http不能播放的话,建议开启https。

部分浏览器

1、如果开启了ts广告片头,则关闭试试。
2、排除第1个问题的话,可能是跨域问题,解决方法参考上面。
3、排除第2个问题后,那可能需要检查自身播放器

如何使用Nginx托管切片等文件

注意:该方法适用于只想用切片等文件的情况下,就算程序运行关闭也不影响播放。

大致上可参考该教程→使用Nginx托管切片等文件

关于程序跨域

1、在【转码设置】中引用网址(防盗链)选项为空的情况下,默认所有域名都可以引用,设置后只能通过ifream引用,不会引用的可留空。
2、程序默认放行【转码设置】中自定义后缀的文件,如果你设置后缀ts,则默认放行,如果你中途修改过后缀,则可能会对修改前的后缀产生跨域,使用上面的跨域设置对该后缀处理下即可。