再战流媒体服务
引言
曾经<<瞎**>>搞,给我搭建成功了,想看看我以前很傻愣的样子欢迎来赤屎.
完完全全的上网上这里找那里找的,东拼西凑.在那之后,我把我的心路历程还有各种操作写成了一篇文章,发布到掘金上,没想到还上了热榜;丢脸丢到网上了
其实也不算是吧,那次撰写的文章广大网友的评论让我受益良多,让我了解到了这个那个方案,这个那个开源项目.由于最近期末要做一个图像识别设计,我又来处理这方面的事情了;在我学习 docker 的路上,闲着没事在自己的小服务器上面的 docker 商店逛.发现了一个流媒体服务器 SRS .其实这个东西早就在我脑子里盘旋了很久.直到现在才动手去做 demo
蚁钳是蚁钳,现在是现在
知识面广了,了解到更多的方案和技术,也就有了更多的提升优化空间
回归正题
如果再回归之前搭建流媒体服务的 demo,马上就会感到繁琐,还很容易出错,并且不好管理,所有的东西都得手撸.
但是现在有了 srs,似乎一切都变得简单了起来.
从未有过如此美妙的开局
现在只需要一条指令就能启动一个流媒体服务器
也不是,是建立在 docker 的前提下,自行安装 docker 就行了
说明,环境是基于 linux 环境,使用的 linux 发行版是 ubuntu24.04 LTS
1 | docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \ |
srs 官方提供的镜像
这个容器跑起来之后呢,现在要做的就是把摄像头的流推上去了.
于是我就想拿自己的笔记本做实验,把自己笔记本的画面推送到流媒体服务器上面.
这次还是使用 ffmpeg 自行配置安装
验证安装
1 | ffmpeg -version |
出现版本号相关的信息就装好了
推流转码的工具有了,现在就是找设备了.
一般会在/dev
目录下面能找到
1 | ls -l /dev/video* |
选择正常的摄像头,使用 ffmpeg 推流即可
1 | ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/livestream |
参数说明
**-f v4l2 -i /dev/video0**
:-f v4l2
:指定输入设备的格式遵循v4l2
规范。v4l2
是 Linux 系统下常用的视频设备接口标准,用于和摄像头、视频采集卡等设备交互。-i /dev/video0
:指明输入设备为/dev/video0
,也就是系统识别到的摄像头设备。如果电脑连接了多个摄像头,设备编号可能是/dev/video1
、/dev/video2
等,需根据实际情况调整。
**-c:v libx264**
:-c:v
代表选择视频编码器,这里指定使用libx264
编码器。libx264
是非常知名的开源 H.264 视频编码器,能将摄像头捕获的原始视频数据编码成适合网络传输的格式,在流媒体场景应用广泛。
**-preset:v ultrafast -tune:v zerolatency**
:-preset:v ultrafast
:preset
设置编码预设,ultrafast
模式下编码速度极快,能迅速处理视频数据,减少编码耗时,适合对实时性要求极高的场景,不过代价是编码效率略低,同等画质下生成的视频文件可能会更大。-tune:v zerolatency
:tune
用于微调编码参数,zerolatency
这个参数着重于尽可能降低视频流的延迟,确保推流画面能快速抵达观看端,与ultrafast
预设配合,让实时推流体验更流畅。
**-f flv**
:指定输出格式为FLV
(Flash Video)。FLV
格式常用于网络视频流传输,和后续的 RTMP 协议兼容性优良,能够很好承载编码后的视频数据送往服务器。**rtmp://127.0.0.1:1935/live/livestream**
:这是推流的目标地址,127.0.0.1
是本地回环地址,表示推流到本机;1935
是 RTMP 服务常用的端口号;live/livestream
可以当作是自定义的流名称,接收端依据此标识来拉取对应的视频流。
请为我欢呼 ,喝,喝彩
如果到这都没什么问题
访问这个测试页面这是 SRS 官方提供的一个测试页面.输入对应的取流地址
就可以看到摄像头的画面了
在本地测试的时候,可以访问 8080 端口,srs 给我们提供了一个 web 的管理后台
还可以使用 obs 进行推流
测试画面