ffmpeg——ffserver的一个简单demo

转自:https://blog.youkuaiyun.com/u012868357/article/details/80240639

ffmpeg和ffserver配合使用可以实现实时的流媒体服务。

ffserver,负责响应客户端的流媒体请求,把流媒体数据发送给客户端。

ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm和要发送的流媒体文件的格式参数做具体的设定。

feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffserver启动后会自动生成。ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。

ffmpeg,负责媒体文件的转码工作,把你服务器上的源媒体文件转换成要发送出去的流媒体文件。

工作流程:

启动ffserver,配置参数 
ffserver先于ffmpeg启动,它在启动时需要加参数-f指定其配置文件ffserver.conf,该配置文件中包含端口信息、缓冲文件配置、传送流配置(如编码方式、帧率、采样率等)。具体命令未:ffserver -f ffserver.conf

启动ffmpeg,输入流 
启动ffmpeg,向缓冲文件输入数据流,该数据流可来自摄像头,也可来自本地文件。ffserver启动后,缓冲文件feed1.ffm就会被创建,feed1.ffm开始的部分已经写入向客户端传送流的配置信息(把它们理解为 feed1.ffm文件的头吧),在feed1.ffm做缓冲用时,这些信息仍旧保留着。 
ffmpeg启动的一个关键参数是:http://ip:port/feed1.ffm,其中的ip是运行ffserver主机的ip,如果ffmpeg和ffserver都在同一系统中运行的话,用localhost或者192.168.1.122也行。ffmpeg启动后会与ffserver建立一个连接(短暂的连接),通过这第一次的连接,ffmpeg从ffserver那里获取了向客户端输出流的配置,并把这些配置作为自己编码输出的配置,然后ffmpeg断开了这次连接,再次与ffserver建立连接(长久的连接),利用这个连接ffmpeg会把编码后的数据发送给ffserver。如果你观察ffserver端的输出就会发现这段时间会出现两次HTTP的200,这就是两次连接的过程。

连接过程 
ffmpeg从摄像头或本地获取数据后,按照输出流的编码方式编码,然后发送给ffserver,ffserver收到ffmpeg的数据后,如果网络上 没有播放的请求,就把数据写入feed1.ffm中缓存,写入时把数据加上些头信息然后分块,每块4096B(每块也有结构),当feed1.ffm的大小到了ffserver.conf中规定的大小后,就会从文件开始(跳过头)写入,覆盖旧的数据。直到网络上有播放的请求,ffserver从 feed1.ffm中读取数据,发送给客户端。

一下为一个简单的ffserver.conf的demo:

#1.配置服务器端口
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 30000
CustomLog -
NoDaemon
#NoDefaults

#2.配置ffm文件
<Feed feed1.ffm>
File /tmp/feed1.ffm #启动ffserver后会在/tmp目录下生成feed1.ffm文件
FileMaxSize 100M
</Feed>

#3.配置流
<Stream test1.flv>
Feed feed1.ffm  #test1.flv对应了feed1.ffm文件,使用ffmpeg生成feed1.ffm文件数据后,使用ffpaly可以播放test1.flv
Format flv
</Stream>

#4.配置stat.html
<Stream stat.html>
Format status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1.启动ffserver

ffserver -f ffserver.conf
1
ffserver started后会在/tmp/目录下生成feed1.ffm文件 
可以在浏览器中查看ffserver的情况:http://localhost:8090/stat.html (localhost为本地ip地址),该网址上有test1.flv和stat.html

2.启动ffmpeg

ffmpeg -i tmp/test.flv http://localhost:8090/feed1.ffm
#localhost为本地ip地址,若换一台电脑操作,则要用类似192.168.1.122的IP地址
1
2
输出的视频地址为:http://localhost:8090/test.flv

3.访问流

ffplay http://localhost:8090/test1.flv
1
使用ffplay无法播放,原因:原来的FileMaxSize 设置过小,数据丢失,将值设大一些即可。

http://www.ffmpeg.org/ffserver.html
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值