Skip to content

关于是否有必要支持 sock 监听的讨论 #565

Description

@liangguifeng

问题描述

近期飞牛影视上线了电视直播功能,我在考虑飞牛的 rtp2httpd 适配飞牛影视的问题。

实际上是使用了rtp2httpdRTPHTTP 的功能,然后在飞牛配置直播源链接为:

#EXTM3U x-tvg-url="https://tv.mxdyeah.top/epgphp/t.xml.gz"

#EXTINF:-1 tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://upload.112114.xyz/logo/CCTV1.png" group-title="央视",CCTV-1
http://10.0.0.253:5140/rtp/239.253.64.120:5140?fcc=10.255.75.73:15970
#EXTINF:-1 tvg-id="CCTV2" tvg-name="CCTV2" tvg-logo="https://upload.112114.xyz/logo/CCTV2.png" group-title="央视",CCTV-2
http://10.0.0.253:5140/rtp/239.253.64.195:5140?fcc=10.255.75.73:15970

这样配置后,在局域网内确实可以在飞牛影视中看转换后的视频流了,如图:

Image

但是这也仅限于局域网内,当使用飞牛 fnconect 访问飞牛影视时,他请求的视频流地址还是:http://10.0.0.253:5140,这就不对了

于是我换了个思路,从 fnconect 中抓取 rtp2httpd 的应用地址,我配置上去后,发现因为 rtp2httpd 的域名为:https://rtp2httpd-player.xxx.5ddd.com,而飞牛影视的域名为:https://xxx.5ddd.com/v,因为 cookie 作用域的问题,无法带到 https://rtp2httpd-player.xxx.5ddd.com 中,导致请求为未认证请求,无法请求成功。

解决方案

我从飞牛应用的开发者文档,获取到思路,就是把 rtp2httpd 应用的地址也变为: https://xxx.5ddd.com 同样的 fnconect 域名

有三种方式:

  1. rtp2httpd 增加支持监听 sock,这样既监听 5140 端口,也支持 sock 文件监听,飞牛就可以通过 sock 文件的模式将应用暴露在飞牛 fnconect 的主域名,在飞牛开发文档里这个名词叫做【统一网关注册】,也就是可以通过这样访问应用: https://xxx.5ddd.com/app/{appname},飞牛影视认证的 cookie 就会带上,就不会造成鉴权问题。

  2. 我在飞牛应用中,编写一个前置的 go 程序,代理 rtp2httpd 程序的请求,而该 go 程序使用多监听模式,并将其请求的结果都转发到 rtp2httpd 中,但是这样就形成了一个多层代理,go 应用代理 -> rtp2httpd 程序 -> 代理 IPTV 组播流,中间又有可能出现一些兼容性问题。

  3. 联系飞牛官方,让其支持开放 nginx 反向代理功能,这样通过 nginx 来反向代理,就没有问题了,但是我感觉飞牛官方不会开放这个权限,因为之前 nginx 权限就是因为滥用而封起来的😂

这里是与各位讨论方案,如若 @stackia 支持我在 rtp2httpd 增加监听 sock 的支持,那我这几天可以写一下,然后提 PR,否则就只能考虑另外两种方案。如果是应用内再做一层 go 程序代理,那么这个代理应该仅限于使用在飞牛影视,其他正常行为推荐还是走端口模式,端口模式还是会保留

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions