- Date: 2023-02-01 22:23:40
前言
- 建议配合视频教程一起使用,这篇提供我已知的最优解,但不一定是最好;
- 完成本地的直播网站需要一台满足配置要求的设备(能带动OBS+内网穿透且承载住他人的拉流;主要吃CPU和宽带,CPU方面基本上一般电脑都可以),体量不大宽带家用蛮够,主要看映射软件给你开放的宽带(obs默认码率一个访问者流量传输约为128KB/s),如果面向人群体量稍大如班级可以考虑研究一下p2p技术,再大这则博客就没用了,大型的平台主要采用CDN分发和p2p;
- 需要两条http协议的隧道,如果网页有托管可以直接对外公开的话可以只要一个隧道(Github是https打头,数据不和http互通,需要额外配置)
准备工作
除内网穿透需求可能要多个,其他工具只要一个即可
Windows自带的IIS组件
-
内网穿透工具(这里只列出支持http/https协议的)(视频演示方法需要凑出2条隧道)
- cpolar:学习成本低;无需实名;无限流量;动态域名且无UDP;速度较低;http协议提供免费动态域名,免费一条http隧道
- 飞鸽:学习成本低;0.5M,签到给流量;http协议提供免费域名;免费两条隧道但http只能一条
- OpenFrp 内网穿透(需域名):学习成本低(带GUI启动器和樱花相似)免费,签到领流量;部分节点无需实名;速度限制12M/s(速度取决于所选节点与访客距离);固定域名;http协议需要绑定自己的域名
- NATAPP:学习成本一般;动态域名;实名;1M;http协议提供免费域名
- 闪库:1M/s;仅支持Http,随机固定域名;未来可能实名 (以下是其他我没用过的内网穿透)
- ngrok(https):学习成本一般;无需实名;只给一条免费隧道,离得近的节点延迟较低;http会自动换https协议(相当于不支持http)
- 花生壳(https):极低的学习成本;实名1M每月1G且无Http只有https,隧道固定域名
- ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)
工作原理及其流程(视频配置)
- OBS添加采集源(常用三个):
- 显示器采集(桌面画面)
- 游戏源(全屏程序)
- 音频输入采集(麦克风)
- OBS推流配置
OBS选择设置 —>推流页面;服务选择自定义
服务器(推流地址)默认填rtmp://127.0.0.1:1935/live/(如果要改下面的拉流地址也要改一下)
启动流媒体服务器LiveGo并获取channelkey;在浏览器地址栏输入http://localhost:8090/control/get?room=movie
并回车,复制给出的channelkey填写到OBS推流页面的串流密钥**;
启动内网穿透工具,此处以NatApp和飞鸽为例(需要两条http隧道在线)
- 飞鸽(映射80)
1.官网注册账号进入控制台
- 开通隧道 —> 选一个免费节点 —> 备注、前置域名自定义 —> 本地IP端口后面的端口改为80 —> 确认开通
- 下载对应的客户端,此处以带GUI的客户端为例,将隧道的id粘贴进去再启动隧道即可
- NatApp(映射7001)
- 官网注册账号进入仪表盘
- 购买隧道 —> 免费隧道:隧道名自定义;Web类型;本地端口7001
- 下载客户端,将authtoken复制粘贴到Natapp的配置文件中 其中,80端口为phpstudy部署网页的默认端口,根据自己网站填写不同的,如hexo使用4000,vue则为8080 7001端口为LiveGo提供的HTTP-FLV传输协议的接口 每个隧道映射成功后都会给一个没有端口的地址,这个之后会用到
- 网页播放器配置
记事本或其他文本编辑器方式打开压缩包解压后的LiveOnlineWeb\phpstudy_pro\WWW\index.html文件 将body标签中的script标签内播放器的url改为内网穿透映射7001端口后给出的地址 + OBS推流地址端口后面的路径 + movie.flv 示例:url: 'http://xxxxxxxxx.xx.cpolar.top/live/movie.flv' 本地拉流地址:url:'http://127.0.0.1:7001/live/movie.flv' (本地视频流地址,只有主机能够拉流成功,其他人访问是拉自己设备该地址对应目录下的文件,故其他人无法拉流成功,仅供自己测试用,该地址不会占用宽带)
- 打开PHPstudy应用程序
- 启动WNMP服务
- 在浏览器地址栏输入http://127.0.0.1:80 或 http://localhost 即可进入本地网页(80可选填,都一样)
- 检验是否推流成功
方法一:在浏览器地址栏中直接将url地址填入并回车,检查浏览器是否能够下载到一个名为movie.flv的文件
方法二:直接打开网站检查是否能加载出直播画面以及声音
问题排查:
- 方法二播放器黑屏然后使用方法一发现能够下载到流视频文件,这时候只要刷新一下网站即可,再不行OBS切断重新推流再刷新
- 直播画面有声音但是黑屏,可能是程序画面采用全屏方式运行但在采集源中没有对全屏应用的画面采集,此时在OBS采集源中加入游戏源选择采集任意全屏应用程序即可;或者将全屏程序改为窗口模式或者无边框模式
- 有电脑的声音但是听不到自己发的声音,可能是没有麦克风的采集源,在OBS采集源加入音频输入采集;或者使用其他手段如手机电脑加入同一个通话频道,会自动采集通话程序的声音,就是回声可能相对严重,也会有一定延迟,此时建议使用WO Mic。
最后将内网穿透映射网页端口提供的地址分享给他人浏览即可, 其他人用浏览器打开该地址即可通过静态网页上的播放器就可以观看你的OBS推出的视频流画面。
- 本地拉流演示图(不一定正确)
- 其他人观看直播原理演示图(不一定正确)
拓展
这个问题我目前是采用多线程的方法解决的(整合包中我提供了line234页面并写好了超链接,根据需要自行填入映射好的7001本地端口地址到视频流的url),通过启用多个内网穿透工具共同映射7001端口,分别将给定的地址填入不同的页面,用户通过切换页面来减少单个内网穿透工具的宽带压力,以此实现宽带的拓展
倘若有人的主机电脑没有麦克风或麦克风坏了,正好有手机在身边可以使用的话可以使用WO Mic来解决这个问题
WO Mic局域网连接使用教程
- 流程图:
- 手机端启动WO Mic应用程序并运行(在局域网广播)
- 将给定的局域网地址填写到电脑WO Mic Client的连接 —> 连接... —> 手机IP地址输入框中 —> 再点击连接即可
- 手机端控制音量大小和是否传输声音(=开关麦);电脑端可以选择设置本地播放方便调试声音
总结
通过内网穿透直播仅适合面向小众群体,例如学生等无法与直播平台签约或者不想和直播平台签约又想体验直播的人群,或者只是单纯想挂在自己博客上让访客碰运气看看有没有直播。 这项技术优点是搭建迅速而且免费(不花钱可以使用,人数不多体验还是很好的),有域名的话可以使用更好的映射软件,它们提供更好的免费的宽带,如OpenFrp(地址上面链接),感兴趣的可以尝试一下,我下面会发布整合包的链接(不含内网穿透工具和推流工具,需自行额外安装)
- 蓝奏云
https://wwxr.lanzoum.com/i1uKo0mhm3id 密码:civt
- 百度网盘
https://pan.baidu.com/s/1p33ncwXEq1UmLEuEerVSKA?pwd=1111 提取码:1111