动态公网IP 和 SRS-CarlZeng
背景
动态公网IP(Dynamic Public IP)是指由互联网服务提供商(ISP)分配给用户的动态IP地址,该地址是公共的,可以在公共互联网上访问。
与静态公网IP不同,动态公网IP是临时分配的,并且在一段时间后可能会更改。这意味着每次重新连接到互联网时,用户可能会被分配一个新的动态公网IP地址。
动态公网IP通常用于个人用户或小型企业,因为它们相对便宜,而且不需要用户进行任何配置或管理。但是,由于其不稳定性和易变性,动态公网IP可能不适合需要稳定和持久的互联网连接的大型企业或组织。
联通的adsl用户可以打10010 叫客服打开“动态公网IP” + 路由器桥接。(缘由:需要动态公网ip做监控或者访问服务)
开启动态公网IP+路由器桥接以后, 路由器上拨号即可得到一个公网IP.
OpenWRT 路由器 设置端口映射, 即可将局域网内主机的端口 映射到公网IP的特定上。
题外话(弯路):(Padavan的系统,在端口映射是使用单独的工具(socat耗内存)来实现端口数据转发,OpenWrt的iptables更可靠,扎实稳定)
下面以mac电脑,架设SRS服务器 来:分享流媒体至互联网。
进度、历史记录与下一步计划
- 20240705 开放公测一个月,截至日期20240805;请参见本文底部的‘开放公测’章节
1. 安装SRS步骤
(安装Docker.dmg后, 运行下面的指令)
SRS文档:https://ossrs.net/lts/zh-cn/docs/v4/doc/getting-started
首先要先把安装好的Docker启动,屏幕右上角会出现鲸鱼背楼的图标,确保其正在运行。
Steps to run docker:
cd /Users/abc/WebstormProjects/srs/srs/trunk
运行:
1
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf
1
2
3
4
5
6
7
8
9
10
11
12version: "3"
services:
srs:
stdin_open: true
tty: true
ports:
- 1935:1935
- 1985:1985
- 8113:8080
- 8000:8000/udp
- 10080:10080/udp
image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5推流(循环读取音视频文件,进行推送)
1 | ffmpeg -re -stream_loop -1 -i './...' -c copy -f flv rtmp://localhost/live/livestream |
备注:-stream_loop 中 -1 表示无限循环;0表示 不循环;适合于小文件
4. 播放观看
http://localhost:8080/players/srs_player.html
5. 外网映射
注意: 映射的时候不能使用8080端口, 建议使用60000以上的端口 (因isp防火墙已封锁这些特殊的端口)
建议使用frp,具体的配置方法可参考https://freefrp.net/docs,
或后续的相关文字 ,运行命令:./frpc -c frpc.ini
2. 推流方案
使用obs推流
下载并安装 obs-studio-29.0.2-macos-arm64.dmg
Obs 打开后右下角的设置 >直播 >服务选择自定义服务器为rtmp://localhost/live/, 推流码为1(可以是任意数字和字母,可理解为房间号)
添加内容(音频,视频)后,点击开始直播。
———播放部分———
最终得到的 播放地址为: http://localhost:60080/live/1.flv
工具可选用VLC或者网页形式http://localhost:8080/players/srs_player.html
经验:
使用ffmpeg3流远程m3u8媒体时,经常会容易断流或电脑休眠后会断流, 这时我们最好使用 obs 转播来源为window capture的方案。
20230419 Update
问题:那如果我仅仅需要修改镜像文件中的某个特定的html,我要怎么做? 如果您只需要修改镜像文件中的某个特定的 HTML 文件,可以通过以下步骤来实现:
1. 下载 SRS 镜像文件并创建容器。
docker run -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4
debian中的安装目录 /www/server/panel/data/compose/
2. 进入容器,并找到您需要修改的 HTML 文件所在的路径。
docker exec -it
cd /usr/local/srs/objs/nginx/html/
3. 使用文本编辑器修改 HTML 文件。
vi index.html
保存修改并退出容器。
4. 使用 docker commit 命令将修改后的容器保存为新的镜像。
docker commit
5. [optional]将新的镜像推送到 Docker 镜像仓库中(如果需要)。
docker push
6. 在部署 SRS 服务时,使用新的镜像标签来启动容器。
docker run -it -p 1935:1935 -p 1985:1985 -p 8080:8080
使用vMix推流
vMix: Live Video Streaming Software
vMix
https://www.vmix.com
vMix is a live streaming and live production software video mixer and switcher for Windows. Easily Produce, Record and Live Stream professional looking …
VS OBS, it sounds like vMix is better
状态:待测试
错误及解决方案
问题:vi index.html. 提示错误:bash: vi: command not found。 我要怎么办?
如果在容器中执行 vi 命令时提示 command not found 错误,说明容器中没有安装 vi 编辑器。
您可以尝试使用其他文本编辑器来修改 HTML 文件,例如 nano 或者 emacs。这些编辑器通常已经包含在大多数 Linux 发行版中,也可以通过 apt-get 命令进行安装。
例如,您可以使用以下命令来安装 nano 编辑器:
apt-get update && apt-get install -y nano
然后,使用 nano 命令来编辑 HTML 文件:
nano /usr/local/srs/objs/nginx/html/index.html
编辑完毕后,使用 CTRL + X 快捷键保存修改并退出编辑器。
或则可以选用更干净的: 改到docker-compose文件中方案
1 | version: "3" |
自定义srs_player.html页面
1 | docker-compose up -d |
这样就获取到了容器内的srs_player.html文件内容, 编辑添加matomo代码
20241007 测试使用
1 | rtsp://a:a@192.168.6.126:554 |
排查乐橙TP1Z摄像头rtsp流地址
个人记录
rtmp 转化http
ffmpeg -re -i rtmp://192.168.6.116:1935/stream/test -c copy -f flv rtmp://192.168.6.116:1985/myapp/testv
6:30pm 可选:https://github.com/ZLMediaKit/ZLMediaKit
》6:48am 跑不起来docker, 卡在:Attaching to rtmp-hls-rtmp-hls-1
7:46pm> continue: Docker image for video streaming server that supports RTMP, HLS, and DASH streams.
8:13am send stream to
ffmpeg -i "rtsp://a:a@192.168.6.126:554" -f flv -r 25 -an rtmp://192.168.6.116:1935/live/test
8:28am 网页播放失败;可以rtmp,但是无法网页player播放
https://nas.carlzeng.top:3/webman/3rdparty/SurveillanceStation/
8;56am
admin:admin@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1
这个才是正确的串流地址!!!
https://nas.carlzeng.top:3/webman/3rdparty/SurveillanceStation/
9am
10am> 内网摄像头如何实现推流到公网,实现WEB播放
SRS is a simple, high-efficiency, real-time video server supporting RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH, and GB28181.
old: SRS + OBS(heavy)
10:15am 修复推流命令,优化:
ffmpeg -i "rtsp://admin:a@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1" -f flv -r 25 -an rtmp://192.168.6.116:1935/live/livestream
重新适应SRS
ffmpeg -re -i "rtsp://admin:a@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1" -c copy -f flv -y rtmp://192.168.6.116:1935/live/livestream
10:32am
过程直播(无回放)查看步骤
1. 浏览器打开播放器 https://www.carlzeng.top/202312081128
2. 播放URL中输入 http://op.carlzeng.top:18113/live/livestream.m3u8
调试:http://192.168.6.116:8113/
播放http://192.168.6.116:8113/players/srs_player.html?schema=http&port=8113&api=8113
10:55am rtmp.html works
https://bilibili.github.io/flv.js/demo/
[TransmuxingController] > IOException: type = Exception, code = -1, msg = Failed to fetch
3:21pm 更改端口转发到新端口:18114
>3:41pm
无法启动大华的544端口
台式机无法使用 显示器
admin:admin@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1
1 | % nc -vz 192.168.6.126 554 |
没办法,只能硬件重置这个摄像头;无法连接rtsp了!
长按摄像头背后的rest按钮15s;语音提示:
重置摄像机成功
请开始无线配对
重置以后依然无效,无法连接到554端口
原来TP1Z要打乐橙的客服电话: 大华400-672-8166; 子公司乐橙400-672-8169
去流程
rtsp://admin:a@192.168.6.126:554/realmonitor?channel=0&subtype=0
默认的IP地址192.168.1.108 (连接IP但是需要插入网线!)
1 | 【华橙网络】实时监控码流Url 格式: |
打了半天电话:
- 重置摄像头,重启摄像头
- 升级乐橙APP到最新版8.0.1
- 这个APP不会动摄像头的固件
- APP中删除摄像头重新添加
- 最后修改了码流地址这些后1,1成功了:
1 | rtsp://admin:a@192.168.6.126:554/realmonitor?channel=1&subtype=1 |
刚好IPTV checker的docker中有这个ffmpeg推流工具。
srs-srs-1, iptvchecker-website-1
这个docker里面,由于无法访问到外部的‘局域网’而无法给局域网中的摄像头推流。
运行到NAS中去了:
1 | ffmpeg -re -i "rtsp://admin:a@192.168.6.126:554/cam/realmonitor?channel=1& |
ffmpeg如何让它去后台运行?
nohup 运行出错,使用下面的方法(nohup 加 1>/dev/null 2>&1 &):
1 | nohup ffmpeg -re -i "rtsp://admin:d@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1" -c copy -f flv -y rtmp://192.168.6.116:1935/live/livestream 1>/dev/null 2>&1 & |
用 kill -9 8286 这样的命令,杀死那些测试的进程,留下一个运行着的ffmpeg即可(已经nohup并且无输出了)
ffmpeg推流Error opening input: Server returned 401 Unauthorized
这是一个输入端的错误,无法获取TP1Z的数据流,原因是授权失败;
用VLC播放验证后确定问题点:用户名或密码错误
解决:本地尝试推流成功,放到NAS中;下一步:设置为NAS开机自启动
回放取流url
1 | rtsp://admin:d@172.22.0.26:554/cam/playback?channel=1&subtype=1&starttime=2024_07_04_11_50_00 |
说明:
- playback表示回放
- channel=number表示通道号
- subtype=0表示主码流
- starttime=YYYY_MM_DD_HH_mm_SS表示回放开始时间
- endtime=YYYY_MM_DD_HH_mm_SS表示回放结束时间
20240705 实测有效,vlc播放成功。这是一个实用的功能
可随时查看回放
SRS控制台
本地局域网查阅控制台后端情况,需要注意这个“连接到您的SRS服务器”配置
推流上下点功夫,参数上调整,来提高远程查阅m3u8的速度?
nohup ffmpeg -re -r 24 -b:v 2000k -bufsize 3000k -i “rtsp://admin:d@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1” -c copy -f flv -y rtmp://192.168.6.116:1935/live/livestream 1>/dev/null 2>&1 &
其中,可以调整 -r、-b:v 和 -s 等参数来优化视频传输速率,从而缩短推流间隔。
1 | video bitrate (please use -b:v)) cannot be applied to input url |
1 | [in#0/rtsp @ 0x12cf04220] Codec AVOption bufsize (set ratecontrol buffer size (in bits)) is not a decoding opti |
-r 25
-s 640*480
512x512
600x240
640x512
1024x512 default
hd720
尝试了各种参数都失败了,
srs 如何使用udp进行传输?
待优化
注意到一个webrtc的低延迟播放方式:
webrtc://192.168.6.116/live/livestream
http://192.168.6.116:8113/players/whep.html#
Enter the WebRTC WHEP URL and click “Play” to start playing.
不知具体故障点在那里,已开放1935,而未开放其他端口;添加开放:
SRS Docker open 1985,8000,10080 on 20240705
CDN加速
一、基础配置
- 设置Cloudflare的域名CNAME,从camc解析到blogcdn的特定指向。
- 在blogcdn中,申请camc域名证书和新增网站,设置如下图所示
二、搭配本地的OpenWrt设置:
- 开放OpenWrt的18114指向服务器的8113端口
- 然后原先的4443映射到NPM中的一条新纪录cam1(NPM把这个cam1变成https带端口方式,常规设置,可单独测试)
开放公测
请留言或提交问卷告知我体验情况(您的ISP,网速,连通情况画面是否卡顿),感谢