Streaming-Media-Server-Pro
前言
我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视、视频等流媒体的提供商,兼容全平台,只需使用视频播放器调用接口链接即可享用,不多说开始喽。
开源程序介绍点击跳转
部署教程 by Naihe
💡提示:最好将本项目部署至美国地区的服务器,否则可能会出现奇怪的BUG。
推荐大家使用Digitalocean的服务器,主要是因为免费。
使用我的邀请链接注册,你可以获得$200的credit,当你在上面消费$25时,我也可以获得$25的奖励。
我的邀请链接:
https://m.do.co/c/45e25f5e4569
根据以下通用命令部署本项目
一键部署教程:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8252305
详细部署教程:https://www.cnblogs.com/1314h/p/16651157.html
免费公益接口:https://stream.naihe.cf/docs
公共站点: 我很脆弱...请勿压测(·•᷄ࡇ•᷅ )
该教程是我呕心沥血写成,使用教程包括程序部署和每个接口使用说明等,尽量保证每个人都会使用,部署总结概括需要做到以下及几点:
- 安装python或者docker(二选一必装)
- 安装PostgreSql或者MySQL数据库(二选一推荐安装)
- 安装Redis数据库(可选安装)
- 一定的耐心(看完下面详细的教程)
先说明我的配置
服务器1:1G内存+10G存储,mysql数据库,redis数据库
分布式下载5台
下载 ts + 上传数据库 ~ 1s时间
最近在256M内存VPS部署该程序,经测试也可以正常运行
以上仅供参考,程序对配置要求不高,实际使用1台服务器即可使程序正常运行。
服务器位置最好在香港、日本等物理距离近的地方,尽量不要选择国内主机。
一键部署
Python和Docker二选一安装
安装Python运行(二选一,必选)
Python版本推荐3.9+
安装Python很简单,不同系统安装方式也不同;避免篇幅冗长请自行百度,相信凭各位能力可以解决;该项是程序的核心支撑服务,一定要安装!
安装好Python后看下面
命令终端执行
git clone https://github.com/239144498/Streaming-Media-Server-Pro.git
安装python环境依赖
pip install -r requirements.txt
让程序跑起来
python main.py
浏览器访问:http://ip:8080/docs
安装Docker运行(二选一,必选)
Docker项目地址:https://hub.docker.com/r/239144498/streaming
安装Docker很简单,不同系统安装方式也不同;避免篇幅冗长请自行百度,相信凭各位能力可以解决;该项是程序的核心支撑服务,一定要安装!
安装好Docker后看下面
拉取镜像
docker pull 239144498/streaming
让程序跑起来
以下二选一执行
1、直接运行(新手推荐)
docker run -itd -p 8080:8080 --restart=always --name server 239144498/streaming
浏览器访问:http://ip:8080/docs
2、挂载目录运行(主机目录共享给容器)
创建存放配置文件的文件夹
mkdir /home/assets
创建并编辑config.ini文件
vim /home/assets/config.ini
按i再输入你的配置文件内容,完成后ESC 输入”:wq!“回车
docker run -itd -v /home/assets:/code/app/assets -p 8080:8080 --restart=always --name server 239144498/streaming
浏览器访问:http://ip:8080/docs
程序额外功能
自定义IPTV源
该程序支持自定义源,如果你有其他iptv源,可以添加到该程序中,在app/assets/diychannel.txt文件中添加你的频道,如下图:
Ps:使用Docker 需要把文件放到本机的/home/assets目录
添加后使用/program.m3u接口就可以看到自己的IPTV源啦。
挂载配置文件
做这个功能是为了解决Docker中config.ini文件重复配置问题,比如Docker镜像重新安装后可以读取挂载目录中已配置好的config.ini文件到容器中,减少不必要操作。
Ps: 在Docker中自定义IPTV源也是把文件放到本机的/home/assets目录
创建存放配置文件的文件夹
mkdir /home/assets
创建并编辑config.ini文件
vim /home/assets/config.ini
按i再输入你的配置文件内容,完成后ESC 输入”:wq!“回车
进阶操作
*下面操作都是可选的,愿意掌握程序更多功能往下看
Config.ini文件配置(可选)
config.ini配置文件可以保持默认不用修改
Config.ini文件在程序路径.app/assets/config.ini
根据实际情况配置参数,例如安装了MySQL,在config.ini更改为你的参数即可,PostgreSql数据库类似填写,不懂就不修改。
[default]
# defaultdb 选择参数:mysql | postgresql | 留空则不连接数据库
defaultdb =
[mysql]
# 将下列5行改为你的参数
host = 192.168.1.x # ip地址
user = root # 用户名
password = 123456789 # 密码
port = 3306 # 端口
database = media # 数据库名
设置外网访问:你的ip+端口 或者 域名 + 端口
# 你的外网映射端口号,默认8080
port = 8080
# 修改192.168.1.x为你的ip或域名
localhost = http://192.168.1.x:%(port)s
视频下载选项,部署了分布式下载选online,否则选local,该前提是已安装数据库
# downchoose参数:local | online
downchoose = local
部署分布式代码下载,你需要点击跳转部署(前提:需要在线托管服务,或者主机)
免费托管服务推荐:
pythonanywhere:https://www.pythonanywhere.com
heroku:https://www.heroku.com
免费redis:https://console.upstash.com
设置视频缓冲区,安装了数据库看这里
# 视频缓冲区大小,local推荐2-3,online推荐4-5
# 实际根据网络带宽和计算机性能决定
vbuffer = 3
# 分布式视频下载器
# local示例["https://"+localhost+"/url3?url=", ...]
# online示例["https://www.example1.com/url3?url=", ...]
# 有多个分布式下载链接使用方法如下,否则参数不要改
downurls = ["%{localhost}s/url3?url=",
"https://www.example1.com/url3?url=",
"https://www.example2.com/url3?url=",...]
更多Config.ini配置(可选)
程序默认使用我提供的EPG节目单(每日会自动更新),如果你需要创建该脚本,需要在config.ini配置文件提供xmlowner、xmlrepo、xmlaccess_token这三个参数。
# 存放节目单仓库
xmlowner = 用户名
xmlrepo = 仓库名
xmlaccess_token = token
下面是进阶操作,不懂就不修改。
[advanced]
host1 = 4gtvfreepc-cds.cdn.hinet.net
host2 = 4gtvfree-cds.cdn.hinet.net
# tvglogo可选参数:fsLOGO_MOBILE 台标 | fsHEAD_FRAME 播放预览
tvglogo = fsHEAD_FRAME
# 对所有接口启用代理,没有就不用配置
# 代理有身份验证: http://user:password@10.10.1.10:3128
# 代理无身份验证: http://10.10.1.10:3128
# 支持协议 http | https | socks5
proxies =
安装Mysql(建议安装)
要求Mysql版本5.1.6+
安装Mysql很简单,不同系统安装方式也不同;避免篇幅冗长请自行百度,相信凭各位能力可以解决;完成后可开启视频缓冲区功能,不安装就跳到第二步
开启Mysql后看下面
执行以下sql命令
tips:在config文件中正确填写Mysql信息,程序会自动完成下面命令,前提需要账号有足够权限
创建数据库
CREATE DATABASE media
创建video表
create table media.video(
vname varchar(30) not null,
CONSTRAINT video_pk PRIMARY KEY (vname),
vcontent MEDIUMBLOB NOT NULL,
vsize varchar(20) NULL,
ctime timestamp(0) default now()
);
设置定时删除事件
SET GLOBAL event_scheduler = ON; # 开启事件调度器
use media;
DROP event IF EXISTS auto_delete;
CREATE EVENT auto_delete
ON SCHEDULE EVERY 30 minute # xx分钟根据数据库的存储和查询性能综合决定
DO
TRUNCATE video;
最后在Streaming-Media-Server-Pro/app/assets/config.ini 配置文件中改成你的ip、port等参数
安装Redis(可选安装)
安装Redis很简单,不同系统安装方式也不同;避免篇幅冗长请自行百度,相信凭各位能力可以解决;完成后可缓存参数,解决重启服务数据丢失问题,且方便多服务共享数据。
我在程序中设置了以内存作为缓存,所以也可以不安装,但缺点就是重启服务数据丢失。
开启Redis后看下面
开启了ssl需要在代码中的ssl设置true,默认false
最后在Streaming-Media-Server-Pro/app/assets/config.ini 配置文件中改成你的ip、port等参数
Docker扩展操作
查看容器状态
docker ps -a
查看镜像列表
docker images
查看容器资源使用情况
docker stats
查看容器内部的标准输出
docker logs [ID或者名字]
进入容器命令终端
docker exec -it server /bin/bash
查看端口开放状态
netstat -anp | grep 8080
重启容器
docker restart IMAGE_ID
删除容器
docker rm CONTAINER_ID
删除镜像
docker rmi IMAGE_ID
完整Config.ini配置信息
# 先看教程,不懂就不要乱改参数,后果将导致程序运行出错!
[default]
# defaultdb 可选参数:mysql | postgresql | 不连接数据库则留空
defaultdb =
# downchoose 可选参数:local | online
downchoose = local
# 你的外网映射端口号,默认8080
port = 8080
# 修改192.168.1.x为你的ip或域名
localhost =
# vbuffer视频缓冲区大小,downchoose:local推荐2-3,online推荐4-5,实际根据通信带宽和计算机性能决定
vbuffer = 3
# 以下3个参数不懂就不要动
downurls = ["%(localhost)s/url3?url="]
# 进阶操作,默认不用改
[advanced]
host1 = https://4gtvfreepc-cds.cdn.hinet.net
host2 = https://4gtvfree-cds.cdn.hinet.net
# tvglogo可选参数:fsLOGO_MOBILE 台标 | fsHEAD_FRAME 播放预览
tvglogo = fsHEAD_FRAME
# 对所有接口启用代理,没有就不用配置
# 代理有验证: http://user:password@10.10.1.10:3128 | 代理无验证: http://10.10.1.10:3128
proxies =
debug = False
[mysql]
host = 192.x.91.34
user = root
password = 123456789
port = 3306
database = media
[postgresql]
host = 192.x.91.34
user = root
password = 123456789
port = 5432
database = media
[redis]
host = 192.x.91.34
port = 6379
password = 123456789
[other]
# 存放节目单厂库
xmlowner =
xmlrepo =
xmlaccess_token =
# 接口限制指定ip,默认使用我提供的接口
接口使用教程
可以访问 https://stream.naihe.cf/docs 接口文档
GET /online.m3u8
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
host | query | string | 否 | 反向代理域名,例http://www.example.com |
fid | query | string | 是 | 频道参数 |
hd | query | string | 否 | 视频清晰度,可选360、480、720、1080 |
实例请求:http://127.0.0.1:8080/online.m3u8?fid=4gtv-4gtv018&hd=720&host=http://www.example.com
host参数用于反向代理,解决本地部署且未挂梯子工具问题,怎么部署反代自行百度
介绍:客户端请求后将多个ts下载到数据库作为缓冲区,下次客户端请求call.ts就从数据库读取。
GET /call.ts
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
fid | query | string | 是 | 频道参数 |
seq | query | string | 是 | 60466177,由/online.m3u8自动产生 |
hd | query | string | 是 | 视频清晰度,可选360、480、720、1080 |
实例请求:http://127.0.0.1:8080/call.ts?fid=litv-longturn11&seq=60466177&hd=1080
介绍:从数据库读取视频返回给客户端。
GET /channel.m3u8
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
host | query | string | 否 | 反向代理域名,例http://www.example.com |
fid | query | string | 是 | 频道参数 |
hd | query | string | 否 | 视频清晰度,可选360、480、720、1080 |
实例请求:http://127.0.0.1:8080/channel.m3u8?fid=4gtv-4gtv018&hd=720&host=http://www.example.com
介绍:客户端请求后生成视频链接参数,下次客户端请求/live/{file_path}接口默认本机反代,或者使用host参数作为反代,同时起到分流作用,减轻服务器压力。
GET /channel2.m3u8
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
fid | query | string | 是 | 频道参数 |
hd | query | string | 否 | 视频清晰度,可选360、480、720、1080 |
实例请求:http://127.0.0.1:8080/channel2.m3u8?fid=4gtv-4gtv018&hd=720
介绍:重定向视频链接给客户端。
GET /program.m3u
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
host | query | string | 否 | 反向代理域名,例http://www.example.com |
hd | query | string | 否 | 视频清晰度,可选360、480、720、1080 |
name | query | string | 否 | 频道参数 |
实例请求:http://127.0.0.1:8080/program.m3u?&hd=720&host=http://www.example.com
介绍:返回完整fid参数,兼容手机平板电脑全平台,例如用potplayer播放器使用。
GET /EPG.xml
请求参数
无
实例请求:http://127.0.0.1:8080/epg.xml
介绍:返回所有频道未来3天将播放哪些节目
GET /live/{file_path}
请求参数
参数名 | 位置 | 类型 | 必填 | 说明 |
---|---|---|---|---|
file_path | path | string | 是 | 视频url路径 |
token1 | query | string | 否 | token,例FzwRIP1td0zsoDAfEz9 |
expires1 | query | integer | 否 | expires,例1661951225 |
介绍:代理下载视频返回给客户端
❤ 打赏 Donation
如果你觉得本项目对你有帮助,请考虑打赏本项目,以激励我投入更多的时间进行维护与开发。 If you find this project helpful, please consider supporting the project going forward. Your support is greatly appreciated.
你在GitHub给的star
或者赞助
是我长期维护此项目的动力所在,由衷感谢每一位支持者,“每一次你花的钱都是在为你想要的世界投票”。 另外,将本项目推荐给更多的人,也是一种支持的方式,用的人越多更新的动力越足。
免责声明
- 本程序为免费开源项目,供大家管理及观看IPTV频道,方便下载以及学习Python,使用时请遵守相关法律法规,请勿滥用;
- 本程序通过调用官方接口实现,无破坏官方接口行为;
- 本程序仅做重定向/流量转发,不拦截、存储、篡改任何用户数据;
- 在使用本程序之前,你应了解并承担相应的风险,希望使用此程序仅以学习为目的,任何侵害他人利益、商业用途、损害国家名誉或其他违法违规等行为造成的一切后果自行承担,与作者本人无关;
- 如有侵权,请通过邮件与我联系,会及时处理。