一、 采集
(一) 视频采集方案
1、 USB高清摄像头(网络主播常用,做小讲座、微课直播很方便)
2、 摄像机加HDMI/SDI采集卡或HDMI/SDI编码器
3、 IP网络摄像头
4、 手机摄像头
(二) 声音采集方案
1、 摄像头、摄像机、手机等自带麦
2、 麦克风加外置声卡或调音台
(三) 录播设备
部分学校有、多机位音视频采集
二、 推流
(一) 常用流媒体协议
协议 | 播放器 | 延迟(秒) | 系统兼容性 |
RTSP | 专用APP | 1 | |
RTMP | 浏览器FLASH | 1-3 | PC |
HTTP-FLV | 浏览器FLASH、HTML5 | 1-3 | PC |
HLS | 浏览器HTML5 | 10-20 | PC、手机 |
备注: IP网络摄像头使用RTSP协议
某些硬盘录像机也可以通过RTSP协议访问
推流采用RTMP协议
播放可采用 RTMP、HTTP-FLV、HLS
(二) 推流方式
1. PC软件,OBS Studio 支持导播、录屏、叠加、抠像等。
OBS自带媒体源 拉取IP摄像头RTSP流不稳定,推荐使用VLC插件
2. PC软件,VMIX常用于LED大屏播放,可控制IP摄像头云台。
同样拉取IP摄像头RTSP流不稳定,需22版以上才支持VLC插件
3. 录播机
4. FFmpeg.exe 命令行程序,有录制、转码、流化音视频等功能。
5. 手机 Android版 禾苗play有导播功能、微信小程序 禾苗Live
6. 某些摄像机带WIFI功能(可直接推流)
7. HDMI编码器(可直接推流)
8. IP网络摄像头(可直接推流)
三、 流媒体服务器
网络宽带需求:
码流为1280*720 1500 Kbps,100M网络大概支持100M/1500K≈66路左右。
使用Windows系统、开源服务端软件:
(一) node-media-server v2.1.4
项目地址:https://github.com/illuspas/Node-Media-Server
先下载node.js node-v12.14.0-win-x64.zip 解压到D盘
CMD命令行下,进入 d:\ node-v12.14.0-win-x64
执行 npm install node-media-server
建立配置文件 app.js
启动服务node.exe app.js
浏览器访问:http://127.0.0.1:8000 查看服务状态
(二) srs-2.0-258
开箱即用,解压、运行run.bat
SRS2文档 https://github.com/ossrs/srs/wiki/v2_CN_Home
SRS在线控制台 http://ossrs.net:1985/console/ng_index.html
SRS文档特别完善,学习流媒体技术推荐
(三) nginx-rtmp-win32
项目地址:https://github.com/illuspas/nginx-rtmp-win32
同样开箱即用,解压、运行nginx.exe
支持RTMP、HLS,不支持FLV
(四) ZLMediaKit
项目地址:https://github.com/xiongziliang/ZLMediaKit
UI硬盘录相机风格:https://github.com/chenxiaolei/ZLMediaKit_NVR_UI
大同二小易老师推荐
(五) 局域网同网段UDP组播推流
无需服务器,一对多发送,宽带占用小。加入组内的电脑都可接收。
1. OBS组播设置,注意是录像,采用组播地址,端口自定义,容器格式mpegts、视频编码 libx264、音频编码采用aac, ffplay.exe win7默认不能解码声音。
需要先加一条环境变量 :set SDL_AUDIODRIVER=directsound
运行:cmd /c set SDL_AUDIODRIVER=directsound&&ffplay udp://234.0.0.1:6666
Vlc无法播放。
2. Vmix 不支持组播,可以录制成WMV流, 使用windows media paly 播放。
另外可以打开外部输出,再用ffmpeg 推流。
Ffmpeg.exe -f dshow -i video="vMix Video" -f dshow -i audio="vMix Audio" -vcodec libx264 -acodec aac -s 1280*720 -b:v 1500k -f mpegts udp://234.0.0.1:6666
3. iAVCast串流直播 输入源较单一、只支持USB摄像头、采集卡,输出流较丰富。
支持HTTP、RTSP、UDP,也可RTMP推流。另外此软件非常占资源。
可与Vmix配合、Vmix做导播,打开外部输出、iAVCast采集,再输出流。
UDP流设置:输出流#1, 视频编码MPEG-2或MPEG-4 音频编码 AAC-LC, UDP应用到流#1。
VLC播放IP地址前需要加@符号,如命令行启动:vlc udp://@234.2.3.4:6400
四、 拉流
1、 VLC播放器
2、 FFplay 播放器
3、 WEB网页播放:
1) FLASH播放器Ckplayer 、SrsPlayer ;
2) HTML5播放器FLV.js
测试电脑:i7-4790,16G内存,单机测试,2020年1月5日
未测试手机端播放,学校使用一般不需要。
软件 | CPU占用 | 播放方式 | 进程数 | 内存占用 |
OBS Studio推流 | 3% | 1280*720 1500 Kbps推流 | 1 | 209M |
SRS-win流媒体服务 | 1% | RTMP + FLV | 1 | 11M |
Chrome浏览器 | 6% | 3个页面,FLASH + FLASH + HTML5 | 14 | 897M |
IE11浏览器 | 5% | 2个页面,FLASH + FLASH 不支持FLV.js | 3 | 295M |
Maxthon浏览器 | 6% | 3个页面,FLASH + FLASH + HTML5 | 11 | 698M |
VLC播放器 | 2% | RTMP + FLV | 2 | 264M |
FFplay播放器 | 3% | RTMP + FLV | 2 | 160M |
WEB播放器:
播放器 | 协议 | 播放方式 | 备注 |
FLV.js | FLV | HTML5 | 不支持IE |
ckplayer | RTMP、FLV | FLASH | |
ksplayer-web | RTMP、FLV | FLASH、HTML5 | 自动切换 |
cyberplayer | RTMP、FLV | FLASH、HTML5 | 支持IE8 |
五、 录制
(一) node-media-server v2.1.4
配置文件 app.js
录制文件可以设置到public目录, NMS有完整的HTTP服务器,可做视频点播回放。
mediaroot: './node_modules/node-media-server/public/media'
(二) srs-2.0-258
配置文件 conf\srs.conf 开启录制参数
SRS 不可做回放点播。可另外用nginx 做视频点播。
(三) nginx-rtmp-win32
WIN版不支持录制
六、 压力测试
测试电脑:i7-4790,16G内存。单机测试,2020年1月6日,各1小时左右。
OBS Studio 1280*720 1500 Kbps推流
测试1:
客户端软件 | 客户端数量 |
flazr-0.7-RC2 | 150 |
VLC | 10 |
FFplay | 10 |
浏览器 | 5 |
测试结果:
服务端软件 | CPU | 内存 | 网络 | 测试结果 |
node-media-server v2.1.4 | 5% | 105M | 320M | 正常 |
srs-2.0-258 | 5% | 43M | 283M | 正常 |
nginx-rtmp-win32 1.21 | 5% | 16M | 285M | Vlc偶尔卡顿 Ffplay卡顿更严重 浏览器播放正常 |
node-media-server v2.1.4
srs-2.0-258 (管理面板部分时间不准确,)
nginx-rtmp-win32 1.2.1 (测试时间未满1小时)
测试2:
客户端测试软件 | 服务端 | 数量 | CPU | 内存 |
flazr-0.7-RC2 | node-media-server v2.1.4 | 601 路 | 7% | 95M |
flazr-0.7-RC2 | srs-2.0-258 | 601路 | 7% | 90M |
flazr-0.7-RC2 | nginx-rtmp-win32 1.21 | 601路 | 7% | 22M |
附一:
1. 使用nssm 安装node.js 为系统服务
下地地址:http://www.nssm.cc/download
命令行运行 nssm install
APP设置
2. SRS安装为系统服务同样使用nssm。
不需设置日志文件, SRS配置文件可以开启保存日志文件。
srs_log_tank file;
srs_log_file ./objs/srs.log;
3. Nginx直接启动即可,自带进程守护。
附二:
1、 文件推流
ffmpeg -re -i file.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1/live/test1
2、 Windows桌面推流
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://127.0.0.1/live/test1
3、 播放RTMP流:窗口宽320 、无需缓存
ffplay rtmp://192.168.1.2/live/test1 -x 320 -fflags nobuffer
4、 枚举采集设备
ffmpeg -list_devices true -f dshow -i dummy
5、 视频截图
ffmpeg -i "dvr.flv" -ss 0:0:10 -vframes 1 -s 400x240 image-1.jpg
6、 湖南卫视RTMP地址 测试用
rtmp://58.200.131.2:1935/livetv/hunantv
7、
附三:
视频格式,这玩意实在太多了,估计有上百种。
每种格式还有很多版本,光看文件名是不能判断视频文件格式,有些是代表容器。
比如:MP4文件, 编码方式有好几种,看图,目前大多是H264
大多视频播放器,可以查看到视音频的编码信息,ffmpeg.exe –i 文件名,也可查看编码信息和Metadata数据。
视频码率,这个就直接关系视频质量。网络下载几个视频查看720P动态码率500左右。
帧率:国标PAL 每秒25帧。
关键帧:流视频直接影响就是播放体验,打开视频是秒播或者先黑屏才播放。
常用格式:
1. MP4
HTML5 浏览器默认支持的格式,现在的主流
2. FLV、F4V
FLASH 的视频格式,在手机还不是很流行的时候,网络在线视频基本都是这种格式。
很可惜FLASH已经死了,目前还有些技术并没有完美的替代方案。
3. WMV
这个是微软的,做PPT插入视频推荐,兼容性最好。
4. M3U8
目前比较常见,主要兼容苹果手机,实际就是一个文本文件,里面保存着视频文件列表,为TS文件,一个ts文件大概几秒左右。
通过转码软件ShanaEncoder和格式工厂,查看mp4 支持的编码器有:
附四:
SRS-回看点播服务,使用node.js写的,大部分功能完成,不想继续了。
录制好的FLV文件需要yamid.exe 修复Metadata数据,在线点播时才能随意拖动。
大概实现方法,开启SRS录制完成回调API,收到API后得到录制文件名,调用yamid.exe修复视频头,调用FFmpeg.exe 给视频截图,生成HTML,回放文件列表,通过WEB点播。