ffmpeg 接收网络流并解码_校园网络视频直播服务

9247225183fe11f94b9595a77c3244d9.png

一、 采集

(一) 视频采集方案

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插件 

cba2db2f15c8230ee412e1bdadb39b36.png

2. PC软件,VMIX常用于LED大屏播放,可控制IP摄像头云台。

同样拉取IP摄像头RTSP流不稳定,需22版以上才支持VLC插件

54b712f633fb8040c54669b992a54559.png

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 

2b992ddc0ee7dd7e1a5a7b8efcc6489b.png

启动服务node.exe app.js

d235fa4ecd04d3c1e0d411bdb6be5a1c.png

浏览器访问:http://127.0.0.1:8000 查看服务状态

(二) srs-2.0-258  

开箱即用,解压、运行run.bat

4a7dff13c921efa89f95f1615b2ce791.png

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无法播放。

891435a210a4968067cfd2c1793c8e12.png

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

6a2d114fb0cbc45f7f022bef4cfe62da.png

73d981f8eedf2d0f5834f8a36e41162b.png

录制文件可以设置到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

e8fdad3cbf8136524dd3d04ef6d42dcc.png

测试结果: 

服务端软件

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

36ece9d709a504d7c4b87716b58b2197.png

srs-2.0-258 (管理面板部分时间不准确,)

4488e06a1af67fbd40cea0b787410e7c.png

nginx-rtmp-win32 1.2.1 (测试时间未满1小时)

2b766e914ff4cbbed5ad8e083ef9870e.png

测试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

f33509961ed1bfc901c1dc8538d5e57d.png

0284f7f03feb829da5082f747ba68ff7.png

24cede7a725e899198c9f7a9c4f6ef55.png

附一:

1. 使用nssm 安装node.js 为系统服务

下地地址:http://www.nssm.cc/download

命令行运行 nssm install 

APP设置

61a3eefdf22503a078bd3f70e7c47473.png

日志文件:

a986bcdea890a9e981ed4d54a3af1a24.png

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 支持的编码器有:

b4a579ae3b126ae40ee82601f88a6c52.png

904bc3bb7b0317690c075e5397202e13.png

附四:

 SRS-回看点播服务,使用node.js写的,大部分功能完成,不想继续了。 

录制好的FLV文件需要yamid.exe 修复Metadata数据,在线点播时才能随意拖动。

大概实现方法,开启SRS录制完成回调API,收到API后得到录制文件名,调用yamid.exe修复视频头,调用FFmpeg.exe 给视频截图,生成HTML,回放文件列表,通过WEB点播。

06678a9d8585f5e4685f7bfe3feb6a6d.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值