动态公网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:

  1. cd /Users/abc/WebstormProjects/srs/srs/trunk

  2. 运行:

    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
    12
    version: "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
  3. 推流(循环读取音视频文件,进行推送)

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 /bin/bash
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 需要注意的是,这种方式只适用于修改镜像中的某个特定的文件。如果您需要对 SRS 的配置文件或者其他文件进行修改,建议使用 Dockerfile 来自定义 SRS 镜像。


使用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
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3"
services:
srs:
stdin_open: true
tty: true
volumes:
- ./srs_player.html:/usr/local/srs/objs/nginx/html/players/srs_player.html
ports:
- 1935:1935
- 1985:1985
- 8113:8080
- 8000:8000/udp
- 10080:10080/udp
image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5

自定义srs_player.html页面

1
2
3
docker-compose up -d
docker cp srs-srs-1:/usr/local/srs/objs/nginx/html/players/srs_player.html srs_player.html
Successfully copied 13.8kB to /www/server/panel/data/compose/srs/srs_player.html

这样就获取到了容器内的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.com:3/webman/3rdparty/SurveillanceStation/

8;56am
admin:admin@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1
这个才是正确的串流地址!!!


https://nas.carlzeng.com: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.com/202312081128
2. 播放URL中输入 http://op.carlzeng.com: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
2
% nc -vz 192.168.6.126 554                                                        
Connection to 192.168.6.126 port 554 [tcp/rtsp] succeeded!

没办法,只能硬件重置这个摄像头;无法连接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
2
3
4
5
6
7
8
【华橙网络】实时监控码流Url 格式:
a、请求实时监控码流Rtsp流媒体服务时,应在Url 中指明请求的通道号、码流类型,如果需要认证信息,还有提供用户名和密码。Url 格式说明如下:rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0

b、其中:username: 用户名。例如admin。password: 密码。例如admin。ip: 为设备IP。例如 10.7.8.122。port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。

例如,请求某设备的通道2的辅码流,Url如下rtsp://admin:admin@10.12.4.84:554/cam/realmonitor?channel=2&subtype=1 确认相机网页设置,在设置-系统管理-系统服务-RTSP over TLS 选项是否开启,需关闭。

打了半天电话:

  1. 重置摄像头,重启摄像头
  2. 升级乐橙APP到最新版8.0.1
    1. 这个APP不会动摄像头的固件
  3. APP中删除摄像头重新添加
  4. 最后修改了码流地址这些后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
2
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

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

image-20240711121401116

这是一个输入端的错误,无法获取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服务器”配置

image-20240704123522227

推流上下点功夫,参数上调整,来提高远程查阅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
2
3
video bitrate (please use -b:v)) cannot be applied to input url
Option b:v (video bitrate (please use -b:v)) cannot be applied to input url rtsp://admin:d@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
Error opening input files: Invalid argument
1
2
[in#0/rtsp @ 0x12cf04220] Codec AVOption bufsize (set ratecontrol buffer size (in bits)) is not a decoding opti
on.

-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加速

一、基础配置

  1. 设置Cloudflare的域名CNAME,从camc解析到blogcdn的特定指向。
  2. 在blogcdn中,申请camc域名证书和新增网站,设置如下图所示

二、搭配本地的OpenWrt设置:

  1. 开放OpenWrt的18114指向服务器的8113端口
  2. 然后原先的4443映射到NPM中的一条新纪录cam1(NPM把这个cam1变成https带端口方式,常规设置,可单独测试)

image-20240712104642468

image-20240712104809021

开放公测

请留言或提交问卷告知我体验情况(您的ISP,网速,连通情况画面是否卡顿),感谢

个性化需求沟通 扫客服加V加群: